スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)

防御行動いろいろ

 2011-10-18
MPの回復、コモンイベントの実行、ダメージ減少値の変更、ダメージの一部をMPに
とか防御行動のいろいろ。

MPの回復
防御時にMPを回復させます。
class Scene_Battle
def execute_action_guard
text = sprintf(Vocab::DoGuard, @active_battler.name)
@message_window.add_instant_text(text)
wait(20)
# MP回復
value = rand(8) + 4
@active_battler.mp += value
@message_window.add_instant_text("MPを #{value} 回復した!")
wait(45)

end
end


コモンイベントの実行
防御時にコモンイベントを実行します。
class Scene_Battle
def execute_action_guard
text = sprintf(Vocab::DoGuard, @active_battler.name)
@message_window.add_instant_text(text)
wait(20)
# コモンイベントの実行
$game_temp.common_event_id = 1
end
end

SS111016665233.png


ダメージ減少値の変更
防御時にはダメージが半分になりますが、そこの減少値を変更します。
防御判定の行では、ダメージが1以上で防御行動を行っているかを判定しています。
さらに次の行で、強力防御のオプションがONになっているかを調べて減少する割合を決めています。
class Game_Battler
def apply_guard(damage)
if damage > 0 and guarding? # 防御判定
damage /= super_guard ? 10 : 1.5 # ダメージ減少
end
return Integer(damage)
end
end


MP転向
通常攻撃を受けるとそのダメージの10%MPを回復するオプションを追加します。
まず、オプションの追加から
class Game_Battler
#--------------------------------------------------------------------------
# ● オプション [吸収防御] の取得
#--------------------------------------------------------------------------
def absorb_guard
return false
end
end

class Game_Actor
EXT_OPTIONS ||= {}
EXT_OPTIONS[:absorb_guard] = [3, 4, 6]
#--------------------------------------------------------------------------
# ● オプション [吸収防御] の取得
#--------------------------------------------------------------------------
def absorb_guard
return EXT_OPTIONS[:absorb_guard].include?(@actor_id)
end
end
オプションはアクターのみのものなので、
まず、Game_Battler#absorb_guard を作成して、必ず flase を返すようにします。
続いて、アクターに同じ名前のメソッドを追加して、オプションの有無を返すようにします。
アクターには、メモ欄が無いので EXT_OPTIONS 定数で管理するようにしました。
3,4,6 は、オプションをONにするアクターのIDです。

ダメージ計算のところに追加処理をすればいいのですが、
HPダメージの値がマイナス値ではないか確認を忘れないようにしてください。
HP回復処理のときMPダメージになってしまいますので。
class Game_Battler
alias _cao_absorb_guard_make_attack_damage_value make_attack_damage_value
def make_attack_damage_value(attacker)
_cao_absorb_guard_make_attack_damage_value(attacker)
if self.guarding? && self.absorb_guard && @hp_damage > 0
@mp_damage -= @hp_damage / 10
end
end
end


戦闘開始時にMP0
ここまでMP回復の処理をいくつか載せましたが、
デフォルトでは回復処理がわかりにくいと思います。
そこで、戦闘開始時にMPを0にします。
class Scene_Battle
alias _cao_mp0_start start
def start
_cao_mp0_start
$game_party.members.each {|actor| actor.mp = 0 }
end
end


コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/588-e1b14d62
≪ トップページへこのページの先頭へ  ≫
カレンダー
08 << 2017/09 >> 10
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリー
最近の記事
最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。