まるちゃん 2019/10/17 17:50

ツクールの戦闘不能について

召喚魔法を作りネクロマンサーという職業でアンデットを召喚しようと思いました
しかし、召喚魔法はとても難しかったので断念しました
召喚魔法とはパーティーの中に新たなアクターを加入させるということです
難しかった理由は2つあります

1つめの理由は戦闘メンバーの人数を変えずに作ることが難しかった
僕はスクリプトを作るとき今製作中のゲームだけではなくて
将来作るゲームのためにも汎用性をもたせて作っています
なので戦闘メンバーの数を変えずに作るというルールは曲げたくありませんでした
もし、戦闘中にメンバーを入れ替えるという要素があったとき
召喚魔法を使い戦闘メンバー数を増やして次のターンに移ったとき
召喚したメンバーを控えに入れて新たなメンバーを入れます
このターンも召喚魔法を使い同じことをすれば
全メンバーを戦闘にだすことが可能になります
アクターに召喚されたという記号をつけて人数の数え方を変えるやり方もあります
それでも良かったのかなぁ…

2つ目の理由は召喚する数は1体とは限らないということです
もし召喚魔法を使えるメンバーが2人いて同じ呪文を使ったとき
片方の魔法は成功して、もう片方は失敗するというのは嫌です
同じアクターはパーティーに加入できません
ラルフをパーティーに加入してもう1回ラルフを加入はできません
このラルフはアクター ID が同じなので区別ができないからです
また戦闘中に2回目の召喚魔法が使えないという事態も考えられます
index によって戦闘中は変化させるからいいのかなぁと思いもしましたが
やっぱり不安要素だったのでやめました
スクリプトとしてアクターを複製させたのですがうまくいきませんでした

大きな理由はこの2つです
他の人のスクリプトで召喚魔法ができるかと思ったのですが
やっぱり皆さん苦労しているのか自分は探し出すことができませんでした
なので以下のスキルを作成してネクロマンサーらしくしました
敵全体の戦闘不能なメンバーを復活させ混乱状態にする
スキルの使用条件.txt スキル追加評価.txt のスクリプトを使用します

使用条件:<Condition !$game_troop.dead_members.empty?>
追加評価:<Eval @result.success = true>(やっぱり Eval にした)
使用効果でコモンイベントの呼び出しを行います
最初は追加評価に関数を作ってたのですが対象が戦闘不能な敵全体という
少し特殊な感じだったのでうまくできませんでした

コモンイベントの内容がスクリプトで以下の通り
`
$game_troop.dead_members.each do |enemy|

next if enemy.state?(61)
enemy.hp = 1
enemy.add_state(61)
enemy.hp -= 1

end
`

61 はアンデットとして扱うためのステートです内容は以下の通り
・行動成約が味方を攻撃する
・戦闘不能が無効
・狙われ率が0%
・回復効果率が0%
・物理ダメージ、魔法ダメージがともに0%

enemy.hp -=1 は enemy.die では思った通りの動作が得られませんでした
die をすると clear_states で付加したステートを解除してしまいした
(@states = [] なので無条件で解除)
こうすることでHPは0なのに戦闘不能ではないとなります

これをすると面倒なのが全滅条件が変更してしまうことです
全滅条件は alive_members.empty? となっていて
アンデット(戦闘不能が無効となっているバトラー)は生者として数えられます
残りがアンデットなのに戦闘が終わらないということがあったので
それは面倒なので少し全滅条件を変更しました

全滅条件変更.txt (1.87kB)

ダウンロード

ちょっと挙動がまだ怪しいのでアップローダーではなく一時的に

このとき戦闘不能と戦闘不能が無効(アンデット)との違いについて考えました
アンデットは生きているのか?
alive? の関数があってこれはバトラーが生きているのか判定をします
もちろん false なんですけど true じゃないと行動してくれません
なので生きている判定です
dead? の関数もあります。バトラーが死んでいるかを判定します
死んでるのですけど戦闘不能が無効なので true 判定にします
(今 dead? 関数を変更したところこれで問題なかった。
だけど敵HP表示がされなくておかしなことになっている)
ツクールだとアンデットとは生きていて、かつ死んでいる謎の生物です

ツクールではボスにはステート有効度:[戦闘不能] * 0%をつけると思います
あれ?これはステート無効化:[戦闘不能]と、どう違うのだろうと思いました
スキルとして戦闘不能を付加するときに有効度を0%にする
でも戦闘不能が無効だとHPが0になっても行動してしまう
似ているようでなんか違くて面白なぁと思いました

すげーしょうもないことを今まで考えていたなぁと記事を書いていて思いました
とりあえず、これでスキルは完成(まだ少し残ってるけど)といっていい!
コストを考えていなかった
でもこのスキルを複雑なスクリプトを使うことなくシンプルに作れたので
すげーなぁと思って記事を書きました
でも、しょーもなかったなぁ…

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索