【解決済み】MOG_BattleCursor味方へのアイテム選択の際の不具合

wanbee

ユーザー
しかしこれは検索してみても同様の不具合の話は全然聞かないので
私独特の環境的なものかとも思うのですが‥

MVのVer.1.6.2でRPGをツクっています。
サイドビュー戦闘で大きな画像でアクターと敵キャラを表示し、
ウィンドウのコマンドでなくアクターや敵キャラを直接クリックして
選択出来るようにしました。
1209-1.png
YEP_BattleEngineCore、YED_SideviewBattler、MOG_BattleCursorなどを
組み合わせて良い感じに出来たのですが、最後に致命的にうまくいかないことがありました。

味方側は主人公と仮面の女の2人です。
アイテムを使おうとするとこの画面になります。
1209-2.png
ここで例えばSP回復ハーブを使おうとすると、
そのアイテムはちゃんと選択されますが、同時に下にうっすら映っている仮面の女を
クリックしたとも認識され勝手にそのキャラを"選択"されてしまいます。
アイテム名の表示されている場所によって、下の画像が主人公だとそちらになってしまう訳です。
1209-3.png
これは何が原因なのでしょう。
アイテム欄やスキル欄を開いている時は、下のレイヤの画像ボタンは無効にするという事にできないでしょうか?
 
原因は特定できないですが、ピクチャーをタップ・クリップすると判断する様にしているですよね?
それなら、メニュー表示時には動作しない様に何らかの条件分岐を付け足せば良いのではないでしょうか?

自分はトリアコンタン様のピクチャーボタン化プラグインを利用してますが、タップが出来るピクチャボタンが表示されている時にメッセージウィンドウが表示していてもそのボタンを押すと動作した事があるので、恐らく似た様な現象だと思います。

メニュー表示時に関するスクリプトを利用した条件分岐に関する記述はツクマテのどこかで見た様な気がする。
 

munokura

ユーザー
MOG Battle Cursor は(だけじゃないけど)バグが結構ありますよ。
クリック対象が異常なのもバグだったと記憶しています。
できれば、プラグインは単体で動作テストして、検証いただければ幸いです。


 

wanbee

ユーザー
>>猫二郎さま
アドバイスありがとうございます!
そうですね、原因が解ればそうした対処がとれそうですね。

ただどこが不具合の本当の原因なのか、
後述しますが最初の段階で躓いてしまいました。
まずはもう一度そこを探っております。

>>munokura様
ありがとうございます!
また海外プラグインの翻訳や解説などではいつもお世話になっております。

ご指摘の通り、各種プラグインを単体ごとに調べようと色々オフにし原因を探ってみました。
オン、オフを弄ってみたのはYEP_BattleEngineCore、YED_SideviewBattler、MOG_BattleCursor。

ところが、MOG_BattleCursorをオフにした状態なら今回の問題は起こらない事を確認し
とりあえずまた元の全部オンにした状態に戻そうとしたら、何故かこれまで見た事の無い
不具合が現れました。

テストプレイをしようとすると
---------------------------------
RangError
Maximum call stack size exceeded
---------------------------------
というメッセージ画面が現れ、ゲームの起動自体が出来なくなりました。
MOG_BattleCursorをオフにすると元通りゲームも起動出来、戦闘イベントも普通に出来ます。
これまでは全てオンの状態で普通にテストプレイをしていたので、突然違う事になったように
見えて面食らっています。
1211_0.png
今回プラグインを弄ったのはオンオフだけで、パラメータなどの中身は一切弄らず
プラグインの並び順も変えていません。
それとも私が無意識に何かを変更してしまい、忘れているんでしょうか。

MOG_BattleCursorの設定は、こういう風になっています。
 

munokura

ユーザー
MOG_BattleCursor v.2.4.2 を使用しましたが、エラーは再現できませんでした。

  • RPGツクールMV v.1.6.3(コアはv.1.6.2で変わらないようです)新規プロジェクト
  • YED_SideviewBattler v1.0.0
  • YEP_BattleEngineCore v1.51
設定値は全てデフォルトのままです。

SS01.png

SS02.png
スクリーンショットを見たところ、MOG_BattleCursorはバグ修正前のバージョンを使用していると予想されます。
下記よりダウンロードし、差し替えてテストしてください。


また、プラグインの並び順を変更しても同じエラーが出るのか確認してください。

エラーメッセージはエラー画面に出るメッセージではなくスタックトレース を貼ってください。
下記が参考になると思います。
 
最後に編集:

wanbee

ユーザー
>>munokura様
ありがとうございます。
ちょっと今仕事の合間なので、終わってから改めて試行して報告させて頂きますが
まずはエラー報告のやり方を覚えました。
前発言のエラー時のスタックトレースというのを取得しました。これで何か解るでしょうか?
-------------------------------------------------------------------------------
rpg_managers.js:1949 RangeError: Maximum call stack size exceeded
at Game_Temp.initialize (MOG_BattleCursor.js:304)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
at Game_Temp.initialize (MOG_BattleCursor.js:305)
 

wanbee

ユーザー
すみません、エラーメッセージが出るようになった原因解りました!

ここへの相談前にMOG _Battle Cursorを色々弄っていた時に
もうひとつ、MOG _Battle Cursor Frontal (v1.0)というプラグインを
入れてオンにしていました。これを削除したら起動時のエラーは無くなりました。
余計なケアレスミスで申し訳ありませんでした。

これで問題は、一番最初の通りに戻った訳です。
改めていろいろ試行し、報告させて頂きます。
 

munokura

ユーザー
手元にMOG_BattleCursorのv.2.4がなく、v.2.3(本家配布)を入れてみましたが、エラーが再現できませんでした。
(GitHubで管理し始めたのは最近なので、途中経過のファイルが残っていません)

新規プロジェクトでテストしてエラーが出たら、それを教えて下さい。
できれば、v2.4.2に差し替えてテストしてください。
 

munokura

ユーザー
MOG _Battle Cursor Frontal はバグまみれなので、多分、作者も放置していると思います。
削除しましょう。
 

wanbee

ユーザー
まずMOG_BattleCursorをv2.4.2に差し替えて最初の相談通りの事を試しましたが
状況は全く同じでした。

次に新規プロジェクトを作り、
YEP_BattleEngineCore、MOG_BattleCursor 、YED_SideviewBattlerだけを入れ
ムノクラさんと同じ順に並べて試してみました。
1212_0.png
これだとカーソル的に問題はありませんが、
そもそもアイテム欄とアクター画像が重なっていないので質問の不具合が起こるか解りません。
今まだこの段階なので、次に画像が重なるように大きな画像に変えて試してみます。
 

wanbee

ユーザー
実はアクターの画像を大きな一枚絵に差し替える為に
BattleFormationCustomize.jsを使って
アクターのメモ欄に<BFC_座標x:y>の指定、

そのアクター画像を装備している武器などで差し替える為に
FTKR_TransformationState.jsを使って
ステートのメモ欄に<TFS_TRANSFORM:アクター画像>の指定などをしています。

ちょっと今回の新規プロジェクトにそれも入れてみる必要があるので
少々お待ち下さい。
 

munokura

ユーザー
不具合確認できました。

まず、画面が微妙に違うなーと思っていたら、YEP_BattleEngineCoreの設定がデフォルトではないのですね。
SS01.png

大きな画像にしなくても、下記のようにアクター画像にピッタリ重なる箇所をクリックすると再現します。
SS02.png

MOG_BattleCursor のバグ修正は敵キャラの画像でこの現象が起こっていたのを修正いただいたものです。
ほぼ、MOG_BattleCursor のバグが残っていると判断して良いと思います。
 

munokura

ユーザー
コードを読んでみて、なんとなくの予想なんですが、
JavaScript:
//==============================
// * Update
//==============================
var _alias_mog_bcursor_wactor_update = Window_BattleActor.prototype.update;
Window_BattleActor.prototype.update = function () {
    _alias_mog_bcursor_wactor_update.call(this);
    if (!this._window_mode) { this.visible = false };
    if ($gameTemp._arrowTarget[1] != null) { this.refresh_touch_selection() };
};
でrefresh_touch_selectionを呼んでいるのですが、これに当たる関数が見当たりません。
Window_BattleEnemy.prototype.refresh_touch_selection はあるので、これに代替するコードを加えれば解消するのかな?と思います。

書いてある内容はなんとなく理解できる???
挑戦はしてみますが、多分、今の自分には直せないので、どなたか熟練者の助力をいただければ幸いです。

 

munokura

ユーザー
試しに下記のコードを追加したのですが、アクター用のアイテムでアクターがクリックで選択できなくなってしまいます。
JavaScript:
Window_BattleActor.prototype.refresh_touch_selection = function () {
    if (this.isCursorMovable()) {
        for (var i = 0; i < $gameParty.members().length; i++) {
            if ($gameParty.members()[i] === $gameTemp._arrowTarget[0]) {
                var _i = this._members.indexOf($gameTemp._arrowTarget[0]);
                if (_i === this._index) {
                    this.processOk();
                } else {
                    this._index = _i;
                    this.select(this._index);
                };
            };
        };
    };
    $gameTemp._arrowTarget[0] = null;
};
$gameTemp._arrowTarget[0] がnullを返し続けて先に進まないようです。
$gameTemp._arrowTarget[1]に変更してみましたが、エラーになってしまいます。
 

wanbee

ユーザー
>>munokura様
あっ、やはりMOG_BattleCursorの不具合だったんですね。
原因がはっきりしなかった事が不安だったんですが、ホッとしました。
ありがとうございます!

ここからはもう私などには全く解らない難解な世界なので、
恐縮ですがもし何か進展が見えましたら、よろしくお願い申し上げます。

ところで、実はMOG_BattleCursorについてはもうひとつ気になる事があります。
画像のキャラをクリックする事でカーソルの選択がそのキャラに移動するという
プラグインなわけですが、私のこの大きな画像を使った環境では動作がおかしいようです。
1212_1.png
アクター側だけなんですが、クリックする位置が画面の向かって左側に
かなりズレているようです。それもキッチリしたズレでなく不安定な形に。
ザッとですが、水色で囲んだ辺りをクリックすると前列の主人公(1番目のキャラ)、
黄色で囲んだ辺りをクリックすると後列の仮面の女(2番目のキャラ)を選択した事になります。

どうもキャラ絵のうちの透明部分を含めた全体がクリック対象範囲となってしまっていて、
更にキャラの絵が重なっている部分がある為こういう事になってしまう気がします。
しかし敵キャラ側の方は同じ様に重なった部分もあるのに問題無く動作しています。
つまり普通にキャラが映っている絵の部分をクリックするとそのキャラが選択されます。

重なり部分が多くある大きな画像を使ってのカーソル選択はかなり強引な感じがするので
ある程度仕方がないのかな‥とは思っているんですが‥。
 

munokura

ユーザー
更に検証しました。
新規プロジェクトにMOG_BattleCursorのみを有効にして、実行したところ下記の不具合を確認しました。

  • FV・SV戦闘どちらでも発生。
  • 発生条件(おそらくアイテムだけでなくスキルでも発生)
    • 敵・アクター単体に使用するアイテムを選択するウィンドウ。
    • アイテム選択表示位置が敵・アクター画像と重なっている。
  • アイテム選択と同時に重なっている敵・アクターを選択してしまう。

アクターの方はデフォルトの使い方ではないので、その辺りの解決は難しいかも知れません。
あと、新しく分かったことは、このバグ修正を依頼した時に解決とされていたのが、下記の条件だったからだと予想します。
  • FV戦闘
  • YEP_BattleEngineCore を使用
この条件で行うと、敵キャラ画像と重なっている場合の問題が発生しませんでした。
 

munokura

ユーザー
回避方法を思いつき試したら、上手く動いたようなので、ご報告します。
一年前の自分だったら、最初に思いついたと思います…なまじプラグインが半端に読めるようになったので、他のプラグインで解決するという手法を考えなくなっていたようです。
「バグが有るなら、無効にして他のプラグインで補えば良いじゃない!」

  1. MOG_BattleCursor のクリック対象選択の有効化(Touch Selection)を無効にする。
  2. Mano_TouchSelectBattler を(YEP_BattleEngineCoreより下側へ)入れる。
これで、デフォルト素材では問題が回避できました。

▼戦闘時にターゲットのタッチ選択(しぐれん様作) - Mano_TouchSelectBattler.js
タッチ操作によるスキルの対象選択を可能にします。
 
最後に編集:

munokura

ユーザー
とか言っているうちに、トリアコンタン氏にバグ修正いただけました。

ちょこちょこっと、書き換えを加えた(バージョンアップ経歴等ヘルプ関連)ものを下記からダウンロードしてください。
これをv.2.4.4としています。
 

wanbee

ユーザー
>>munokura様
Mano_TouchSelectBattler は既に入手していましたが、MOG_BattleCursor と
併用するという事は気付きませんでした。
試してみたところ、味方側にアイテムや回復スキルを与える時の
最初の問題は見事に回避しました! こんな簡単な方法があったとは。

ただ、残念ながら今度は敵側を攻撃する時にカーソルが正常に動かなくなっていました。
MOG_BattleCursor のクリック対象選択の有効化 をfalseにした為のようです。
何とかこれを同時に有効に出来れば、解決になるんですが‥。
 

wanbee

ユーザー
munokura様 、トリアコンタン 様
すみません、コメントが行き違いになってしまいました。

MOG_BattleCursor v.2.4.4、導入し試してみました。
正に完全に解決、直上の敵側の問題も無く、
アクター側のアイテム、回復スキルの選択がスムーズに出来るようになっていました。

munokura様 、トリアコンタン様、こんなに早く最適な解決をありがとうございます!

このツリーではもうひとつ問題を挙げてしまいましたが、
あれはあくまで二次的な話のつもりでしたので、
最初に相談の「味方側へのアイテムや回復スキルの選択がうまく出来ない」という
この問題が回避出来た事で【解決済み】のヘッダを入れさせて頂きました。
重ねてありがとうございました!
 
トップ