#============================================================================== # [ZTBS] -Zenith Tactical Battle System- タクティカルバトルシステム #  〜+B18:ZTBS 移動判定修正〜   by 水夜 #  ver0.90  Zenith Creation (http://zenith.ifdef.jp/) #============================================================================== #============================================================================== # □ カスタマイズポイント #============================================================================== module ZTBSB18 FRONT_TEXT = "前" LEFT_TEXT = "左" RIGHT_TEXT = "右" BACK_TEXT = "後" NODIRECT_TEXT = "向き無視" # これ変えちゃ駄目よ。 DIRECTION_HASH = [FRONT_TEXT, LEFT_TEXT, RIGHT_TEXT, BACK_TEXT, "\000"] end class Game_Actor #-------------------------------------------------------------------------- # ● 基本物理防御の取得 #-------------------------------------------------------------------------- def base_pdef(direction) weapon = $data_weapons[@weapon_id] armor1 = $data_armors[@armor1_id] armor2 = $data_armors[@armor2_id] armor3 = $data_armors[@armor3_id] armor4 = $data_armors[@armor4_id] if weapon != nil check = XRXS.element_check(weapon.element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] pdef1 = weapon.pdef * check[2] / 100 else pdef1 = weapon.pdef end else pdef1 = 0 end if armor1 != nil check = XRXS.element_check(armor1.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] pdef2 = armor1.pdef * check[2] / 100 else pdef2 = armor1.pdef end else pdef2 = 0 end if armor2 != nil check = XRXS.element_check(armor2.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] pdef3 = armor2.pdef * check[2] / 100 else pdef3 = armor2.pdef end else pdef3 = 0 end if armor3 != nil check = XRXS.element_check(armor3.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] pdef4 = armor3.pdef * check[2] / 100 else pdef4 = armor3.pdef end else pdef4 = 0 end if armor4 != nil check = XRXS.element_check(armor4.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] pdef5 = armor4.pdef * check[2] / 100 else pdef5 = armor4.pdef end else pdef5 = 0 end return pdef1 + pdef2 + pdef3 + pdef4 + pdef5 end #-------------------------------------------------------------------------- # ● 基本魔法防御の取得 #-------------------------------------------------------------------------- def base_mdef(direction) weapon = $data_weapons[@weapon_id] armor1 = $data_armors[@armor1_id] armor2 = $data_armors[@armor2_id] armor3 = $data_armors[@armor3_id] armor4 = $data_armors[@armor4_id] if weapon != nil check = XRXS.element_check(weapon.element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] mdef1 = weapon.mdef * check[2] / 100 else mdef1 = weapon.mdef end else mdef1 = 0 end if armor1 != nil check = XRXS.element_check(armor1.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] mdef2 = armor1.mdef * check[2] / 100 else mdef2 = armor1.mdef end else mdef2 = 0 end if armor2 != nil check = XRXS.element_check(armor2.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] mdef3 = armor2.mdef * check[2] / 100 else mdef3 = armor2.mdef end else mdef3 = 0 end if armor3 != nil check = XRXS.element_check(armor3.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] mdef4 = armor3.mdef * check[2] / 100 else mdef4 = armor3.mdef end else mdef4 = 0 end if armor4 != nil check = XRXS.element_check(armor4.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] mdef5 = armor4.mdef * check[2] / 100 else mdef5 = armor4.mdef end else mdef5 = 0 end return mdef1 + mdef2 + mdef3 + mdef4 + mdef5 end #-------------------------------------------------------------------------- # ● 基本回避修正の取得 #-------------------------------------------------------------------------- def base_eva(direction) armor1 = $data_armors[@armor1_id] armor2 = $data_armors[@armor2_id] armor3 = $data_armors[@armor3_id] armor4 = $data_armors[@armor4_id] if armor1 != nil check = XRXS.element_check(armor1.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}回避") if check[0] eva1 = armor1.eva + check[1] else eva1 = armor1.eva end else eva1 = 0 end if armor2 != nil check = XRXS.element_check(armor2.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}回避") if check[0] eva2 = armor2.eva + check[1] else eva2 = armor2.eva end else eva2 = 0 end if armor3 != nil check = XRXS.element_check(armor3.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}回避") if check[0] eva3 = armor3.eva + check[1] else eva3 = armor3.eva end else eva3 = 0 end if armor4 != nil check = XRXS.element_check(armor4.guard_element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}回避") if check[0] eva4 = armor4.eva + check[1] else eva4 = armor4.eva end else eva4 = 0 end return eva1 + eva2 + eva3 + eva4 end end class Game_Enemy #-------------------------------------------------------------------------- # ● 基本物理防御の取得 #-------------------------------------------------------------------------- def base_pdef(direction) check = XRXS.element_check(self.element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.pdef}") if check[0] return ($data_enemies[@enemy_id].pdef * check[2] / 100) else return $data_enemies[@enemy_id].pdef end end #-------------------------------------------------------------------------- # ● 基本魔法防御の取得 #-------------------------------------------------------------------------- def base_mdef(direction) check = XRXS.element_check(self.element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}#{$data_system.words.mdef}") if check[0] return ($data_enemies[@enemy_id].mdef * check[2] / 100) else return $data_enemies[@enemy_id].mdef end end #-------------------------------------------------------------------------- # ● 基本回避修正の取得 #-------------------------------------------------------------------------- def base_eva(direction) check = XRXS.element_check(self.element_set, "#{ZTBSB18::DIRECTION_HASH[direction]}回避") if check[0] return ($data_enemies[@enemy_id].eva + check[1]) else return $data_enemies[@enemy_id].eva end end end class Game_Battler #-------------------------------------------------------------------------- # ● 物理防御の取得 #-------------------------------------------------------------------------- def pdef(direction = 4) n = base_pdef(direction) for i in @states n *= $data_states[i].pdef_rate / 100.0 end return Integer(n) end #-------------------------------------------------------------------------- # ● 魔法防御の取得 #-------------------------------------------------------------------------- def mdef(direction = 4) n = base_mdef(direction) for i in @states n *= $data_states[i].mdef_rate / 100.0 end return Integer(n) end #-------------------------------------------------------------------------- # ● 回避修正の取得 #-------------------------------------------------------------------------- def eva(direction = 4) n = base_eva(direction) for i in @states n += $data_states[i].eva end return n end #-------------------------------------------------------------------------- # ● 通常攻撃の効果適用 # attacker : 攻撃者 (バトラー) #-------------------------------------------------------------------------- def xrxs19_attack_effect(attacker) if XRXS.element_include?(ZTBSB18::NODIRECT_TEXT, attacker.multy_element_set) direction = 4 else direction = direction_check end # クリティカルフラグをクリア self.critical = false # 命中計算絡 hit = (attacker.hp * 20 / attacker.maxhp) + 80 # 基本ダメージを計算 if XRXS.element_include?(attacker.element_set, XRXS19::ATTACK) == XRXS.element_include?(attacker.element_set, XRXS19::MAGIC) self.damage = (attacker.str ** 2 * attacker.int ** 1.5 * attacker.atk ** 1.5) ** 0.3 elsif XRXS.element_include?(attacker.element_set, XRXS19::ATTACK) self.damage = (attacker.str ** 3.5 * attacker.atk ** 1.5) ** 0.3 else self.damage = (attacker.int ** 3.5 * attacker.atk ** 1.5) ** 0.3 end # 属性修正 if self.class.method_defined?("multy_element_set") self.damage *= elements_correct(attacker.multy_element_set) else self.damage *= elements_correct(attacker.equip_element_set) end self.damage /= 100 # クリティカル修正 if rand(100) < attacker.dex self.critical = true self.damage *= 2 end # ダメージの符号が正の場合 if self.damage > 0 d = self.damage # 防御力修正 if XRXS.element_include?(attacker.element_set, XRXS19::ATTACK) == XRXS.element_include?(attacker.element_set, XRXS19::MAGIC) self.damage = self.damage * 555 / ((self.mdef(direction) * self.pdef(direction)) ** 0.75 + 554) elsif XRXS.element_include?(attacker.element_set, XRXS19::ATTACK) self.damage = self.damage * 555 / (self.pdef(direction) ** 1.5 + 554) else self.damage = self.damage * 555 / (self.mdef(direction) ** 1.5 + 554) end # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if self.damage != 0 and attacker.current_action.add_variance == 0 seed = rand(XRXS19::ATTACK_VARY * 2 + 1) - XRXS19::ATTACK_VARY self.damage += (self.damage * seed / XRXS19::VARY_BASE) end # 命中判定 hit = hit * attacker.hit * (100 - self.eva(direction)) * (100 + attacker.current_action.hit_plus) / 1000000 hit = self.cant_evade? ? 100 : hit hit_result = (rand(100) < hit) # 命中の場合 if hit_result # 小数点以下丸め self.damage = self.damage.round # ステート衝撃解除 if self.damage >= 0 and not attacker.current_action.not_shock remove_states_shock end # HP からダメージを減算 self.hp -= self.damage # ステート変化 @state_changed = false if self.class.method_defined?("state_rate") states_plus(attacker) states_minus(attacker) else states_plus(attacker.plus_state_set) states_minus(attacker.minus_state_set) end # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Miss" # クリティカルフラグをクリア self.critical = false end # メソッド終了 return true end #-------------------------------------------------------------------------- # ● スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- def xrxs19_skill_effect(user, skill) if XRXS.element_include?(ZTBSB18::NODIRECT_TEXT, user.skill_element_set(skill)) direction = 4 else direction = direction_check end # クリティカルフラグをクリア self.critical = false # スキルの効果範囲が HP 1 以上の味方で、自分の HP が 0 の場合 if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) # メソッド終了 return false end # 有効フラグをクリア effective = false # コモンイベント ID が有効の場合は有効フラグをセット effective |= skill.common_event_id > 0 # 第一命中判定 hit_ = (user.hp * 10 / user.maxhp) + 90 # 不確実なスキルの場合は有効フラグをセット effective |= hit < 100 # 基本ダメージを計算 if XRXS.element_include?(skill.element_set, XRXS19::ATTACK) == XRXS.element_include?(skill.element_set, XRXS19::MAGIC) self.damage = (user.str ** 1.5 * user.int ** 1.5 * skill.power.abs ** 2 * user.atk) ** 0.25 elsif XRXS.element_include?(skill.element_set, XRXS19::ATTACK) self.damage = ((user.str ** 3.5 * user.atk ** 1.5) ** 0.3) * skill.power.abs / 16 else self.damage = (user.int ** 3 * skill.power.abs ** 2 * user.atk) ** 0.25 end if skill.power < 0 self.damage *= -1 end # 属性修正 self.damage *= elements_correct(user.skill_element_set(skill)) self.damage /= 100 # クリティカル修正 if rand(100) < skill.dex_f self.damage *= 2 self.critical = true end # ダメージの符号が正の場合 if self.damage > 0 d = self.damage # 防御力修正 if XRXS.element_include?(skill.element_set, XRXS19::ATTACK) == XRXS.element_include?(skill.element_set, XRXS19::MAGIC) self.damage = self.damage * 555 / ((self.mdef(direction) * self.pdef(direction)) ** 0.75 + 554) elsif XRXS.element_include?(skill.element_set, XRXS19::ATTACK) self.damage = self.damage * 555 / (self.pdef(direction) ** 1.5 + 554) else self.damage = self.damage * 555 / (self.mdef(direction) ** 1.5 + 554) end # 防御修正 if self.guarding? self.damage /= 2 end end # 分散 if skill.variance > 0 and self.damage != 0 seed = rand(skill.variance * 2 + 1) - skill.variance self.damage += (self.damage * seed / XRXS19::VARY_BASE) end # 命中判定 eva = 100 - self.eva(direction) hit1 = hit * skill.hit * eva * (100 + user.current_action.hit_plus) / 1000000 hit2 = self.cant_evade? ? 100 : hit1 hit_result = (rand(100) < hit2) # 不確実なスキルの場合は有効フラグをセット effective |= hit < 100 # 命中の場合 if hit_result # 小数点以下丸め self.damage = self.damage.round # ダメージ 0 以上の攻撃の場合 if self.damage > 0 and not user.current_action.not_shock # ステート衝撃解除 remove_states_shock # 有効フラグをセット effective = true end # HP からダメージを減算 last_hp = self.hp self.hp -= self.damage effective |= self.hp != last_hp # ステート変化 @state_changed = false if self.class.method_defined?("state_rate") effective |= states_plus(user, skill) effective |= states_minus(user, skill) else effective |= states_plus(skill.plus_state_set) effective |= states_minus(skill.minus_state_set) end # 威力が 0 の場合 if skill.power == 0 # ダメージに空文字列を設定 self.damage = "" # ステートに変化がない場合 unless @state_changed # ダメージに "Guard" を設定 self.damage = "Guard" end end # ミスの場合 else # ダメージに "Miss" を設定 self.damage = "Miss" end # 戦闘中でない場合 unless $game_temp.in_battle # ダメージに nil を設定 self.damage = nil end # メソッド終了 return effective end #-------------------------------------------------------------------------- # ● 相対的な向きの取得 #-------------------------------------------------------------------------- def direction_check # 0 正面 1 左 2 右 3 背後 user_direction = $scene.active_battler.direction self_direction = $game_map.events[$scene.targets.index(self)].direction case self_direction when 2 case user_direction when 2 return 3 when 4 return 2 when 6 return 1 when 8 return 0 end when 4 case user_direction when 2 return 2 when 4 return 3 when 6 return 0 when 8 return 1 end when 6 case user_direction when 2 return 1 when 4 return 0 when 6 return 3 when 8 return 2 end when 8 case user_direction when 2 return 0 when 4 return 1 when 6 return 2 when 8 return 3 end end end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map attr_reader :targets #-------------------------------------------------------------------------- # ● フレーム更新 (アクターフェーズ) #-------------------------------------------------------------------------- def update_phase1 # ウィンドウ位置調整 move_window # 戦闘不能復活判定 battler_revival # 勝敗判定 if judge return end # エフェクト中の場合 if effect? return end # カーソル移動中の場合 if Spriteset_Map.method_defined?("cursor_sprite") and @spriteset.cursor_sprite.moving? return end # イベント実行中の場合 if $game_system.map_interpreter.running? return end # セレクト中の場合 if @select != nil and @select != 10 update_select return end # リザルトウィンドウ表示中の場合 if defined? result_window and result_window return end # ステップに応じて更新 case $game_system.tactics_step when 0 update_phase1_step0 when 1 update_phase1_step1 when 2 update_phase1_step2 when 3 update_phase1_step3 when 4 update_phase1_step4 when 5 update_phase1_step5 when 6 update_phase1_step6 when 6.5 update_phase1_step6_another when 7 update_step7 when 8 update_step8 when 9 update_step9 when 10 update_phase1_step10 when 11 update_step10 when 12 update_phase1_step11 when 13 update_phase1_step12 when 14 update_phase1_step13 end if $game_system.tactics_step != 1 return end # 全員行動済み判定 case all_acted? when 1 start_phase2 return when 2 # 未行動アクター処理 not_acted_actor_refresh return end end #-------------------------------------------------------------------------- # ● フレーム更新 (エネミーフェーズ) #-------------------------------------------------------------------------- def update_phase2 # ウィンドウ位置調整 move_window # 戦闘不能復活判定 battler_revival # 勝敗判定 if judge return end # エフェクト中の場合 if effect? return end # カーソル移動中の場合 if Spriteset_Map.method_defined?("cursor_sprite") and @spriteset.cursor_sprite.moving? return end # イベント実行中の場合 if $game_system.map_interpreter.running? return end # リザルトウィンドウ表示中の場合 if defined? result_window and result_window return end # ステップに応じて更新 case $game_system.tactics_step when 0 update_phase2_step0 when 1 update_phase2_step1 when 2 update_phase2_step2 when 3 update_phase2_step3 when 4 update_phase2_step4 when 5 update_phase2_step5 when 6 update_phase2_step6 when 6.5 update_phase2_step6_another when 7 update_step7 when 8 update_step8 when 9 update_step9 when 10 update_phase2_step10 when 11 update_step10 when 12 update_phase2_step11 when 13 update_phase2_step12 end if $game_system.tactics_step != 1 return end # 全員行動済み判定 case all_acted? when 1 start_phase1 return when 2 # 未行動エネミー処理 not_acted_enemy_refresh return end end #-------------------------------------------------------------------------- # ● フレーム更新 (ステップ 9.5 アクター : 向き変更) #-------------------------------------------------------------------------- def update_phase1_step10 if @command_window.nil? if @targets != nil for i in @targets.keys # エネミーが戦闘不能になった場合 if @targets[i].is_a?(Game_Enemy) and @targets[i].dead? # 経験値など獲得 get_exp_etc(@targets[i]) end end end # 消去対象をチェック set_erase_battler # カーソル位置を戻す back_cursor refresh_battler_info end if @attacker.more_step.nil? or (@attacker.more_step? and @attacker.more_step > 1) $game_system.tactics_step += 1 else if @command_window.nil? # 待機のみのウィンドウを作成 make_end_window end # 向きの調整 if @active_battler.direction != Input.dir4 and Input.dir4 != 0 # カーソル効果音を無駄につける(笑 $game_system.se_play($data_system.cursor_se) @active_battler.turn(Input.dir4) end # C ボタンが押された場合 if Input.trigger?(Input::C) # コマンドウィンドウ解放 dispose_command_window # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) $game_system.tactics_step += 1 end end end #-------------------------------------------------------------------------- # ● フレーム更新 (ステップ 9.5 エネミー : 向き変更) #-------------------------------------------------------------------------- def update_phase2_step10 # 消去対象をチェック set_erase_battler # カーソル位置を戻す back_cursor refresh_battler_info if !@attacker.more_step.nil? and (!@attacker.more_step? or @attacker.more_step <= 1) # 最も近いアクター取得 id = nearest_battler($game_system.tactics_actors.keys) # 向きの調整 @active_battler.turn_toward_event(id) end $game_system.tactics_step += 1 end #-------------------------------------------------------------------------- # ● フレーム更新 (ステップ 10 共有 : 行動終了) #-------------------------------------------------------------------------- def update_step10 # スリップダメージ if @attacker.hp > 0 and @attacker.slip_damage? @attacker.slip_damage_effect @active_battler.damage = @attacker.damage @active_battler.damage_pop = true end # ステート自然解除 @attacker.remove_states_auto # エネミーフェーズの場合、ステップ 0 へ if $game_system.tactics_phase == 2 @wait_count = ZTBS::ENEMY_THINKING if @attacker.dead? @enemy_index -= 1 end if defined?(ZTBSB14) if @attacker.more_step == nil if @active_battler.move_frequency > 1 @attacker.more_step = @attacker.movable / 2 # 移動エリア検索 search_route(@attacker.more_step - 1) # 移動先決定 @target_position = far_away_position(@target_position, @position) # 再移動エリアをセット set_movable_area(1, @attacker.more_step - 1) # ステップ 11 に移行 $game_system.tactics_step += 1 elsif @attacker.more_step? and @attacker.more_step > 1 max_step = @attacker.movable / 2 if @attacker.more_step > max_step @attacker.more_step = max_step end # 移動エリア検索 search_route(@attacker.more_step - 1) # 移動先決定 @target_position = far_away_position(@target_position, @position) # 再移動エリアをセット set_movable_area(1, @attacker.more_step - 1) # ステップ 11 に移行 $game_system.tactics_step += 1 else # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 0 に移行 $game_system.tactics_step = 0 end else # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 0 に移行 $game_system.tactics_step = 0 end else # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 0 に移行 $game_system.tactics_step = 0 end if @targets != nil @targets.clear end return end # カーソル固定を解除 $game_player.not_update = false if defined?(ZTBSB14) if @attacker.more_step == nil @attacker.more_step = @attacker.movable # 再移動エリアをセット set_movable_area(0) # ステップ 11 に移行 $game_system.tactics_step += 1 elsif @attacker.more_step? and @attacker.more_step > 1 # 再移動エリアをセット set_movable_area(0, @attacker.more_step - 1) # ステップ 11 に移行 $game_system.tactics_step += 1 else # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 1 に移行 $game_system.tactics_step = 1 end else # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 1 に移行 $game_system.tactics_step = 1 end # 対象を解放 if @targets != nil @targets.clear end end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターフェーズ ステップ 13 : 待機コマンド) #-------------------------------------------------------------------------- def update_phase1_step13 # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # コマンドウィンドウ解放 dispose_command_window # 元の位置に戻す @active_battler.moveto(@pre_x, @pre_y) # カーソル位置を戻す back_cursor # 移動エリアをセット set_movable_area(0, @attacker.more_step - 1) # カーソル固定を解除 $game_player.not_update = false # ステップ 11 へ移行 $game_system.tactics_step -= 2 end # 向きの調整 if @active_battler.direction != Input.dir4 and Input.dir4 != 0 # カーソル効果音を無駄につける(笑 $game_system.se_play($data_system.cursor_se) @active_battler.turn(Input.dir4) end # C ボタンが押された場合 if Input.trigger?(Input::C) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # コマンドウィンドウ解放 dispose_command_window # カーソル固定を解除 $game_player.not_update = false # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil # ステップ 1 へ移行 $game_system.tactics_step = 1 end end #-------------------------------------------------------------------------- # ● フレーム更新 (エネミーフェーズ ステップ 12 : 移動中) #-------------------------------------------------------------------------- def update_phase2_step12 # ステップカウント初期化 @step_count = 0 if @step_count == nil if !@active_battler.moving? if @active_battler.x == $game_player.x and @active_battler.y == $game_player.y and # 移動完了でステップ 0 に移行 $game_system.tactics_step = 0 back_cursor # 最も近いアクター取得 id = nearest_battler($game_system.tactics_actors.keys) # 向きの調整 @active_battler.turn_toward_event(id) # カーソルを固定 $game_player.not_update = false # 行動者を解放 @active_battler.acted = true @active_battler = nil @attacker = nil @step_count = nil return end # カーソル位置まで移動 action = @route_list[@step_count] @step_count += 1 case action when 2 @active_battler.move_down when 4 @active_battler.move_left when 6 @active_battler.move_right when 8 @active_battler.move_up end end end end