久し振りに、RPGツクールVXをやっていた。そこで、盗賊という職業に何か特性を持たせたいと思い、洞窟の罠を解除できるという仕様を考えた。罠自体から呼び出すため、コモンイベントに作成した。しかし、イベントコマンドだけで組むと分岐が膨大になりそうなので、スクリプトに記述する方法をとった。
まずはイベントコマンドで、「罠解除確率」の変数に0を代入する。そして、パーティ人数を適当な変数に取得して条件分岐させる。分岐中にスクリプトで、「パーティ内に生存している盗賊がいる場合のみ、50+(盗賊の運のよさ/4)の値を変数:罠解除確率へ代入」という旨を記述した。だが、スクリプトのことは相変わらずチンプンカンプンなため、「盗賊が複数人いる場合」の処理が記述できなかった。そのため、盗賊が何人もいる場合は、最後尾にいる盗賊の運の良さが適用される。市販のゲームでも、これくらいのバグは残っていたりする。それゆえ、今回は仕様ということで妥協した。
$game_variables[22] = $game_party.existing_members.size #変数22番に、生存メンバー数を代入したよ。
条件分岐:変数 [0022:☆計算用変数] == 2 #変数22番が2の時だよ。
if $game_party.existing_members[0].class_id == 10 #先頭の"生存している"キャラの職業IDが10番(盗賊)だった場合だよ。
$game_variables[14] = 50 + ($game_party.members[0].luck / 4) #変数14番にそのキャラの運の良さ割る4に50を足したかずを代入したよ。
end
if $game_party.existing_members[1].class_id == 10 #さっきと一緒、生存している2番目のキャラだよ。
$game_variables[14] = 50 + ($game_party.members[1].luck / 4)
end
今回思ったのは、キャラクターや職業のIDは1番から始まるのに対して、パーティメンバーの参照は0から始まるので、ここは注意せねばならないということ。また、上の式に入っているluck、先程からちょくちょく言っている運の良さというのは、自分で勝手に作ったステータスだから、デフォルトだと存在しない。リアリティを求める人は器用さ(DEX)を作って、装備によって確率を変動させるとか良いと思う。鉄製の小手などを装備していると罠解除しにくいとか・・・。またはトラップ解除を始めるとタイマーが作動し、時間内に解除できないと失敗とか・・・。
ちなみに上のスクリプトは、イベントコマンドのスクリプトに書いているため、これで動作するというだけの話。せっかくなのでメンバー参照の記述を紹介しておく。
$game_party.members
#パーティメンバーを参照する。[0]と付ければ先頭、[3]なら4番目。更に.class_idとかでそのキャラの職業なども参照できるし変更も出来る。
$game_party.existing_members
#生存しているパーティメンバーを参照する。上記と違うのは戦闘不能のメンバーがカウントされないということ。例:4人パーティで1人が戦闘不能の場合、[2]がMAX。
$game_party.dead_members
#戦闘不能状態のパーティメンバーを参照する。
追記
やはり、パーティ内で最もluckが高い、生存している盗賊を参照するよう変更を施した。
まず、最初に変数15..18(パーティ4人分)に0を代入した。そして、生存メンバーに盗賊がいる時の処理を、次のように変更した。
$game_variables[15] = $game_party.existing_members[0].luck
#変数15番に生存メンバー1人目のluckを代入したよ。
これを人数分だけ作成。2人目なら変数16番に代入、3人目なら17番...
そして、最後の最後に最高値の算出処理を加える。
a = $game_variables[15..18] #変数aに変数15から18の値を配列で格納したよ。
a = a.sort{|a,b| a <=> b} #それを小さい順に並び替えたよ。
if a[-1] != 0 #一番大きい数字が0ではない時の処理だよ。
$game_variables[14] = 50 + (a[-1] / 4) #変数14番に、最高値/4+50を代入したよ。
end
こうすることで、最初に変数15..18に0が代入してあるから、盗賊がいない若しくは死んでいる場合、罠解除率(変数14)は0のまま。複数人の盗賊が共に生存中の場合、最も高いluckを持つ盗賊だけが判定対象となった。
ところで題名の由来は、何故か確率分岐の方法が分からなくなったため。先に書いた罠解除確率を、100分の解除率%で成功または失敗と分岐させようとした。ツクール2000で散々利用していた、至極当たり前のイベント命令だったのだが、何故か分からなくなって焦ってしまった。これは極度の眼精疲労によるものだと推察する。目と脳は、内部で繋がっているため、目が疲れることによって、脳の働きも低下するのだろう。それが最近は著しいという話だ。PCのディスプレイの明度や色彩、ガンマ値を調整し、部屋の電気を一段階暗くすることにより、負担はかなり軽減された気がする。考えてみれば、何ヶ月も電気を煌々と灯して生活していたのが、災いしたのかもしれない。就寝の際も電気を弄らないため、最も明るい状態になっていることを、去年から気付かなかった。どおりで、仰向けで寝ると眩しかったわけだ。みんなも、照明には気を付けよう。でないと、視力が1.0以下になってしまうぞ。
まずはイベントコマンドで、「罠解除確率」の変数に0を代入する。そして、パーティ人数を適当な変数に取得して条件分岐させる。分岐中にスクリプトで、「パーティ内に生存している盗賊がいる場合のみ、50+(盗賊の運のよさ/4)の値を変数:罠解除確率へ代入」という旨を記述した。だが、スクリプトのことは相変わらずチンプンカンプンなため、「盗賊が複数人いる場合」の処理が記述できなかった。そのため、盗賊が何人もいる場合は、最後尾にいる盗賊の運の良さが適用される。市販のゲームでも、これくらいのバグは残っていたりする。それゆえ、今回は仕様ということで妥協した。
$game_variables[22] = $game_party.existing_members.size #変数22番に、生存メンバー数を代入したよ。
条件分岐:変数 [0022:☆計算用変数] == 2 #変数22番が2の時だよ。
if $game_party.existing_members[0].class_id == 10 #先頭の"生存している"キャラの職業IDが10番(盗賊)だった場合だよ。
$game_variables[14] = 50 + ($game_party.members[0].luck / 4) #変数14番にそのキャラの運の良さ割る4に50を足したかずを代入したよ。
end
if $game_party.existing_members[1].class_id == 10 #さっきと一緒、生存している2番目のキャラだよ。
$game_variables[14] = 50 + ($game_party.members[1].luck / 4)
end
今回思ったのは、キャラクターや職業のIDは1番から始まるのに対して、パーティメンバーの参照は0から始まるので、ここは注意せねばならないということ。また、上の式に入っているluck、先程からちょくちょく言っている運の良さというのは、自分で勝手に作ったステータスだから、デフォルトだと存在しない。リアリティを求める人は器用さ(DEX)を作って、装備によって確率を変動させるとか良いと思う。鉄製の小手などを装備していると罠解除しにくいとか・・・。またはトラップ解除を始めるとタイマーが作動し、時間内に解除できないと失敗とか・・・。
ちなみに上のスクリプトは、イベントコマンドのスクリプトに書いているため、これで動作するというだけの話。せっかくなのでメンバー参照の記述を紹介しておく。
$game_party.members
#パーティメンバーを参照する。[0]と付ければ先頭、[3]なら4番目。更に.class_idとかでそのキャラの職業なども参照できるし変更も出来る。
$game_party.existing_members
#生存しているパーティメンバーを参照する。上記と違うのは戦闘不能のメンバーがカウントされないということ。例:4人パーティで1人が戦闘不能の場合、[2]がMAX。
$game_party.dead_members
#戦闘不能状態のパーティメンバーを参照する。
追記
やはり、パーティ内で最もluckが高い、生存している盗賊を参照するよう変更を施した。
まず、最初に変数15..18(パーティ4人分)に0を代入した。そして、生存メンバーに盗賊がいる時の処理を、次のように変更した。
$game_variables[15] = $game_party.existing_members[0].luck
#変数15番に生存メンバー1人目のluckを代入したよ。
これを人数分だけ作成。2人目なら変数16番に代入、3人目なら17番...
そして、最後の最後に最高値の算出処理を加える。
a = $game_variables[15..18] #変数aに変数15から18の値を配列で格納したよ。
a = a.sort{|a,b| a <=> b} #それを小さい順に並び替えたよ。
if a[-1] != 0 #一番大きい数字が0ではない時の処理だよ。
$game_variables[14] = 50 + (a[-1] / 4) #変数14番に、最高値/4+50を代入したよ。
end
こうすることで、最初に変数15..18に0が代入してあるから、盗賊がいない若しくは死んでいる場合、罠解除率(変数14)は0のまま。複数人の盗賊が共に生存中の場合、最も高いluckを持つ盗賊だけが判定対象となった。
ところで題名の由来は、何故か確率分岐の方法が分からなくなったため。先に書いた罠解除確率を、100分の解除率%で成功または失敗と分岐させようとした。ツクール2000で散々利用していた、至極当たり前のイベント命令だったのだが、何故か分からなくなって焦ってしまった。これは極度の眼精疲労によるものだと推察する。目と脳は、内部で繋がっているため、目が疲れることによって、脳の働きも低下するのだろう。それが最近は著しいという話だ。PCのディスプレイの明度や色彩、ガンマ値を調整し、部屋の電気を一段階暗くすることにより、負担はかなり軽減された気がする。考えてみれば、何ヶ月も電気を煌々と灯して生活していたのが、災いしたのかもしれない。就寝の際も電気を弄らないため、最も明るい状態になっていることを、去年から気付かなかった。どおりで、仰向けで寝ると眩しかったわけだ。みんなも、照明には気を付けよう。でないと、視力が1.0以下になってしまうぞ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます