シンボルエンカウントでの、シンボルと登場敵キャラを一致させたい

sirotezza
記事: 40
登録日時: 2018年5月10日(木) 23:13

シンボルエンカウントでの、シンボルと登場敵キャラを一致させたい

投稿記事by sirotezza » 2024年4月23日(火) 12:03

お世話になってます。

マップ上でうろうろしている敵イベントと接触することでエンカウントする、いわゆるシンボルエンカウントを採用しているのですが、マップ上に表示されている敵シンボルと、エンカウントする敵キャラの属する敵グループとを一致させたいです。

具体的には、

例えば、そのマップ内に登場する敵キャラが
・スライム
・ゴブリン
・こうもり
の3種類いて、

エンカウントする敵グループが
・スライム、ゴブリン
・スライム、こうもり、
・ゴブリン、こうもり
の3パターンあるとします。

この場合に、マップ上で”スライム”の敵シンボルと接触した時には”スライムの含まれる敵グループ”とのみ、”こうもり”の敵シンボルと接触した時には”こうもりの含まれる敵グループ”とのみエンカウントさせたいのです。

現状、マップ上でどんな敵がいるか見えるようにしたいのと、フィールドやダンジョンごとにも違いを出したいと考えており、
マップ上の敵シンボルの画像はバラバラで、エンカウント処理は「プレイヤーから接触」で「ランダムエンカウントと同じ」という仕様です。

現状だと、スライムのシンボルと接触した際にスライムの含まれない敵グループとも戦闘になる可能性があり、プレイヤーからすると「あれ、スライムおらんやん」と違和感を感じてしまいます。
これを解決する方法をどなたかご存知ないでしょうか?


もちろん、変数や条件分岐を駆使すれば不可能ではないでしょうが、敵キャラや敵グループ、そしてマップ上の敵シンボルイベントの数も膨大であり、イベントごとに個別に設定するのは現実的ではないように思います。

例えばイベントのメモや注釈に敵キャラのIDを記載して、そのIDの含まれる敵グループとのみエンカウントするというプラグインなどがあればありがたいのですが……。

アバター
くろうど
記事: 265
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡を取る:

Re: シンボルエンカウントでの、シンボルと登場敵キャラを一致させたい

投稿記事by くろうど » 2024年4月23日(火) 15:11

もしかしたら自分も必要になるかもしれないと思ったので、
MZ版でプラグインを作ってみました。
たぶん、MVでも動くと思います。

KRD_MZ_TroopId(シンボルエンカウント用の敵グループ番号)

↓ダウンロードはGitHubから↓
https://github.com/kuroudo119/RPGMZ-Plugin

尚、MVでの動作は未確認なので、動かない場合は、他の方にお任せします。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
ゆわか
記事: 298
登録日時: 2015年11月10日(火) 20:08
連絡を取る:

Re: シンボルエンカウントでの、シンボルと登場敵キャラを一致させたい

投稿記事by ゆわか » 2024年4月23日(火) 16:07

※すみません。
 くろうどさんの投稿に気づかず投稿してしまいました。
 消しても良かったんだけどまあ一応残しておきます。
 すみません。

敵のシンボルイベントの内容をコモンイベントにして
戦闘イベントを一律で管理する方法がよいかなと思いました。

とりあえず、メモ欄の文字列によって分岐させる方法は、こちらを参考に。
viewtopic.php?t=2080
https://forum.tkool.jp/index.php?threads/3818/

コモンイベント作成例(敵シンボルの内容は、このコモンイベントを呼び出すだけ)
注意点としては、イベントのメモ欄記入忘れるとエラーがでることかな。

----------------
◆変数の操作:#0001 敵の名前 = $dataMap.events[this._eventId].note
◆条件分岐:スクリプト:$gameVariables.value(1).match(/スライム/)
◆戦闘の処理:スライム*2

:分岐終了
◆条件分岐:スクリプト:$gameVariables.value(1).match(/こうもり/)
◆戦闘の処理:こうもり*2

:分岐終了
◆条件分岐:スクリプト:$gameVariables.value(1).match(/ゴブリン/)
◆コモンイベント:ゴブリンの敵グループ

:分岐終了
◆イベントの一時消去
--------------

敵の名前がスライムだった時、ランダムでスライムいりの敵部ループ複数から選びたい場合は
乱数とかを取得して分岐させます。
ごちゃごちゃして見難くなる場合は、ゴブリンの例のように
別途、敵の名前ごとにコモンイベントに分割して呼び出せば管理しやすいです。
名無し蛙
記事: 304
登録日時: 2015年11月23日(月) 02:46

Re: シンボルエンカウントでの、シンボルと登場敵キャラを一致させたい

投稿記事by 名無し蛙 » 2024年4月23日(火) 20:35

自分も気になったので便乗して一つ違った方法を提示しましょう。
イベントコマンド>スクリプトを利用する方法です。

以下のコードをコピペすると
「同マップのエンカウントリストから指定のエネミーIDが含まれるトループをランダムで選択。
及び戦闘処理に移行する。」
という命令を実行します。
ランダム選択にあたり重みや出現範囲、それに逃走・敗北時の処理等は簡略化の為に無視しています。

コード: 全て選択

const enemyId = 1; // エネミーIDを指定
const candidates = $gameMap.encounterList()
    .filter(encounter => {
        return $dataTroops[encounter.troopId].members.some(member => {
            return member.enemyId === enemyId;
        });
    }).map(encounter => encounter.troopId);
const troopId = candidates[Math.floor(Math.random() * candidates.length)];
if ($dataTroops[troopId]) {
    BattleManager.setup(troopId);
    SceneManager.push(Scene_Battle);
}

“MV:質問” へ戻る