【解決済み】エネミーの敵IDを変数で指定したい

返信する
なっぱ
記事: 80
登録日時: 2015年11月19日(木) 20:19

【解決済み】エネミーの敵IDを変数で指定したい

投稿記事 by なっぱ »

闘技場で戦う2体のエネミーをプレイヤーが選択肢から選んでバトルが始まる場面を想定しています。
エネミーの組み合わせ分敵グループを作成すると膨大な数になってしまうので、
変数で敵2体それぞれの敵IDを指定し、整列で場所を整えてバトルができるようなスクリプトを組むことはできないでしょうか?

または、同様の現象が再現できるような方法があれば教えていただきたいです。
viewtopic.php?t=13096
一応上記のトピックがやや近いかと思うのですが、エネミー2体以上の指定や整列の方法が分からないので、もし分かる方がいましたらよろしくお願いします。
最後に編集したユーザー なっぱ [ 2024年11月21日(木) 09:27 ], 累計 1 回
名無し蛙
記事: 352
登録日時: 2015年11月23日(月) 02:46

Re: エネミーの敵IDを変数で指定したい

投稿記事 by 名無し蛙 »

「整列」の正確なアルゴリズムがよく分からないんですけどこんな感じですかねぇ
ツクールMVの仕様でスクリプト欄の12行制限があるのでギッチギチなんですけど

①イベントコマンド「スクリプト」-整列計算用の画像プリロード

コード: 全て選択

const [id1, id2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
const [enemy1, enemy2] = [$dataEnemies[id1], $dataEnemies[id2]];
const [name1, hue1] = [enemy1.battlerName, enemy1.battlerHue];
const [name2, hue2] = [enemy2.battlerName, enemy2.battlerHue];
ImageManager.loadEnemy(name1, hue1);
ImageManager.loadEnemy(name2, hue2);
this.setWaitMode('image');
XXに1体目のエネミーIDを格納した変数ID、YYに2体目のエネミーIDを格納した変数IDを指定してください。

②イベントコマンド「スクリプト」-トループセットアップ直後に整列計算、及びエネミー追加

コード: 全て選択

const _temporaryMethod = this.command301;
this.command301 = function () {
    _temporaryMethod.apply(this, arguments);
    const [i1, i2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
    const [e1, e2] = [$dataEnemies[i1], $dataEnemies[i2]];
    const [b1, b2] = [ImageManager.loadEnemy(e1.battlerName, e1.battlerHue), ImageManager.loadEnemy(e2.battlerName, e2.battlerHue)];
    const x1 = ((Graphics.boxWidth - (b1.width + b2.width)) / 2) + b1.width / 2;
    const x2 = x1 + (b1.width + b2.width) / 2;
    $gameTroop._enemies.push(new Game_Enemy(i1, x1, 436));
    $gameTroop._enemies.push(new Game_Enemy(i2, x2, 436));
    this.command301 = _temporaryMethod;
    return true; };
①と同じくXXYYの部分を書き換えてください。

③イベントコマンド「戦闘の処理」
これは普通に、エネミーを一体も配置していないトループを指定してください。

この3つを並べれば恐らく再現出来ると思います。
かなりトリッキーな処理をしているので十分なテストをしないと断言出来ませんが。
3体以上だと流石に設計から見直さないといけませんね(スクリプト欄が狭すぎて)
なっぱ
記事: 80
登録日時: 2015年11月19日(木) 20:19

Re: エネミーの敵IDを変数で指定したい

投稿記事 by なっぱ »

名無し蛙 さんが書きました:「整列」の正確なアルゴリズムがよく分からないんですけどこんな感じですかねぇ
ツクールMVの仕様でスクリプト欄の12行制限があるのでギッチギチなんですけど

①イベントコマンド「スクリプト」-整列計算用の画像プリロード

コード: 全て選択

const [id1, id2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
const [enemy1, enemy2] = [$dataEnemies[id1], $dataEnemies[id2]];
const [name1, hue1] = [enemy1.battlerName, enemy1.battlerHue];
const [name2, hue2] = [enemy2.battlerName, enemy2.battlerHue];
ImageManager.loadEnemy(name1, hue1);
ImageManager.loadEnemy(name2, hue2);
this.setWaitMode('image');
XXに1体目のエネミーIDを格納した変数ID、YYに2体目のエネミーIDを格納した変数IDを指定してください。

②イベントコマンド「スクリプト」-トループセットアップ直後に整列計算、及びエネミー追加

コード: 全て選択

const _temporaryMethod = this.command301;
this.command301 = function () {
    _temporaryMethod.apply(this, arguments);
    const [i1, i2] = [$gameVariables.value(XX), $gameVariables.value(YY)];
    const [e1, e2] = [$dataEnemies[i1], $dataEnemies[i2]];
    const [b1, b2] = [ImageManager.loadEnemy(e1.battlerName, e1.battlerHue), ImageManager.loadEnemy(e2.battlerName, e2.battlerHue)];
    const x1 = ((Graphics.boxWidth - (b1.width + b2.width)) / 2) + b1.width / 2;
    const x2 = x1 + (b1.width + b2.width) / 2;
    $gameTroop._enemies.push(new Game_Enemy(i1, x1, 436));
    $gameTroop._enemies.push(new Game_Enemy(i2, x2, 436));
    this.command301 = _temporaryMethod;
    return true; };
①と同じくXXYYの部分を書き換えてください。

③イベントコマンド「戦闘の処理」
これは普通に、エネミーを一体も配置していないトループを指定してください。

この3つを並べれば恐らく再現出来ると思います。
かなりトリッキーな処理をしているので十分なテストをしないと断言出来ませんが。
3体以上だと流石に設計から見直さないといけませんね(スクリプト欄が狭すぎて)
名無し蛙様、ありがとうございます。

試したところ、とりあえず呼び出すことに成功しています。
使用していく中で、もし不具合などありましたらまた相談させていただくことがあるかもしれませんが、
一旦解決済みとさせていただこうと思います。とても助かりました。ありがとうございます。
返信する

“MV:質問”に戻る