CTBとスキルCP制の競合
2011年9月25日 RGSS2またRGSS2ネタ。
今度は本格的に自分用メモ。
相変わらずちいさな本屋様の戦闘関連と、KGC様のスキル関連のスクリプトでシステムを色々構築してるんだけど、「CTB制」と「スキルCP制」を併用すると競合が起きる。具体的には戦闘画面でフリーズする。
理由は単純で、CTBでアクターの行動順を決めるのに、「CP」(カウントポイント?)という値を参照しているからなんだけど、スキルCP制を導入すると、スキル習得の制限を表す数値として、「cp」(コストポイント?)という値が使われる。
同じ名前の変数が二つ存在してるためにバグったと思われる。
修正も簡単。それぞれのシステムで定義している変数名が被らないように変更するだけ。普通の置換機能使えば一発でOK。でもCTBの方はCPゲージとか他のスクリプトでも参照したりするだろうからそのままにしておき、スキルCP制の方で何か別の変数名に変えるのが楽かな。
その場合、スキルのメモ欄でCP値設定するときの書式も、きちんと変更後の変数名に合わせないといけないのに注意。
今度は本格的に自分用メモ。
相変わらずちいさな本屋様の戦闘関連と、KGC様のスキル関連のスクリプトでシステムを色々構築してるんだけど、「CTB制」と「スキルCP制」を併用すると競合が起きる。具体的には戦闘画面でフリーズする。
理由は単純で、CTBでアクターの行動順を決めるのに、「CP」(カウントポイント?)という値を参照しているからなんだけど、スキルCP制を導入すると、スキル習得の制限を表す数値として、「cp」(コストポイント?)という値が使われる。
同じ名前の変数が二つ存在してるためにバグったと思われる。
修正も簡単。それぞれのシステムで定義している変数名が被らないように変更するだけ。普通の置換機能使えば一発でOK。でもCTBの方はCPゲージとか他のスクリプトでも参照したりするだろうからそのままにしておき、スキルCP制の方で何か別の変数名に変えるのが楽かな。
その場合、スキルのメモ欄でCP値設定するときの書式も、きちんと変更後の変数名に合わせないといけないのに注意。
RGSS2ネタ
RPGツクールVXをちょこちょこいじってます。今は色んなスクリプト集めてきて戦闘システムまわりを整備してるとこ。
http://xrxs.at-ninja.jp/
んで、上記「ちいさな本屋さん」で公開されてる属性活性エネルギーを導入したんだけど、FSMのフォーラムで報告されてたエラーを自分も確認。スキル発動時になんかよくわからんけど定義されてないよとか言われる。
その報告トピックにあったとおり、問題の箇所の記述を削除するとちゃんと動作したけど、これで問題が無いのかどうかは不明。でも単体で動作させても発生したエラーだから、たぶんバグだな。
そしてそのトピックでもうひとつ言われてたのが、活性が蓄積された状態で戦闘終了すると、活性が維持されて、次の戦闘に持ち込まれてしまうという問題。これは今回の修正箇所には関係なく、どうやら仕様らしい。
というわけで、戦闘終了時の活性初期化処理を自力で組み込んでみた。
Rubyの文法の何もかも分からず、メソッドって何それおいしいのな状態で作ったんでかなり怪しい。
ここの包括的なシステム構築にお世話になる人は多いと思うので、修正方法を公開してみます。というかこれくらい自力で余裕じゃってレベルかもしれないけど、自分のようなド素人の方のために。つか即導入できる素材の形にしてないですw
まず、「ユニット・マップ保持の属性活性エネルギー」の部分で
#活性初期化
def reset_energy
self.element_energies.clear
end
を追加。属性活性を消滅させる効果なんかにも応用できるかも。
次に、一番下に以下の記述を付け加えれば完成。
#===================================
# 戦闘終了時活性初期化
#===================================
class Scene_Battle < Scene_Base
#----------------
# ● 勝利の処理
#----------------
alias energy_reset_process_victory process_victory
def process_victory
make_victory_reset
energy_reset_process_victory
end
#----------------
# ● 戦闘勝利時
#----------------
def make_victory_reset
$game_party.reset_energy
end
#----------------
# ● 逃走の処理
#----------------
alias energy_reset_process_escape process_escape
def process_escape
make_escape_reset
energy_reset_process_escape
end
#----------------
# ● 戦闘逃走時
#----------------
def make_escape_reset
$game_party.reset_energy
end
#----------------
# ● 敗北の処理
#----------------
alias energy_reset_process_defeat process_defeat
def process_defeat
make_defeat_reset
energy_reset_process_defeat
end
#----------------
# ● 戦闘敗北時
#----------------
def make_defeat_reset
$game_party.reset_energy
end
end
戦闘終了自体を扱うクラスに直接定義できれば、結果に関わらず記述を一本化できるんだけどなあ。もうソース読み解いていくのが面倒だw
RPGツクールVXをちょこちょこいじってます。今は色んなスクリプト集めてきて戦闘システムまわりを整備してるとこ。
http://xrxs.at-ninja.jp/
んで、上記「ちいさな本屋さん」で公開されてる属性活性エネルギーを導入したんだけど、FSMのフォーラムで報告されてたエラーを自分も確認。スキル発動時になんかよくわからんけど定義されてないよとか言われる。
その報告トピックにあったとおり、問題の箇所の記述を削除するとちゃんと動作したけど、これで問題が無いのかどうかは不明。でも単体で動作させても発生したエラーだから、たぶんバグだな。
そしてそのトピックでもうひとつ言われてたのが、活性が蓄積された状態で戦闘終了すると、活性が維持されて、次の戦闘に持ち込まれてしまうという問題。これは今回の修正箇所には関係なく、どうやら仕様らしい。
というわけで、戦闘終了時の活性初期化処理を自力で組み込んでみた。
Rubyの文法の何もかも分からず、メソッドって何それおいしいのな状態で作ったんでかなり怪しい。
ここの包括的なシステム構築にお世話になる人は多いと思うので、修正方法を公開してみます。というかこれくらい自力で余裕じゃってレベルかもしれないけど、自分のようなド素人の方のために。つか即導入できる素材の形にしてないですw
まず、「ユニット・マップ保持の属性活性エネルギー」の部分で
#活性初期化
def reset_energy
self.element_energies.clear
end
を追加。属性活性を消滅させる効果なんかにも応用できるかも。
次に、一番下に以下の記述を付け加えれば完成。
#===================================
# 戦闘終了時活性初期化
#===================================
class Scene_Battle < Scene_Base
#----------------
# ● 勝利の処理
#----------------
alias energy_reset_process_victory process_victory
def process_victory
make_victory_reset
energy_reset_process_victory
end
#----------------
# ● 戦闘勝利時
#----------------
def make_victory_reset
$game_party.reset_energy
end
#----------------
# ● 逃走の処理
#----------------
alias energy_reset_process_escape process_escape
def process_escape
make_escape_reset
energy_reset_process_escape
end
#----------------
# ● 戦闘逃走時
#----------------
def make_escape_reset
$game_party.reset_energy
end
#----------------
# ● 敗北の処理
#----------------
alias energy_reset_process_defeat process_defeat
def process_defeat
make_defeat_reset
energy_reset_process_defeat
end
#----------------
# ● 戦闘敗北時
#----------------
def make_defeat_reset
$game_party.reset_energy
end
end
戦闘終了自体を扱うクラスに直接定義できれば、結果に関わらず記述を一本化できるんだけどなあ。もうソース読み解いていくのが面倒だw