仕様かバグか分からないもの

Kpoal

ユーザー
ツクールのシステムには、仕様かバグか分からないものがいくつもあります。
ですのでここでは、皆さんの知っているそのような不具合(?)を紹介していっていただければと思います。
(ただ、それだけだとただの文句になってしまうので、できれば解決策も一緒に提示していただければ幸いです)

ではまず私から、VX Aceの仕様について少し。

例えば敵が回復魔法を覚えていた時など、敵が行動で「味方単体」のスキルを選んだ際の事です。

自分はちょっと凝ったものを作るため、敵の残りHPから狙われ率を調整するステートを付与し、
HPの少ない者に優先して回復を行うというシステムを組もうとしていました。
しかし、それが何度やってもうまくいかなかったのです。
狙われ率0%のステートを駆使してすら、回復の対象を動かす事はできませんでした。

イベントから「戦闘行動の強制」をすればindexでターゲットの指定はできますが、
それでは行動のできるタイミングが戦闘イベントの実行できるタイミングに限られてしまい、非常に不便です。

そうして何度もテストプレイを繰り返すうちに気付いたのですが、
どうやらVXAceのシステムには、
敵が通常行動として『味方単体』を対象とするスキルを使った場合、ターゲットが敵の配列一番最後の者に固定される
という仕様(バグ?)があったようなのです。

つまり、
 1.スライム
 2.こうもり
 3.ホ○ミスライム
という順に敵が並んでいた場合、
ホ○ミスライムの行動内容に回復魔法を設定していたとしても、
それは必ず配列3番のホ○ミスライムにのみ向けられ、
スライムやこうもりに回復魔法をかけてくれることは絶対にないという事です。


とまあ、上の経緯でこの仕様について自分が知ったのは数年前の事なのですが、
最近ようやく(知識が増した結果)そのシステムを修正するスクリプトを組むことができたので、ここで公開しておきます。

class Game_Action
#--------------------------------------------------------------------------
# ● 味方に対するターゲット
#--------------------------------------------------------------------------
alias targets_for_friends_plusx targets_for_friends
def targets_for_friends
if item.for_friend? && item.for_one? && @target_index < 0 && !item.for_user?
[friends_unit.random_target]
else
targets_for_friends_plusx
end
end
end

ひとまずこれで、敵の行う味方対象の行動がランダムにターゲットを指定するようになり、
また、敵の狙われ率によってそれをコントロールする事もできるようになります。
ざっと試した限りではこれで問題ないと思うのですが、不具合などあればご報告下さい。


と、こんな感じで
ここでは皆さんが不便だと思った仕様と、その解決法をご紹介いただければと思います。

それでは。

追記
上記仕様はVXAceのものでしたが、
今MVで試してみたところ、ちゃんと正常にターゲット選択が行われている事を確認しました。
(対象ランダム・狙われ率でのコントロールも可)
どうやら、MVでは既に修正されていたようです。
 
最後に編集:
僕からも、既知の有名なバグをひとつ紹介します。
それは、「敵キャラの行動パターンが、実際のターン数より1ターン少ない選択肢が選ばれる」
というものです。

再現方法:
まずは、次の敵キャラの行動パターンをご覧ください。
battleTurnError.png

期待される動作:
1、3、5……などの奇数ターン目に「奇数ターン攻撃」、
2、4、6……などの偶数ターン目に「偶数ターン攻撃」が
選択されるはずです。

実際の動作:
1ターン目に、「0ターン攻撃」が、
2、4、6……ターン目に「奇数パターン攻撃」、
3、5、7……ターン目に「偶数パターン攻撃」が
実行されてしまします。

これは、コアスクリプトで、「ターン開始の際にターン数を1増やす」という
形になっているからで、敵の行動決定時は、まだ「前のターン」として
見做されてしまっているからです。

具体的なコアスクリプトの場所は、rpg_managers.js の 2205行目からの
BattleManager.startTurn (ターン開始時に呼ばれる箇所)です。
※なお、コアスクリプトは 1.4.0 で実験しました。

これは仕様と言ってもいいかもしれませんし、これを書きかえることで、
既存のゲームのバランスに影響が出るかもしれないので、
修正するかどうかは悩ましいところですね。
 

まるちゃん

ユーザー
たしか 2000、VX、VXace では
コモンイベントでキャラクタの動作指定するときに「このイベント」を選択できないってことです
修正するスクリプト作ったんですけれど
見つからないので他の人が作っているはずなのでググってください:kaoback:
見つけたらそのうち修正しておきます

他に自分が VXace で知ってるのは盾を封印した両手持ちと仮定している武器を二刀流で装備できたり
スキルの評価式では攻撃回数を考慮していないとかです
RGSS2、RGSS3 の詳しい内容とかは以下のサイトが私の知る限り一番多いです
"Artificial Providence" http://artificialprovidence.web.fc2.com

このサイトにも神無月サスケさんの言っている内容もありました
> 行動条件合致判定ターン数修正
 
まるちゃんさん、こん**は。
>たしか 2000、VX、VXace では
>コモンイベントでキャラクタの動作指定するときに「このイベント」を選択できないってことです

これ、初耳なので検証しましたが、コモンイベントでも「このイベント」は選択可能でした。
この場合、「このイベント」は、「そのコマンドイベントを呼び出したイベント」になります。

ただ、これだけだと、呼び出し側のイベントは「移動ルートの設定」しか出来ないことになりますね。
よって、僕はRGSS1~3では、以下のようにイベントコマンド「スクリプト」でコードを書いています。

var me = $game_map.events[@event_id];
$game_variables[2] = me.x;
$game_variables[3] = me.y;


この1行目で、変数me に、そのコモンイベントを呼び出したイベントのオブジェクトが入ります。
あとは、2、3行目では、そのイベントのプロパティ(x, y座標)が入る、というわけです。

以上、まるちゃんさんの質問の答えになっているかどうか不安ですが、参考になれば幸いです。
もし、これがまるちゃんさんの望む答えでなかったら、もう少し詳しく説明していただけたら、
何とかしたいと思います。
 

まるちゃん

ユーザー
神無月さん返信ありがとうございます
自分も検証してみたら動きました!あれ?
自分はゲーム作ってたときに動かないのか面倒だなぁって覚えがあったんですが…

確認の為にどういう動作をしたのかというと



修正はそれほど難しいものじゃなかったのでもう一度思い出して作ってみたのが以下のものです

コード:
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● 呼び出し予約されたコモンイベントを検出/セットアップ
  #--------------------------------------------------------------------------
  def setup_reserved_common_event
    if $game_temp.common_event_reserved?
      # 引数が設定されていない
      #setup($game_temp.reserved_common_event.list)
      setup($game_temp.reserved_common_event.list, @event_id)
      $game_temp.clear_common_event
      true
    else
      false
    end
  end
end
Game_Interpreter の setup だと引数を指定しないと @event_id に 0 が挿入されるので
これでコモンイベントで呼び出ししたときに移動ルートの設定ができないんだなぁと思ったのですが…
あれ?なんで動いたんだろう?他のスクリプトと競合があったのかもしれません
だけど、私は上記のような修正がないと動かないだろうなぁと考えるんですがどうなんでしょう?
 
最後に編集:

まるちゃん

ユーザー
連投すいません。自己解決したと思います
コード:
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● コモンイベント
  #--------------------------------------------------------------------------
  def command_117
    common_event = $data_common_events[@params[0]]
    if common_event
      child = Game_Interpreter.new(@depth + 1)
      child.setup(common_event.list, same_map? ? @event_id : 0)
      child.run
    end
  end
end
コモンイベントの呼び出しはこっちですね
自分はスクリプトによるコモンイベントの実行をしたせいで
「このイベント」による移動ルートの指定が出来なかったんだと思います…:kaoblush:

作っていたゲームで何をしていたか探して見たら
イベントの自律移動からコモンイベントをスクリプトを使って呼び出していました
アクションゲームを作ろうと思ってそんなことしてました:kaosigh:
 
最後に編集:

Kpoal

ユーザー
神無月サスケさん、まるちゃんさん、ありがとうございます。
やはり、RGSSは発売からずいぶん経ってるだけあって、情報も豊富なようですね。
(私が最初に紹介した仕様も、まるちゃんさんが教えて下さったサイトの「敵スキル選択挙動改善」に含まれていました)

では、私からももう一つ追加で紹介させていただきます。
ただし、これは「恐らく開発側の意図した仕様であるが、場合によって不便に働くことのある」ものであり、バグのような仕様とは別物である事をあらかじめご了承下さい。
(後、かなり長文になってます。そちらもご容赦下さい)

その仕様とは、
通常行動よりも先にイベントで戦闘行動の強制が行われた場合、本来そのターンに行うはずだった通常行動がキャンセルされる
というものです。

これ自体は、基本的に開発が意図して組み込んだ仕様であると思われます。
仮に、この仕様がなかった場合・・。

ボス戦にて、HPを削っていくとイベント発生・強力な全体攻撃を使用され、パーティが壊滅状態に
→しかし、ギリギリ耐え残った。『さあ、ここから反撃だ!』
→直後、ボスの通常攻撃。全滅した・・・。

ということになりかねません。
戦闘中のバトルイベントを、文字通りイベントとして使う分には、この仕様は充分役に立っていると思います。
(VXAce、MVとこの仕様が継続して残っている事も開発が意図している証拠だと思います)

しかし、これが邪魔になる場合も存在します。
自分の場合、それはバトルイベントを使ってカウンターの処理を組んでいた時の事でした。
敵が特定の行動に対して反撃を返すというのは、古今東西どのようなゲームでもありふれた事ですし、そのためのスクリプトも既に多くが作成・公開されています。しかし、自分はスクリプトに頼らず自力でカウンターの処理を組もうとしており、その結果として上の仕様に邪魔される事となりました。

要は、
こちらの行動でフラグを立てる→フラグによってバトルイベントを実行、戦闘行動の強制でカウンター発生
としていたのですが、それでは敵に先んじて攻撃・カウンターを誘発した場合、敵の本来行う行動がキャンセル。それを毎ターン続ける事で、敵はカウンター以外の行動を取れない、所謂「カウンターハメ」という状態に陥ってしまうのです。

上でも書いた通り、この仕様自体は有用なものですし、スクリプトを使って仕様ごと消してしまうのは賢明とは言えません。(そもそも、当時の自分の知識では修正スクリプトなど組めるはずもありませんでした。今でもできるか怪しいですが)
という事で、自分がこれを解決するために考えた方法を、四つほど紹介したいと思います。

  • 敵の敏捷性を上げる
 単純かつ確実な方法です。「敵が行動する前にカウンターを誘発してしまうと、ハメに陥る。ならば、敵が先に行動を済ませていればいい」という理屈です。具体的には、その敵と戦う時点で想定されるパーティメンバーの敏捷性よりも、敵の敏捷性を遥かに高く設定していればOKです。
問題点は、プレイヤー側が先制攻撃できる手段があれば、相変わらずハメが成立してしまうこと、敏捷性を上げる事でパーティの逃走成功率が下がり、また倒すまでに敵から一回は攻撃を受けてしまうため、プレイヤーのストレスになりやすいことなどがあります。
どちらかというとボスなどのイベント戦向きの手法です。

  • カウンターの発生を確率にする
 攻撃によってカウンターを毎ターン誘発する事が問題になるなら、確率によって発動しない場合があるようにすればいいという方法です。
問題点は、敵が単体で攻撃が集中する状況なら、確率を下げようが無理矢理カウンターを起こされてしまう可能性がある事、そもそも確率発動なので、そのカウンターが発生する場合としない場合で敵の強さにムラができてしまうことなどです。
なので、こちらは複数体で出現し、戦う回数も多くなる雑魚敵向きの手法です。
  • 通常行動を行わない
 いっそ開き直って、敵に通常行動を設定せず、全て「戦闘行動の強制」だけで済ませてしまおう、というもの。
当然通常行動を行わないためハメが起きる危険性はなくなりますが、『バトルイベントを起こせるタイミングでしか行動できない』『作るのが非常に面倒』など問題も多いです。
使うとすれば、特殊な仕様を持つイベント戦などでしょうか。
  • 透明キャラを一時的に出現させ、行動を肩代わりさせる
 個人的に一押しの方法です。
あらかじめ透明な敵を敵グループに隠しておき、カウンターのフラグが立ったときだけ一時的に出現、反撃を行わせてから再び隠すというもので、これならば攻撃を受けた敵本体は行動していないので、そのまま通常行動を行え、上に挙げた手法の持つ欠点のほとんどを克服することができます。
ただし、この手法も問題があり、まず一つにシステムを組むのが極めて難しい事、その他の敵出現周りの仕様を把握していなければ不自然な挙動になってしまう事などが挙げられます。
基本的に、上級者向けの手法です。
(ちなみに私は個人的に一時具現化法、IR法などと呼んでます。調べれば他の方が別の命名をしているかもしれませんが・・)


と、以上四つが私がカウンターハメを防ぐために利用している方法でした。
無駄に意地を張らずに大人しくスクリプトでカウンターを組んでいれば、こんな面倒な仕様との戦いをする必要はなかったのですが、参考までに知っておいていただきたいと思います。
この仕様や手法と言ったものを知っておく事で、戦闘作りに何らかの応用ができるかもしれませんから。

それでは、長文失礼いたしました。
 

Kpoal

ユーザー
前回の投稿はかなりマニアックなものでしたので、
今度はもっと一般的な、どこでも起こりうるようなバグを一つ紹介します。
こちらは明らかに仕様ではなく、バグと呼んで間違いないものですが。

私も以前他の方から教えてもらって知ったのですが、
幅2マスの机で、机の上にイベントを置いた場合、机の逆側からでも調べる事ができてしまう
というバグがあります。

言葉で語るより見てもらった方が早いでしょう。
まずは下をご覧ください。

desk_2wid_c.png

机の上に本があり、それを調べるとイベントが発生する。ごくありきたりの状況です。
しかし、このマップでは既にバグの発生原因が整っており・・。

desk_2wid_d.png

なんと、机の逆側からでもこのイベントを発生させることができてしまうのです。

原因は、机の幅が2マスである事。
「イベントとプレイヤーとの間に、カウンター判定のあるタイル(机)1マスが挟まれている場合でもイベントを起動できる」
という、ツクラーならまず誰でも知っているような仕様が、この状況下では悪さをしてしまっているのです。
上の画像はVXAceのものですが、当然MVでも同様に発生します。

対処自体は簡単で、イベントの実行内容で「条件分岐・プレイヤーの向き」を入れてやれば解決します。
上の例では
条件分岐・プレイヤーが上を向いている
 イベント
分岐終了
とすれば十分で、正しく上を向いた場合のみにメッセージが出るようにする事ができますが、
問題はこのバグ、発生する条件が非常に緩い事。
幅2マスの机の上にイベントを置くだけで発生してしまうので、
普通にゲームを作っているだけでも頻発してしまうのです。
とはいえ問題になる事が少ないのは、プレイヤーが気まぐれで何もないところを調べる様な事をしない限り、
その存在に気が付く事がないからでしょう。
私も、以前ある方から教えてもらうまではこんな現象の事は知らなかったわけですし。
プレイヤーがこのバグの存在を知っていて、わざと逆側から調べてやろうとでも思わない限り問題はないので、
私個人は放置してもいいんじゃないかと思っています。

コード:
class Game_Player < Game_Character
  #--------------------------------------------------------------------------
  # ● 正面のイベント起動判定
  #--------------------------------------------------------------------------
  def check_event_trigger_there(triggers)
    x2 = $game_map.round_x_with_direction(@x, @direction)
    y2 = $game_map.round_y_with_direction(@y, @direction)
    start_map_event(x2, y2, triggers, true)
    return if $game_map.any_event_starting?
    return unless $game_map.counter?(x2, y2)
    x3 = $game_map.round_x_with_direction(x2, @direction)
    y3 = $game_map.round_y_with_direction(y2, @direction)
    return if $game_map.counter?(x3, y3)   #←追加の1行
    start_map_event(x3, y3, triggers, true)
  end
end
スクリプトで修正するとしたらこんな感じでしょうか。
(VXAce用です)
もっとも、ここまでする必要があるのかは分かりませんが。
 
>Kpoalさん、こん**は。

>「幅2マスの机で、机の上にイベントを置いた場合、机の逆側からでも調べる事ができてしまう
>というバグがあります。

このバグは僕も何度も遭遇し、対処方法もKpoalさんと同様、プレイヤーの向きで判定しておりました。

しかも、同様のバグが、4方向移動で「下方向だけ通行不可能な柵」でも起こりえますね。
柵を超えたところにある宝箱などを、柵を無視して開けることが出来てしまいます。

拙作でも「神社のやしろの裏側から、表のお賽銭箱にお賽銭を入れられる」
「壁で囲まれた中(本来、別の地下道を通ってこないと入れないエリア)にある宝箱(レアアイテム入り)が、
道路側から調べるだけで取れてしまう」というバグが次々に報告されていました。
(※RPGツクールXPで作った、「Moon Whistle XP」というRPGです。リリース版では全て修正されました)

この手の問題は、いろんなケースが考えられるため、本当に悩ましいところです。
ひとつ仕様を変えると、今度は、別のケースが上手く作動しなくなったりする可能性もあるため、
完全に修正しようとすると、相当厄介かもしれません。
Kpoalさんの修正プラグインは、僕がざっとみた感じでは、問題なさそうに見えますが、
何か別の落とし穴が出来る可能性を僕は否定できません。
本当に、4方向の通行判定や、特にカウンター属性は、便利な反面、「鬼門」でもあると思っています。
よって、僕は仕様を変更するよりも、おとなしく「プレイヤーの向きでの判定」でやることにしています。
 

印度一好色

ユーザー
「条件分岐・プレイヤーの向き」
基礎の基礎だったのかもしれませんがすごい役に立つ技法ですね。
全然思いついていなかったので、まさに目から鱗です。
これで裏や横からトリガーのキャラに話しかけて立ち位置が変になったままイベントが始まるとか、
段差の上にあるはずの石板を段差の下(裏)から調べられるとか、
気付いていながら放置していた怪しい挙動を抑えることが出来ます。
kpoal先生、助かりました。ありがとうございます!
 

ツミオ

ユーザー
現在、「キャラクター生成」へのファイルの追加(リネーム)を自動でおこなうソフトウェアを作っています。
そんなわけでGeneratorフォルダの命名規則について詳しく調べる必要があったのですが、Kidフォルダについて仕様かバグかわからないことを発見しました。

僕がファイルをリネームする際に参考にしているサイトは
http://windmesser.cc/wiki/index.php?創作/ツクール_MV/キャラクター生成
こちらです。

こちらのサイトでは、
XX はパーツ番号です。01~99 のVariation で追加したファイルと同じ番号にします。
と書かれてあります。

実際、FemaleフォルダとMaleフォルダはそのようになっているようです。
ですが、Kidフォルダだけパーツ番号がp00から始まるのです。

ちょっと面白い発見だと思ったので書いてみました。

追加
TV、TVDフォルダ等はBody....
というファイル名なのに
SVフォルダだけbody...
というファイル名でした。

大文字小文字を区別して読み込んでいるのか読み込んでいないのか知りませんが、もし区別されているなら、パーツを作っている人も結構はまりそうな気がしました。
 
最後に編集:
私は現在、現代を舞台にしたゲームを制作しています。
そこで、日本語の名前を入力するためにプロンプトで名前入力をするために
「スクリプト」でこのように入力しました。
コード:
var familyName = null;
while(familyName === null){
  familyName = prompt("主人公の名字を入力してください");
}
var name = null;
while(name === null){
  name = prompt("主人公の名前を入力してください");
}
var fullName = familyName + name
$gameParty.members()[0].setName(fullName);
すると、そのあとに表示されるメッセージが高速で送られてしまいます。
イレギュラーな方法であることはわかっているのですが、どうなっているのでしょうか。
 
>シトラスさん、こん**は。
prompt という関数を調べてみたら、HTML5の関数なのですね。
HTML5レイヤの関数とMVレイヤの関数は、相性の問題が常につきまといます。
今回も、そのケースだと思われます。

解決策としては、入力フォームを使った、文字入力プラグインの導入などいかがでしょう。
手前味噌で恐縮ですが、以下のようなプラグインを、パブリックドメインで出しております。
http://www.moonwhistle.org/tkoolMV/111_InputForm.zip
デモ動画:
こちらの使用もご検討なさってみては?
 

Kpoal

ユーザー
今回、「Sky=Ocean's Story」を作るために、初めてMVに触らせていただきました。
(これまでは買ってはいたもののほとんど使っていなかったので)
と言う事で、ゲームを一本完成させるまでに発見したMVの気になる仕様やらバグやらを一度にご紹介。

1.乗り物乗降によるBGMの保存について
乗り物を積極的に扱うのも今回が初めてだったのですが、
どうやらある乗り物に乗った時、その時点で保存されたBGMが
乗り物から降りた時に再び流れ出すと言う仕様。これが案外融通が効かない事が分かりました。

広大なフィールドマップ上でのみ乗り物を使用し、
乗り物に乗ったまま場所移動をしたりすることがないのなら便利な仕様ですが、
たとえば

フィールドマップ上で船に乗る(BGM:フィールド→Ship)

船に乗ったまま洞窟に突入(BGM:Ship→洞窟)

洞窟の中で船を降りる

とすると、洞窟の中で
船に乗った時のBGM、即ちフィールド曲が再開して流れ出してしまう事が分かりました。

この保存領域はイベントコマンドで行う「BGMの保存」とは別枠なので、
これを実行して上書きしてやる事もできません。

自分は非常に面倒なイベントコマンドの組み合わせで回避しましたが、
もしこういった動作を多用する人がいれば専用のプラグインを組んだ方がいいかもしれません。


2.必中スキルでは敵の「ステート有効度」を無視する
戦闘に関連した仕様です。
今回ゲームを作成していたところ、
ステート有効度:毒*0%
に設定している敵にも毒が入り、バグかな?と思っていたのですが、
調査の結果スキルの命中タイプを「必中」にしていると
敵のステート有効度が反映されなくなることが分かりました。

絶対に毒にしたくないボスキャラなどがいる場合、
有効度ではなく「ステート無効化」を使うか、
もしくはそもそも状態異常付与手段を必中にしないなど
工夫した方がいいでしょう。

逆に、「耐性のある敵でも確実に状態異常にできる」チートスキルを作る場合には
役立つかもしれません。
それを作る場合以外は他の方が提示して下さったプラグインを入れた方がいいですが。

3.ターン終了時イベントで「戦闘行動の強制」をさせると、ステートなどのターンカウントが2進む
これまた特殊な戦闘を作成したい人以外には関係のない話ですが。
バトルイベントの実行条件を「ターン終了時」にしておき、
ターンの終わりに「戦闘行動の強制」で敵味方の誰かに行動を行わせた場合、
ステート・能力強化弱体の解除ターン経過、リジェネ効果などのHP・MP・TP再生など
ターン終了時に行われる全ての処理が、
イベントの発生前と発生後で二度行われるようです。

この仕様のために、自分は「毎ターン終了時にバフ行動を起こす敵」などのアイデアを
全てボツにされました。
プラグインの知識はさっぱりなので修正の仕方がまるで分かりませんが、
修正できるなら真っ先にしたい仕様です。


4.「文章のスクロール表示」のバグ
これは、某掲示板でも話題になっていたそうですが、MVではver1.3あたりから
「文章のスクロール表示」を実行しても文章が一切表示されないバグが発生しているようです。
エンディングを作ろうとしてそれに気が付きましたが、かなり深刻なバグだと思います。
これに関しては有志の方が修正プラグインを配布しているので、そちらを使わせていただきました。
 
最後に編集:
>Kpoalさん
気づきにくいバグを教えてもらい、ありがとうございます。
ver1.5.0になってから、あまりバグに関する報告は聞かないので、かなり貴重な情報だと思います。
1.と3.は、私も知りませんでした。

>2.必中スキルでは敵の「ステート有効度」を無視する
これに関しては、チョコワ部さんも見つけられていて、最近トリアコンタンさんが修正プラグインを配布してくれています。リンクを貼っておきます。
https://twitter.com/triacontane/status/898716044373639168

1.に関しては、飛空艇で様々なマップを行き来したりするゲーム、
3.に関しては、ターン中にたくさん行動する人にとっては、かなり深刻な内容ですよね。
特に3.は、私も同じようなことをやっているので、とても気になります…。
私もスクリプトは苦手なのですが、
「戦闘行動の強制」で、ステートのターン更新処理をどこかで複数回呼んでしまっている、という感じなのでしょうか。
実際の戦闘テストをしてみて、検証してみたいと思います。
なお、少し趣旨が異なりますが、サスケさんが「戦闘行動の強制をした時に行動回数をリセットするのを防ぐ」プラグイン
https://forum.tkool.jp/index.php?threads/プラグイン-「戦闘行動の強制」の際、残りの行動をリセットしない.306/
を作ってくれているので、こちらを使った際も同じような症状になるか、あわせて検証してみます。
 
>Kpoalさん
3.ターン終了時イベントで「戦闘行動の強制」をさせると、ステートなどのターンカウントが2進む
について、新規プロジェクトで試してみました。
「3ターン毒」とは、「行動終了時に解除」に「3」を入れたものです。
77283aa8ab77ed42f9c09b1c20a47fa0.png
…ただ、私の環境では再現しませんでした。やり方、あっていますか?
もしくは、プラグインか、他の要因かもしれませんか?
何か勘違いしてたら、ごめんなさい。何か指摘いただけるとありがたいです。

ただもう一つ、不思議な点に気付きました。
「2ターン行動終了時まで毒」とやると、「戦闘行動の強制」で追加で行動させても、継続ターン数はそのままなんです。これは意外でした。
aa0d3d3bde345a6970eb12f93650d37f.png
こちらは自動解除のタイミングを「行動終了時」にし、継続ターン数を「2」にしました。
『戦闘行動の強制は、ステート解除の行動に含まれない』、ということなのでしょうか。

Kpoalさんにいただいた症状と全く真逆になってしまい、どうなっているのか私もよくわかっていません…。
仕様なのか、バグなのか、微妙なところです。もっとスクリプトに詳しい人に聞いてみるほうがいいのかも…です。
 
最後に編集:

Kpoal

ユーザー
「行動終了時に解除」ではなく、これが発生するのは「ターン終了時に解除」のものです。
あくまで、「本来ターン終了時に行われる処理」がこの場合二回進むのであって、
行動終了時にカウントを1減らす「行動終了時に解除」では不具合は発生しません。

確かめる場合にはアクターにTP再生率を付けていると分かりやすいと思います。
バトルイベントが発生する前と後、2回TPゲージが動いていることが分かるので。

戦闘に関するプラグインを全てOFFにしても発生したので、
プラグインのせいだとは考えられないと思います。

追記
後、一つ目の動画を見ると本来3ターン目で治るはずの「3ターン毒」が、
付与からターン終了を2回またいだ時点で解除されており、
確かにこの不具合が発生している様に見えるのですが、
どうでしょうか?
 
最後に編集:
>Kpoalさん
再現しました!! いまどうがにあげますね 。
敵グループイベントの「ターン終了時」のイベントタブが2つ実行されて、
そのどちらでも、「戦闘行動の強制」が使われていた場合、
2つめのイベントタブの「戦闘行動の強制」の直前に、ステートのターン経過が余計に1回行われるようです。
これはバグですね。
 
最後に編集:

Kpoal

ユーザー
こちらではほぼどんな状況でも発生するのですが、
そちらでプラグインを入れていませんか?
動画を見る限りステートの残りターンを表示するプラグインを使っているように見えるのですが。
少なくとも、こちらでは作成したて・プラグインなしの状態のプロジェクトで検証しています。

なお、敵グループ「ターン終了時」イベントで「戦闘行動の強制」を含んだものを複数実行した場合、
イベントが実行されるたびに2回、3回・・と処理が行われることが分かりました。

追記
こちらではイベントタブが一つだけでも起きたので、やはり何か条件に違いがありそうですね。
ちなみに、「戦闘行動の強制」が入っていないイベントタブがカウントされない事は確かなようです。

追記2
というより、そちらではターン終了時イベントの中でステートの付与を行っているのが原因ではないですか?
ターン終了時イベントでTPを増やすステートを付けても、
その時には既に1回目の処理は終わった後なので。
アクターの特徴としてTP再生率を付けた方が分かりやすいと思います。
 
最後に編集:
なるほどです。
やはり、【敵グループ「ターン終了時」イベントで「戦闘行動の強制」を含んだものを複数実行】する毎に
余計なターン経過処理が1個ずつ増えていく
、というバグなのだと思います。

動画中の新規プロジェクトのプラグインは、解除までのターン数を確認するためだけに、トリアコンタンさんのStateRingIcon.jsプラグインを入れました。
https://twitter.com/triacontane/status/860112631251652610
あと、デバッグスピードを速くするため、戦闘スピードを早くするプラグインを入れました。
https://www.dropbox.com/s/v4jdj1yqn8emglg/minRPG_CustomizeGameSpeed.js?dl=0
それ以外のプラグインは入れていません。
StateRingIcon.jsプラグインのおかげで、目に見えて確認できました。
動画ではハロルドのスパークの後 → スライムA・Bの上に出てる、ターン解除までの数字が「3→2」に。
その後のスライムの攻撃の後   → スライムA・Bの上に出てる、同じターンなのに数字が「2→1」に
なっていることが、明確にわかると思います。
「戦闘行動の強制」をしたキャラだけでなく、敵味方全員がなっているので、
おそらくバトラークラスのバグではなく、敵グループイベント系のバグだと思われます。

追記、読みました。
「イベントタブが1つだけでも起きた」のですね。上記の太字以外にも、原因が他にもあるのでしょうか…。
私もイベントタブ1つでいろいろ試してみたのですが、増えませんでした。
「文章」イベントと「戦闘行動の強制」イベントしか、移動させてないのになぁ…。

追追記: 5ターン継続するはずのTP再生率ステートが、2ターン目で完全解除されるバグを、動画にしてみました。
ハロルドのセリフも含めて、アホ丸出しですが、検証には楽しさも必要かと思います。^^;。
 
最後に編集:
トップ