じゃんけんのような戦闘システムをつくりたい

メイドインヘブン太
記事: 2
登録日時: 2022年11月12日(土) 22:40

じゃんけんのような戦闘システムをつくりたい

投稿記事by メイドインヘブン太 » 2022年11月12日(土) 22:55

RPGツクール初心者です。
質問させていただきます。

RPGツクールの戦闘システムについてですが、従来のターン性ではなく、
トランプとじゃんけんが合わさったような、自分と相手が同時に出し、強い方が勝つといったシステムを作りたいのですが
どのようにすればいいのか私には分かりません。

例えば
①自分と相手が5枚づつ数値の入ったカード(スキル)を持つ
②内1枚づつ選んで出す
③自分「20」VS相手「10」
④自分の勝ち相手に「20」ダメージ
⑤以下体力がなくなるまで繰り返し

といったイメージです。こういったシステムはRPGツクールでは難しいでしょうか?
既存のゲームではムシキングなんかが近いとおもいます。

素人意見、説明不足で申し訳ないのですが、よろしくお願いいたします。

wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by wingly » 2022年12月14日(水) 18:32

メイドインヘブン太 さんが書きました:RPGツクール初心者です。
質問させていただきます。

RPGツクールの戦闘システムについてですが、従来のターン性ではなく、
トランプとじゃんけんが合わさったような、自分と相手が同時に出し、強い方が勝つといったシステムを作りたいのですが
どのようにすればいいのか私には分かりません。

例えば
①自分と相手が5枚づつ数値の入ったカード(スキル)を持つ
②内1枚づつ選んで出す
③自分「20」VS相手「10」
④自分の勝ち相手に「20」ダメージ
⑤以下体力がなくなるまで繰り返し

といったイメージです。こういったシステムはRPGツクールでは難しいでしょうか?
既存のゲームではムシキングなんかが近いとおもいます。

素人意見、説明不足で申し訳ないのですが、よろしくお願いいたします。


まず確認ですが、
⑴バトル開始
⑵スキル(カード)選択【小攻撃:5】消費TP5 /……【絶大攻撃:50】消費TP70 のような感じ?
⑶相手の数値と参照
⑷それによってダメージ

といった感じでいいでしょうか?でしたらいくつか案は浮かびました。
ただ自分は今パソコンを持ち合わせておらず、想像で組み立てただけなので実際に再現してみたわけではありませんのでご注意ください。
プラグインで欲しければ各有名プラグイン製作者(トリアコンタンさんなど)のTwitterからマシュマロなりで直接頼むのが早くて確実です。

以下自分の案説明。初心者ということで、じっくり説明するので長いです。再現できないため確実でない かつ 誤った解釈をしている可能性があるということをご考慮ください。

次の返信に書きます。

2022-12-18追記- ̗̀
案1:以下のやつ。
案2:プラグイン活用してなんとかスピーディに
案3:実際にカード画面に表示、選択

案2は頑張れば想像でも。案3は使ったことない(存在は知っている)プラグイン達をフルに活用するため想像での再現はかなり厳しい

って感じです。もし案1に不満があれば。
出来るだけのサポートはします。
最後に編集したユーザー wingly on 2022年12月18日(日) 00:05 [ 編集 2 回目 ]
どうも。winglyです。
現在受験勉強によりツクールを離れています。
wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by wingly » 2022年12月14日(水) 20:45

まずはプラグイン導入。
トリアコンタンさんのプラグイン、「アクターコマンド封印プラグイン」を導入してください。
https://docs.google.com/spreadsheets/u/0/d/1BnTyJr3Z1WoW4FMKtvKaICl4SQ5ehL5RxTDSV81oVQc/htmlview#
から探してダウンロード。「プラグイン一覧(MZ)」タブの143列目、番号で言うと139番目にあります。
直リンクOKか微妙なので......。お手数をおかけしますがお許しを。
こちらは導入しなくても結構ですが、導入すれば「防御」や「アイテム」などあなた様の考えているバトルシステムには不要そうなものを消せます。
要はバトルコマンドを「カード(スキル)」を選ぶコマンドだけにできます。
不要であれば飛ばしてください。

では説明して行きます。まず大前提として、

案1ではターン制バトル(TPBではない)敵とアクターは一対一。所持カード=所持スキル。数値にランダム性はない。カードを選ぶ=スキルを選ぶ。
実際のバトルでは、エネミーカード選択→アクターカード選択→お互いのを参照→高い方が攻撃
という動きとさせていただきます。カード選択前に一応内部処理的には攻撃したことになるのでダメージが表示されるかもです。

では、(長いので次コメ)
最後に編集したユーザー wingly on 2022年12月14日(水) 21:50 [ 編集 1 回目 ]
どうも。winglyです。
現在受験勉強によりツクールを離れています。
wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by wingly » 2022年12月14日(水) 21:27

まずは各設定。
◎変数(名称任意)
どの番号でもいいので【アクターが選んだカード攻撃力】【エネミーが選んだカード攻撃力】【選んだカード[アクター]】【選んだカード[エネミー]】をご用意ください。
ここでは左から順に、【変数A】【変数B】【変数C】【変数D】とさせていただきます。
あらかじめ、ゲーム冒頭などで この【変数A】【変数B】に0を代入しておいてください。でないとバグります。
◎コモンイベント(名称任意)
【エネミー行動】・【アクター行動】
の2つをご用意ください。トリガーはなしで

そしてスキル作成。

大事なポイントがありまして、
必ず「アクター用」「エネミー用」で分けてください。すでに作っている場合は後の手順で新たに「エネミー用」の作成を。
これはアクターとエネミーで処理を分けたいからです。ご了承ください。

    アクター用スキル
ポイントがいくつか、まず計算式ですが、

コード: 全て選択

v[変数A]

としてください。
※【変数A】は【アクターが選んだカード攻撃力】と設定した変数のIDナンバーです。【変数20】に設定していたらv[20]と記述してください。[]で数字を囲うのを忘れずに
⭕️v[20]
❌v20

そして速度補正をめっちゃ低く設定してください。これはアクターが絶対に後攻になるようにしたいからです。(もちろんアクターのAGI(敏捷性)がどのエネミーよりも低ければ0のままでもいいですが、一応。というか気にしないのであればアクターのAGIも低く設定しておいてください。)

さらに、分散度0%、「必中」「HPダメージ」「会心:なし」にしておいてください。
分散度が0でないとダメージが変わります。必中でないと攻撃が外れることがあります。会心はありでもいいですが、これはいわゆるクリティカルです。ダメージが変わってしまいます。

そしてメモ欄にわかりやすく数値を記述しておくといいかもしれません。

最後に「使用効果」の欄に【アクター行動】のコモンイベントを設定しておいてください。
メッセージは空にしておくことをお勧めします。「〜の攻撃!」が2回表示されますので。

    エネミー用スキル
基本的にアクター同様。なのでコピーして貼り付ければいいと思います。その前提で続けます

まず、計算式ですが、 v【変数B】に変更してください。【変数B】です。21番なら21に。

そして逆に速度補正をめっちゃ高く設定してください。これはエネミーが絶対に先攻になるようにしたいからです。(アクターの方で設定していれば多分何もしなくても大丈夫。
ただ、コピペしてると思うので、必ず0以上に戻しておくことを忘れずに

最後に「使用効果」の欄に【エネミー行動】のコモンイベントを設定しておいてください。
メッセージは同様に空白。というかその方がいいと思います。
最後に編集したユーザー wingly on 2022年12月15日(木) 00:20 [ 編集 6 回目 ]
どうも。winglyです。
現在受験勉強によりツクールを離れています。
wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by wingly » 2022年12月14日(水) 22:40

コモンイベント

前提
ここではわかりやすく、アクターのスキルは「1〜5」番。エネミーは「6〜10」番とし、
それぞれのカードの数字が、[5、10、20、30、50]だとします。

    【エネミー行動】
このコモンイベントは想定では敵攻撃後、発動するはずです。

まず「変数の操作」を選択
【変数C】、【選んだカード[エネミー]】変数に下記スクリプト内容“代入“

コード: 全て選択

$gameTemp.lastActionData(0)
誰かが直前に使用したスキル。このエネミーが選択したスキル(カード)のIDが取得されるはず……。自信はあまりないです。

続いて
◇条件分岐:【選んだカード[エネミー]】=6
◇変数の操作
【エネミーが選んだカード攻撃力】=5
:それ以外のとき
:分岐終了

条件分岐:【選んだカード[エネミー]】=7
◇変数の操作
【エネミーが選んだカード攻撃力】=10
:それ以外のとき
:分岐終了

のような感じでそれぞれ五つ(スキル分。ここでは5つだけとしている)設定していってください。(わかりづらくてすみません。)
要は条件分岐でタブ1の変数を選び、【カード数値[エネミー]】変数を選択。「=」を選んで、各スキルのIDナンバーを入力。真ならそれに見合った、カード数値を変数の操作で【エネミーが選んだカード攻撃力】に代入。というのを各スキル分、5回繰り返していくということです。

よくわからなければご質問ください。自分でも書いててわかりづらいなぁwwwと感じてます :?

エネミーはこれだけで結構です。

    【アクター行動】
このコモンイベントは想定では自身攻撃後、発動するはずです。ほぼ同じなのでスキル同様。
エネミーのをコピぺすると楽でしょう。その前提で進めます。

まず、【選んだカード[アクター]】変数に代入する、に変更。スクリプトではなく「直前」の【直前に使用したスキルのID】に変更しましょう。
自身が選択したスキル(カード)のIDが取得されるはず……。自信はあまりないです。

続いて
◇条件分岐:【選んだカード[アクター]】=1
◇変数の操作
【アクターが選んだカード攻撃力】=5
:それ以外のとき
:分岐終了

条件分岐:【選んだカード[アクター]】=2
◇変数の操作
【アクターが選んだカード攻撃力】=10
:それ以外のとき
:分岐終了

のような感じでそれぞれ五つ設定していってあると思いますが、それぞれを上記のように
エネミーではなくアクターのに変更していくだけです。(変更点赤色)
エネミーは「6」スタートでしたがアクターは「1」スタートです。※ここでは仮にそうしてる。
条件分岐の参照変数・定数変更、そして変数の操作における【エネミーが選んだカード攻撃力】を【アクターが選んだカード攻撃力】に変更し、エネミーとは攻撃力を変えたければ代入する数値も変えてください。

重要
【アクター行動】の方では最後に以下の操作を忘れずにしてください
    実際に攻撃
条件分岐【アクターが選んだカード攻撃力】=【エネミーが選んだカード攻撃力】
※両者共に同じカード(攻撃力)だった場合の処理。
文章の表示
:\v[【変数A】]vs \v[【変数B】]
:引き分け!
とでもしておくといいでしょうか?
もしその場合アクターの攻撃が優先されるのであればここは省いてください。
以下それ以外の場合の欄に続きますが省く場合はそのまま


:それ以外のとき※省いた場合は普通に。
条件分岐【アクターが選んだカード攻撃力】>【エネミーが選んだカード攻撃力】
※同じだったとき、アクター優先、つまり同じだった場合の処理を省いたなら“>”ではなく“≧”としてください。というか省いてこうしてください。

文章の表示
:\v[【変数A】]vs \v[【変数B】]
:\N[n]の勝ち!

スクリプト

コード: 全て選択

this._params[0] = 1;
this._params[1] = 1;
this._params[2] = $gameParty.members()[1].lastSkill();
this._params[3] = -2;
this.command339();

これでアクターがエネミーに攻撃してくれるはず。このコードはMVカテゴリに投稿されていたものを参照したため、使えない、または$game.Partyなんちゃらの部分が間違っていることによりうまく機能しない可能性は大いにあります。
:それ以外のとき
文章の表示
:\v[【変数A】]vs \v[【変数B】]
:\N[n]の負け!
スクリプト

コード: 全て選択

this._params[0] = 0;
this._params[1] = 1;
this._params[2] = $gameVariables.value(x);
this._params[3] = -2;
this.command339();

xは【選んだカード[エネミー]】変数のIDナンバーです。これでエネミーがアクターに攻撃してくれるはず。
アクター同様、機能しない可能性は高い。

◇変数の操作
【選んだカード[エネミー]】=0
◇変数の操作
【選んだカード[アクター]】=0
◇変数の操作
【エネミーが選んだカード攻撃力】=0
◇変数の操作
【アクターが選んだカード攻撃力】=0


と最後に変数を全て0にしておく。これで完成。

しっかり代入したダメージを受けるはず。
最後に編集したユーザー wingly on 2022年12月15日(木) 00:24 [ 編集 5 回目 ]
どうも。winglyです。
現在受験勉強によりツクールを離れています。
wingly
記事: 206
登録日時: 2020年2月29日(土) 06:35

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by wingly » 2022年12月15日(木) 00:00

お疲れ様でした。
長々とすみませんm(_ _)m
クソほどわかりづらい箇所が、特にコモンイベントらへんはそうだと思うので気になるところがあれば……
実際にツクールで実行できてるわけではないのでところどころ動作が怪しいところがあります。
うまくいけば

・戦闘開始
・エネミー攻撃「ダメージ0」ここでエネミーカード選択というつもり。
・コモンイベント。エネミーが放ったスキルID格納、変数に攻撃力代入。
・アクター攻撃「ダメージ0」ここでアクターカード選択というつもり。
・コモンイベント。アクターが放ったスキルID格納、変数に攻撃力代入。
エネミーとアクターのカード(攻撃力)比較、勝った方が再度攻撃。
計算式に書いた変数に攻撃力が代入されているため、今度はダメージ入る。
変数全てリセット。
・2ターン目。(内部的には3ターン目?)

という感じになるはず。
欠点は1ターンで2回攻撃することになる=テンポが悪いということ。
「発動前コモン」というのを使用すれば解消できそうですが、その分、処理が複雑になります。(ツクマテでの文字only説明で伝わるかどうか......。パソコンあればちゃちゃっとサンプルゲーム作って配布ということができるんですが……)

ともかく、間違っていなければあなた様お望みの動作に近いものになるはず。
だいぶ前の投稿なのでもう諦めてるかもですが、ご参考になれば幸いです。長い時間失礼しました。
最後に編集したユーザー wingly on 2022年12月18日(日) 00:01 [ 編集 1 回目 ]
どうも。winglyです。
現在受験勉強によりツクールを離れています。
メイドインヘブン太
記事: 2
登録日時: 2022年11月12日(土) 22:40

Re: じゃんけんのような戦闘システムをつくりたい

投稿記事by メイドインヘブン太 » 2022年12月17日(土) 23:48

wingly様

丁寧なご回答ありがとうございます。
正直諦めかけていて回答に気付くのが遅れてしまいました。
申し訳ありません。

早速休みの日に試してみたいと思います。
解からないことがあればまた質問させていただくかもしれません。。。
ご容赦ください。

本当にありがとうございました :D

“MZ:質問” へ戻る