设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1567|回复: 1
打印 上一主题 下一主题

[已经过期] 复制了一个横版战斗系统,但是出错了

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2012-7-12
帖子
41
跳转到指定楼层
1
发表于 2012-7-12 16:26:38 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
{:2_264:}由于也是在论坛找到的的一个系统
就是新建了一个工程,只添加了这个脚本上去,但是测试史莱姆的时候是没问题,但是测试其他的就出问题了。
javascript:;
还有就是角色使用技能也是出现这个错误。求大神解决!{:2_264:}

代码如下:
  1. $脸图战斗 = true
  2. $imported = {} if $imported.nil?
  3. module YEA
  4.   module BATTLE
  5.     SKIP_PARTY_COMMAND = true
  6.     BATTLESTATUS_NAME_FONT_SIZE = 20
  7.     BATTLESTATUS_TEXT_FONT_SIZE = 16
  8.     BATTLESTATUS_NO_ACTION_ICON = 185
  9.     BATTLESTATUS_HPGAUGE_Y_PLUS = 11
  10.     BATTLESTATUS_CENTER_FACES   = false
  11.     HELP_TEXT_ALL_FOES        = "全体敌人"
  12.     HELP_TEXT_ONE_RANDOM_FOE  = "单个敌人"
  13.     HELP_TEXT_MANY_RANDOM_FOE = "%d个随机敌人"
  14.     HELP_TEXT_ALL_ALLIES      = "全体队友"
  15.     HELP_TEXT_ALL_DEAD_ALLIES = "全体死亡队友"
  16.     HELP_TEXT_ONE_RANDOM_ALLY = "单个随机队友"
  17.     HELP_TEXT_RANDOM_ALLIES   = "%d个随机队友"
  18.   end
  19. end
  20. class Game_Battler
  21.   def can_collapse?
  22.     return false unless dead?
  23.     unless actor?
  24.       return false unless sprite.battler_visible
  25.       array = [:collapse, :boss_collapse, :instant_collapse]
  26.       return false if array.include?(sprite.effect_type)
  27.     end
  28.     return true
  29.   end
  30.   def draw_mp?
  31.     return true
  32.   end
  33.   def draw_tp?
  34.     return $data_system.opt_display_tp
  35.   end
  36. end
  37. module Icon
  38.   def self.no_action; return YEA::BATTLE::BATTLESTATUS_NO_ACTION_ICON; end
  39. end
  40. class Game_Temp
  41.   attr_accessor :battle_aid
  42.   attr_accessor :evaluating
  43. end
  44. class Game_Action
  45.   alias evaluate_item_with_target_abe evaluate_item_with_target
  46.   def evaluate_item_with_target(target)
  47.     $game_temp.evaluating = true
  48.     result = evaluate_item_with_target_abe(target)
  49.     $game_temp.evaluating = false
  50.     return result
  51.   end
  52. end
  53. class Game_Actor < Game_Battler
  54.   def draw_mp?
  55.     return true unless draw_tp?
  56.     for skill in skills
  57.       next unless added_skill_types.include?(skill.stype_id)
  58.       return true if skill.mp_cost > 0
  59.     end
  60.     return false
  61.   end
  62.   def draw_tp?
  63.     return false unless $data_system.opt_display_tp
  64.     for skill in skills
  65.       next unless added_skill_types.include?(skill.stype_id)
  66.       return true if skill.tp_cost > 0
  67.     end
  68.     return false
  69.   end
  70. end
  71. class Window_BattleStatus < Window_Selectable
  72.   def initialize
  73.     super(0, 0, window_width, window_height)
  74.     self.openness = 0
  75.     @party = $game_party.battle_members.clone
  76.   end
  77.   def col_max; return $game_party.max_battle_members; end
  78.   def battle_members; return $game_party.battle_members; end
  79.   def actor; return battle_members[@index]; end
  80.   def update
  81.     super
  82.     return if @party == $game_party.battle_members
  83.     @party = $game_party.battle_members.clone
  84.     refresh
  85.   end
  86.   def draw_item(index)
  87.     return if index.nil?
  88.     clear_item(index)
  89.     actor = battle_members[index]
  90.     rect = item_rect(index)
  91.     return if actor.nil?
  92.     draw_actor_face(actor, rect.x+2, rect.y+2, actor.alive?)
  93.     draw_actor_name(actor, rect.x, rect.y, rect.width-8)
  94.     draw_actor_action(actor, rect.x, rect.y)
  95.     draw_actor_icons(actor, rect.x, line_height*1, rect.width)
  96.     gx = YEA::BATTLE::BATTLESTATUS_HPGAUGE_Y_PLUS
  97.     contents.font.size = YEA::BATTLE::BATTLESTATUS_TEXT_FONT_SIZE
  98.     draw_actor_hp(actor, rect.x+2, line_height*2+gx, rect.width-4)
  99.     if draw_tp?(actor) && draw_mp?(actor)
  100.       dw = rect.width/2-2
  101.       dw += 1 if $imported["YEA-CoreEngine"] && YEA::CORE::GAUGE_OUTLINE
  102.       draw_actor_tp(actor, rect.x+2, line_height*3, dw)
  103.       dw = rect.width - rect.width/2 - 2
  104.       draw_actor_mp(actor, rect.x+rect.width/2, line_height*3, dw)
  105.     elsif draw_tp?(actor) && !draw_mp?(actor)
  106.       draw_actor_tp(actor, rect.x+2, line_height*3, rect.width-4)
  107.     else
  108.       draw_actor_mp(actor, rect.x+2, line_height*3, rect.width-4)
  109.     end
  110.   end
  111.   def item_rect(index)
  112.     rect = Rect.new
  113.     rect.width = contents.width / $game_party.max_battle_members
  114.     rect.height = contents.height
  115.     rect.x = index * rect.width
  116.     if YEA::BATTLE::BATTLESTATUS_CENTER_FACES
  117.       rect.x += (contents.width - $game_party.members.size * rect.width) / 2
  118.     end
  119.     rect.y = 0
  120.     return rect
  121.   end
  122.   def draw_face(face_name, face_index, dx, dy, enabled = true)
  123.     bitmap = Cache.face(face_name)
  124.     fx = [(96 - item_rect(0).width + 1) / 2, 0].max
  125.     fy = face_index / 4 * 96 + 2
  126.     fw = [item_rect(0).width - 4, 92].min
  127.     rect = Rect.new(fx, fy, fw, 92)
  128.     rect = Rect.new(face_index % 4 * 96 + fx, fy, fw, 92)
  129.     contents.blt(dx, dy, bitmap, rect, enabled ? 255 : translucent_alpha)
  130.     bitmap.dispose
  131.   end
  132.   def draw_actor_name(actor, dx, dy, dw = 112)
  133.     reset_font_settings
  134.     contents.font.size = YEA::BATTLE::BATTLESTATUS_NAME_FONT_SIZE
  135.     change_color(hp_color(actor))
  136.     draw_text(dx+24, dy, dw-24, line_height, actor.name)
  137.   end
  138.   def draw_actor_action(actor, dx, dy)
  139.     draw_icon(action_icon(actor), dx, dy)
  140.   end
  141.   def action_icon(actor)
  142.     return Icon.no_action if actor.current_action.nil?
  143.     return Icon.no_action if actor.current_action.item.nil?
  144.     return actor.current_action.item.icon_index
  145.   end
  146.   def draw_tp?(actor)
  147.     return actor.draw_tp?
  148.   end
  149.   def draw_mp?(actor)
  150.     return actor.draw_mp?
  151.   end
  152.   def draw_current_and_max_values(dx, dy, dw, current, max, color1, color2)
  153.     change_color(color1)
  154.     draw_text(dx, dy, dw, line_height, current.to_s, 2)
  155.   end
  156.   def draw_actor_hp(actor, dx, dy, width = 124)
  157.     draw_gauge(dx, dy, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
  158.     change_color(system_color)
  159.     cy = (Font.default_size - contents.font.size) / 2 + 1
  160.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::hp_a)
  161.     draw_current_and_max_values(dx, dy+cy, width, actor.hp, actor.mhp,
  162.       hp_color(actor), normal_color)
  163.     end
  164.   def draw_actor_mp(actor, dx, dy, width = 124)
  165.     draw_gauge(dx, dy, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
  166.     change_color(system_color)
  167.     cy = (Font.default_size - contents.font.size) / 2 + 1
  168.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::mp_a)
  169.     draw_current_and_max_values(dx, dy+cy, width, actor.mp, actor.mmp,
  170.       mp_color(actor), normal_color)
  171.     end
  172.   def draw_actor_tp(actor, dx, dy, width = 124)
  173.     draw_gauge(dx, dy, width, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)
  174.     change_color(system_color)
  175.     cy = (Font.default_size - contents.font.size) / 2 + 1
  176.     draw_text(dx+2, dy+cy, 30, line_height, Vocab::tp_a)
  177.     change_color(tp_color(actor))
  178.     draw_text(dx + width - 42, dy+cy, 42, line_height, actor.tp.to_i, 2)
  179.   end
  180. end
  181. class Window_BattleActor < Window_BattleStatus
  182.   def show
  183.     create_flags
  184.     super
  185.   end
  186.   def create_flags
  187.     set_select_flag(:any)
  188.     select(0)
  189.     return if $game_temp.battle_aid.nil?
  190.     if $game_temp.battle_aid.need_selection?
  191.       select(0)
  192.       set_select_flag(:dead) if $game_temp.battle_aid.for_dead_friend?
  193.     elsif $game_temp.battle_aid.for_user?
  194.       battler = BattleManager.actor
  195.       id = battler.nil? ? 0 : $game_party.battle_members.index(battler)
  196.       select(id)
  197.       set_select_flag(:user)
  198.     elsif $game_temp.battle_aid.for_all?
  199.       select(0)
  200.       set_select_flag(:all)
  201.       set_select_flag(:all_dead) if $game_temp.battle_aid.for_dead_friend?
  202.     elsif $game_temp.battle_aid.for_random?
  203.       select(0)
  204.       set_select_flag(:random) if $game_temp.battle_aid.for_random?
  205.     end
  206.   end
  207.   def set_select_flag(flag)
  208.     @select_flag = flag
  209.     case @select_flag
  210.     when :all, :all_dead, :random
  211.       @cursor_all = true
  212.     else
  213.       @cursor_all = false
  214.     end
  215.   end
  216.   def update_cursor
  217.     if @cursor_all
  218.       cursor_rect.set(0, 0, contents.width, contents.height)
  219.       self.top_row = 0
  220.     elsif @index < 0
  221.       cursor_rect.empty
  222.     else
  223.       ensure_cursor_visible
  224.       cursor_rect.set(item_rect(@index))
  225.     end
  226.   end
  227.   def cursor_movable?
  228.     return false if @select_flag == :user
  229.     return super
  230.   end
  231.   def current_item_enabled?
  232.     return true if $game_temp.battle_aid.nil?
  233.     if $game_temp.battle_aid.need_selection?
  234.       member = $game_party.battle_members[@index]
  235.       return member.dead? if $game_temp.battle_aid.for_dead_friend?
  236.     elsif $game_temp.battle_aid.for_dead_friend?
  237.       for member in $game_party.battle_members
  238.         return true if member.dead?
  239.       end
  240.       return false
  241.     end
  242.     return true
  243.   end
  244. end
  245. class Window_BattleStatusAid < Window_BattleStatus
  246.   attr_accessor :status_window
  247.   def initialize
  248.     super
  249.     self.visible = false
  250.     self.openness = 255
  251.   end
  252.   def window_width; return 128; end
  253.   def show
  254.     super
  255.     refresh
  256.   end
  257.   def refresh
  258.     contents.clear
  259.     return if @status_window.nil?
  260.     draw_item(@status_window.index)
  261.   end
  262.   def item_rect(index)
  263.     return Rect.new(0, 0, contents.width, contents.height)
  264.   end
  265. end
  266. class Window_BattleEnemy < Window_Selectable
  267.   def initialize(info_viewport)
  268.     super(0, Graphics.height, window_width, fitting_height(1))
  269.     refresh
  270.     self.visible = false
  271.     @info_viewport = info_viewport
  272.   end
  273.   def col_max; return item_max; end
  274.   def show
  275.     create_flags
  276.     super
  277.   end
  278.   def create_flags
  279.     set_select_flag(:any)
  280.     select(0)
  281.     return if $game_temp.battle_aid.nil?
  282.     if $game_temp.battle_aid.need_selection?
  283.       select(0)
  284.     elsif $game_temp.battle_aid.for_all?
  285.       select(0)
  286.       set_select_flag(:all)
  287.     elsif $game_temp.battle_aid.for_random?
  288.       select(0)
  289.       set_select_flag(:random)
  290.     end
  291.   end
  292.   def set_select_flag(flag)
  293.     @select_flag = flag
  294.     case @select_flag
  295.     when :all, :random
  296.       @cursor_all = true
  297.     else
  298.       @cursor_all = false
  299.     end
  300.   end
  301.   def select_all?
  302.     return true if @select_flag == :all
  303.     return true if @select_flag == :random
  304.     return false
  305.   end
  306.   def update_cursor
  307.     if @cursor_all
  308.       cursor_rect.set(0, 0, contents.width, contents.height)
  309.       self.top_row = 0
  310.     elsif @index < 0
  311.       cursor_rect.empty
  312.     else
  313.       ensure_cursor_visible
  314.       cursor_rect.set(item_rect(@index))
  315.     end
  316.   end
  317.   def cursor_movable?
  318.     return false if @select_flag == :user
  319.     return super
  320.   end
  321.   def current_item_enabled?
  322.     return true if $game_temp.battle_aid.nil?
  323.     if $game_temp.battle_aid.need_selection?
  324.       member = $game_party.battle_members[@index]
  325.       return member.dead? if $game_temp.battle_aid.for_dead_friend?
  326.     elsif $game_temp.battle_aid.for_dead_friend?
  327.       for member in $game_party.battle_members
  328.         return true if member.dead?
  329.       end
  330.       return false
  331.     end
  332.     return true
  333.   end
  334.   def enemy; @data[index]; end
  335.   def refresh
  336.     make_item_list
  337.     create_contents
  338.     draw_all_items
  339.   end
  340.   def make_item_list
  341.     @data = $game_troop.alive_members
  342.     @data.sort! { |a,b| a.screen_x <=> b.screen_x }
  343.   end
  344.   def draw_item(index); return; end
  345.   def update
  346.     super
  347.     return unless active
  348.     enemy.sprite_effect_type = :whiten
  349.     return unless select_all?
  350.     for enemy in $game_troop.alive_members
  351.       enemy.sprite_effect_type = :whiten
  352.     end
  353.   end
  354. end
  355. class Window_BattleHelp < Window_Help
  356.   attr_accessor :actor_window
  357.   attr_accessor :enemy_window
  358.   def update
  359.     super
  360.     if !self.visible and @text != ""
  361.       @text = ""
  362.       return refresh
  363.     end
  364.     update_battler_name
  365.   end
  366.   def update_battler_name
  367.     return unless @actor_window.active || @enemy_window.active
  368.     if @actor_window.active
  369.       battler = $game_party.battle_members[@actor_window.index]
  370.     elsif @enemy_window.active
  371.       battler = @enemy_window.enemy
  372.     end
  373.     if special_display?
  374.       refresh_special_case(battler)
  375.     else
  376.       refresh_battler_name(battler) if battler_name(battler) != @text
  377.     end
  378.   end
  379.   def battler_name(battler)
  380.     text = battler.name.clone
  381.     return text
  382.   end
  383.   def refresh_battler_name(battler)
  384.     contents.clear
  385.     reset_font_settings
  386.     change_color(normal_color)
  387.     @text = battler_name(battler)
  388.     icons = battler.state_icons + battler.buff_icons
  389.     dy = icons.size <= 0 ? line_height / 2 : 0
  390.     draw_text(0, dy, contents.width, line_height, @text, 1)
  391.     dx = (contents.width - (icons.size * 24)) / 2
  392.     draw_actor_icons(battler, dx, line_height, contents.width)
  393.   end
  394.   def special_display?
  395.     return false if $game_temp.battle_aid.nil?
  396.     return false if $game_temp.battle_aid.for_user?
  397.     return !$game_temp.battle_aid.need_selection?
  398.   end
  399.   def refresh_special_case(battler)
  400.     if $game_temp.battle_aid.for_opponent?
  401.       if $game_temp.battle_aid.for_all?
  402.         text = YEA::BATTLE::HELP_TEXT_ALL_FOES
  403.       else
  404.         case $game_temp.battle_aid.number_of_targets
  405.         when 1
  406.           text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_FOE
  407.         else
  408.           number = $game_temp.battle_aid.number_of_targets
  409.           text = sprintf(YEA::BATTLE::HELP_TEXT_MANY_RANDOM_FOE, number)
  410.         end
  411.       end
  412.     else
  413.       if $game_temp.battle_aid.for_dead_friend?
  414.         text = YEA::BATTLE::HELP_TEXT_ALL_DEAD_ALLIES
  415.       elsif $game_temp.battle_aid.for_random?
  416.         case $game_temp.battle_aid.number_of_targets
  417.         when 1
  418.           text = YEA::BATTLE::HELP_TEXT_ONE_RANDOM_ALLY
  419.         else
  420.           number = $game_temp.battle_aid.number_of_targets
  421.           text = sprintf(YEA::BATTLE::HELP_TEXT_RANDOM_ALLIES, number)
  422.         end
  423.       else
  424.         text = YEA::BATTLE::HELP_TEXT_ALL_ALLIES
  425.       end
  426.     end
  427.     return if text == @text
  428.     @text = text
  429.     contents.clear
  430.     reset_font_settings
  431.     draw_text(0, 0, contents.width, line_height*2, @text, 1)
  432.   end
  433. end
  434. class Window_SkillList < Window_Selectable
  435.   def spacing
  436.     return 8 if $game_party.in_battle
  437.     return super
  438.   end
  439. end
  440. class Window_ItemList < Window_Selectable
  441.   def spacing
  442.     return 8 if $game_party.in_battle
  443.     return super
  444.   end
  445. end
  446. class Scene_Battle < Scene_Base
  447.   attr_accessor :enemy_window
  448.   attr_accessor :info_viewport
  449.   attr_accessor :spriteset
  450.   attr_accessor :status_window
  451.   attr_accessor :status_aid_window
  452.   attr_accessor :subject
  453.   alias scene_battle_create_all_windows_abe create_all_windows
  454.   def create_all_windows
  455.     scene_battle_create_all_windows_abe
  456.     create_battle_status_aid_window
  457.     set_help_window
  458.   end
  459.   alias scene_battle_create_info_viewport_abe create_info_viewport
  460.   def create_info_viewport
  461.     scene_battle_create_info_viewport_abe
  462.     @status_window.refresh
  463.   end
  464.   def create_battle_status_aid_window
  465.     @status_aid_window = Window_BattleStatusAid.new
  466.     @status_aid_window.status_window = @status_window
  467.     @status_aid_window.x = Graphics.width - @status_aid_window.width
  468.     @status_aid_window.y = Graphics.height - @status_aid_window.height
  469.   end
  470.   def create_help_window
  471.     @help_window = Window_BattleHelp.new
  472.     @help_window.hide
  473.   end
  474.   def set_help_window
  475.     @help_window.actor_window = @actor_window
  476.     @help_window.enemy_window = @enemy_window
  477.   end
  478.   alias scene_battle_create_skill_window_abe create_skill_window
  479.   def create_skill_window
  480.     scene_battle_create_skill_window_abe
  481.     @skill_window.height = @info_viewport.rect.height
  482.     @skill_window.width = Graphics.width - @actor_command_window.width
  483.     @skill_window.y = Graphics.height - @skill_window.height
  484.   end
  485.   alias scene_battle_create_item_window_abe create_item_window
  486.   def create_item_window
  487.     scene_battle_create_item_window_abe
  488.     @item_window.height = @skill_window.height
  489.     @item_window.width = @skill_window.width
  490.     @item_window.y = Graphics.height - @item_window.height
  491.   end
  492.   alias scene_battle_next_command_abe next_command
  493.   def next_command
  494.     @status_window.show
  495.     redraw_current_status
  496.     @actor_command_window.show
  497.     @status_aid_window.hide
  498.     scene_battle_next_command_abe
  499.   end
  500.   alias scene_battle_prior_command_abe prior_command
  501.   def prior_command
  502.     redraw_current_status
  503.     scene_battle_prior_command_abe
  504.   end
  505.   def redraw_current_status
  506.     return if @status_window.index < 0
  507.     @status_window.draw_item(@status_window.index)
  508.   end
  509.   alias scene_battle_command_attack_abe command_attack
  510.   def command_attack
  511.     $game_temp.battle_aid = $data_skills[BattleManager.actor.attack_skill_id]
  512.     scene_battle_command_attack_abe
  513.   end
  514.   alias scene_battle_command_skill_abe command_skill
  515.   def command_skill
  516.     scene_battle_command_skill_abe
  517.     @status_window.hide
  518.     @actor_command_window.hide
  519.     @status_aid_window.show
  520.   end
  521.   alias scene_battle_command_item_abe command_item
  522.   def command_item
  523.     scene_battle_command_item_abe
  524.     @status_window.hide
  525.     @actor_command_window.hide
  526.     @status_aid_window.show
  527.   end
  528.   def on_skill_ok
  529.     @skill = @skill_window.item
  530.     $game_temp.battle_aid = @skill
  531.     BattleManager.actor.input.set_skill(@skill.id)
  532.     BattleManager.actor.last_skill.object = @skill
  533.     if @skill.for_opponent?
  534.       select_enemy_selection
  535.     elsif @skill.for_friend?
  536.       select_actor_selection
  537.     else
  538.       @skill_window.hide
  539.       next_command
  540.       $game_temp.battle_aid = nil
  541.     end
  542.   end
  543.   alias scene_battle_on_skill_cancel_abe on_skill_cancel
  544.   def on_skill_cancel
  545.     scene_battle_on_skill_cancel_abe
  546.     @status_window.show
  547.     @actor_command_window.show
  548.     @status_aid_window.hide
  549.   end
  550.   def on_item_ok
  551.     @item = @item_window.item
  552.     $game_temp.battle_aid = @item
  553.     BattleManager.actor.input.set_item(@item.id)
  554.     if @item.for_opponent?
  555.       select_enemy_selection
  556.     elsif @item.for_friend?
  557.       select_actor_selection
  558.     else
  559.       @item_window.hide
  560.       next_command
  561.       $game_temp.battle_aid = nil
  562.     end
  563.     $game_party.last_item.object = @item
  564.   end
  565.   alias scene_battle_on_item_cancel_abe on_item_cancel
  566.   def on_item_cancel
  567.     scene_battle_on_item_cancel_abe
  568.     @status_window.show
  569.     @actor_command_window.show
  570.     @status_aid_window.hide
  571.   end
  572.   alias scene_battle_select_actor_selection_abe select_actor_selection
  573.   def select_actor_selection
  574.     @status_aid_window.refresh
  575.     scene_battle_select_actor_selection_abe
  576.     @status_window.hide
  577.     @skill_window.hide
  578.     @item_window.hide
  579.     @help_window.show
  580.   end
  581.   alias scene_battle_on_actor_ok_abe on_actor_ok
  582.   def on_actor_ok
  583.     $game_temp.battle_aid = nil
  584.     scene_battle_on_actor_ok_abe
  585.     @status_window.show
  586.     if $imported["YEA-BattleCommandList"] && !@confirm_command_window.nil?
  587.       @actor_command_window.visible = !@confirm_command_window.visible
  588.     else
  589.       @actor_command_window.show
  590.     end
  591.     @status_aid_window.hide
  592.   end
  593.   alias scene_battle_on_actor_cancel_abe on_actor_cancel
  594.   def on_actor_cancel
  595.     BattleManager.actor.input.clear
  596.     @status_aid_window.refresh
  597.     $game_temp.battle_aid = nil
  598.     scene_battle_on_actor_cancel_abe
  599.     case @actor_command_window.current_symbol
  600.     when :skill
  601.       @skill_window.show
  602.     when :item
  603.       @item_window.show
  604.     end
  605.   end
  606.   alias scene_battle_select_enemy_selection_abe select_enemy_selection
  607.   def select_enemy_selection
  608.     @status_aid_window.refresh
  609.     scene_battle_select_enemy_selection_abe
  610.     @help_window.show
  611.   end
  612.   alias scene_battle_on_enemy_ok_abe on_enemy_ok
  613.   def on_enemy_ok
  614.     $game_temp.battle_aid = nil
  615.     scene_battle_on_enemy_ok_abe
  616.   end
  617.   alias scene_battle_on_enemy_cancel_abe on_enemy_cancel
  618.   def on_enemy_cancel
  619.     BattleManager.actor.input.clear
  620.     @status_aid_window.refresh
  621.     $game_temp.battle_aid = nil
  622.     scene_battle_on_enemy_cancel_abe
  623.     if @skill_window.visible || @item_window.visible
  624.       @help_window.show
  625.     else
  626.       @help_window.hide
  627.     end
  628.   end
  629.   def end_battle_conditions?
  630.     return true if $game_party.members.empty?
  631.     return true if $game_party.all_dead?
  632.     return true if $game_troop.all_dead?
  633.     return true if BattleManager.aborting?
  634.     return false
  635.   end
  636.   def refresh_status
  637.     #如果你是程序员,请顺手帮忙优化下这里,谢谢。
  638.     @status_window.refresh
  639.     for i in $game_party.battle_members
  640.       @status_window.draw_item($game_party.battle_members.index(i))
  641.     end
  642.   end
  643. end
  644. #==============================================================================
  645. # ■ SideViewアクション設定
  646. #------------------------------------------------------------------------------
  647. #  サイドビューバトル全般のセッティングやアクションを作成します
  648. #==============================================================================
  649. module N03
  650. #--------------------------------------------------------------------------
  651. # ● 全体のセッティング
  652. #--------------------------------------------------------------------------
  653.   # アクター初期位置     一人目       二人目       三人目       四人目
  654.   #                    X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸
  655.   ACTOR_POSITION   = [[415,160, 0],[435,185, 0],[455,210, 0],[475,235, 0]]
  656.   # 行動終了時のウエイト(待ち時間・単位は1フレーム)
  657.   ACTION_END_WAIT = 8
  658.   # ターン終了時のウエイト(待ち時間・単位は1フレーム)
  659.   TURN_END_WAIT = 12
  660.   # 敵の不意打ち時にバックアタック(左右反転)を許可するならtrue しないならfalse
  661.   BACK_ATTACK = true
  662.   # 味方バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  663.   ACTOR_DAMAGE = false
  664.   # 敵バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  665.   ENEMY_DAMAGE = false
  666.   # 敵バトラーのX座標、回転計算、戦闘アニメを自動で反転させるならtrue
  667.   ENEMY_MIRROR = true
  668.   # コラプス禁止処理に使う、データベースの不死身ステートID
  669.   IMMORTAL_ID = 10
  670.   
  671.   # バトルログ(戦闘の進行を実況表示するウィンドウ)を表示させるならtrue
  672.   # OFFにした場合、スキル名ウインドウが画面上部に表示されます
  673.   BATTLE_LOG = true
  674.   # スキル名ウインドウON時の、非表示にするスキルIDを配列に入れます
  675.   NO_DISPLAY_SKILL_ID = [1,2,3,4,5,6,7]
  676.   # ダメージ数字をPOPさせるならtrue
  677.   DAMAGE_POP = true
  678.   # ステート付加をPOPさせるならtrue
  679.   STATE_POP = true
  680.   # ダメージ数字画像のファイル名(Systemフォルダを参照します)
  681.   DAMAGE_PLUS = "damage_num+"
  682.   # 回復数字画像のファイル名(Systemフォルダを参照します)
  683.   DAMAGE_MINUS = "damage_num-"
  684.   # MPダメージ数字画像のファイル名(Systemフォルダを参照します)
  685.   DAMAGE_MP = "damage_mp"
  686.   # TPダメージ数字画像のファイル名(Systemフォルダを参照します)
  687.   DAMAGE_TP = "damage_tp"
  688.   # ダメージ数字の文字間隔を調整
  689.   DAMAGE_ADJUST = -4
  690.   
  691.   # 戦闘カメラのフォーカス(移動先の焦点)を調整 [X軸, Y軸]
  692.   CAMERA_POSITION = [   0, -40]
  693.   
  694. #--------------------------------------------------------------------------
  695. # ● 戦闘背景セッティング  背景の座標調整や拡大率を設定します
  696. #--------------------------------------------------------------------------
  697.   # 床背景ファイル名…設定する床背景(Battlebacks1)画像ファイル名。
  698.   #               "全Battlebacks1"は指定のないBattlebacks1画像を一括設定する項目です
  699.   # 壁背景ファイル名…設定する壁背景(Battlebacks2)画像ファイル名。
  700.   #               "全Battlebacks2"は指定のないBattlebacks2画像を一括設定する項目です
  701.   # 座標調整…[X軸, Y軸]
  702.   # 拡大率……[横拡大率, 縦拡大率]
  703.   # シェイク可……シェイクアクションで揺れを許可するならtrue しないならfalse
  704.   # スイッチトリガー…戦闘開始時に自動でONにするゲームスイッチ番号。マイナスでサイドビュー専用スイッチがON
  705.   #            背景とバトルプログラムをセットで管理したい場合などに利用します
  706.   #            スイッチ操作をしないなら0
  707.   
  708.    FLOOR1_DATA = {
  709. #――床背景ファイル名―――         座標調整      拡大率    シェイク可  スイッチトリガー
  710.   "Sea_ex01"              => [ [   0, 120], [ 150, 150], false,   -1],
  711.   "全Battlebacks1"        => [ [   0, 120], [ 150, 150],  true,    0],
  712.   
  713.   }
  714.    FLOOR2_DATA = {
  715.   #――壁背景ファイル名―――        座標調整      拡大率    シェイク可  スイッチトリガー
  716.   "Ship_ex"               => [ [   0, 120], [ 150, 150],  true,    0],
  717.   "全Battlebacks2"        => [ [   0, 120], [ 150, 150],  true,    0],
  718.   

  719. }  
  720.   
  721. #==============================================================================
  722. # ■ アクション
  723. #------------------------------------------------------------------------------
  724. #  バトラーが戦闘中に行う単発行動です。組み合わせてフルアクションにできます
  725. #==============================================================================
  726. # ここのアクション名やフルアクション名は、かぶらないようにしてください
  727.   ACTION = {
  728.   
  729. #--------------------------------------------------------------------------
  730. # ● バトラーアニメ設定
  731. #--------------------------------------------------------------------------
  732.   # デフォルトのキャラチップは一つの画像ファイルに複数のキャラが配置されています
  733.   # キャラチップを利用する場合、追加画像はキャラの画像配置に合うようにしてください
  734.   # 一人のキャラで一つの画像を用いる(ファイルの頭に$がある)場合は特に問題ありません
  735.   
  736.   # インデックス…利用するバトラー画像ファイルの後ろに付くインデックス名。
  737.   #          サイドビューのバトラーはアクターの場合だとキャラクターファイル名を参照しますが
  738.   #          インデックスが付くと、キャラクターファイル名+インデックス名の画像ファイルを参照します
  739.   #          例)Actor1のバトラーがインデックス"_1"のアニメを実行する場合の参照ファイルはActor1_1
  740.   #          キャラチップを利用する場合のアニメのインデックスは""になります
  741.   #          アクターはCharactersフォルダ、エネミーはBattlersフォルダに画像を入れます
  742.   #
  743.   # 縦セル…画像ファイルのセルの縦位置。上から0~3と続きます。数に制限はありません
  744.   #       セル数の設定はバトラー設定で行ってください
  745.   # 横セル…画像ファイルのセルの横位置で、再生開始セル。左から0~3と続きます。
  746.   #       アニメはこの横セルの左から右へと再生します。セル数に制限はありません
  747.   # パターン… 0:セル固定 1:片道 2:往復 3:片道ループ 4:往復ループ
  748.   # 速度…アニメの更新速度。数字が低いほど早く更新します
  749.   # Z軸…手前に表示するならプラス。通常は画面下ほど手前に表示されます
  750.   # ウエイト…アニメパターンが最後まで再生されてから次の行動に移るならtrue
  751.   # 影…影グラフィックを表示するならtrue、しない場合はfalse
  752.   # 武器…武器を表示する場合は武器アクション名を。しない場合は""
  753.   #       武器アクションはいくつでも同時追加可能で、追加分は配列の後ろに入れていきます
  754.   
  755.   #―アクション名(待機系)―   判別   インデックス  縦セル 横セル パターン 速度  Z軸  ウエイト   影   武器
  756.   "待機"            => ["motion",   "",    1,   0,   4,   12,   0, true, true, "" ],
  757.   "待機固定WT"      => ["motion",   "",    1,   1,   0,   12,   0, true, true, "" ],
  758.   "待機固定"        => ["motion",   "",    1,   1,   0,   12,   0,false, true, "" ],
  759.   "倒れ"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  760.   "右向き"          => ["motion",   "",    2,   0,   4,   12,   0, true, true, "" ],
  761.   
  762.   #―アクション名(移動系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  763.   "左向き移動"      => ["motion",   "",    1,   0,   4,    6,  10, true, true, "" ],
  764.   "右向き移動"      => ["motion",   "",    2,   0,   4,    6,  10, true, true, "" ],
  765.   
  766.   #―アクション名(ポーズ系)―   判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  767.   
  768.   #―アクション名(攻撃系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  769.   "武器振りR"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り"],
  770.   "武器振りL"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振りL"],
  771.   "武器振りLR"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り","縦振りL"],
  772.   "盾防御"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "盾"],
  773.   "武器拳突き"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "拳突き" ],
  774.   "武器突き"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "突き" ],
  775.   "武器掲げ"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "掲げ" ],
  776.   "弓撃ち"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "弓"],
  777.   
  778. #--------------------------------------------------------------------------
  779. # ● バトラー移動  エネミーのX軸移動は自動で逆計算になります
  780. #--------------------------------------------------------------------------
  781.   # 目標…移動する目標座標の参照先。数値が正で現在地、負で初期位置を参照します([0=自分]は負が設定できないので-7にしてください)
  782.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  783.   # X軸…対象から見たX座標
  784.   # Y軸…対象から見たY座標
  785.   # H軸…対象から見たH座標(地面からの高さ) nilにするとH軸を無視してXYのみの移動に
  786.   # 速度…1フレームで移動するピクセル数。数値をマイナスにすると時間指定になり、移動完了までの総フレーム数になります
  787.   # カーブ…移動時の軌道が正は上、負は下にカーブします。
  788.   # ジャンプ…ジャンプ放物線軌道。[ジャンプ開始から頂点までの軌道, 頂点から着地までの軌道]
  789.   # アニメ…その移動に利用するバトラーアニメのアクション名。

  790.   #――アクション名(システム系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  791.   "戦闘前の味方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "左向き移動"],
  792.   "退場"                => ["move",-7, 180,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  793.   "逃走途中"            => ["move",-7,  80,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  794.   "コマンド入力移動"    => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向き移動"],
  795.   "ダメージのけぞり"    => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  796.   "ダメージのけぞり大"  => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  797.   
  798.   #――アクション名(リセット系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  799.   "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  800.   "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  801.   "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  802.   "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  803.   
  804.   #――アクション名(自身系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  805.   "一歩前移動"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  806.   "一歩後移動"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  807.   "一歩前ジャンプ"      => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  808.   "一歩後ジャンプ"      => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  809.   "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待機固定"],
  810.   "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "武器掲げ"],
  811.   "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  812.   "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  813.   "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  814.   
  815.   #――アクション名(目標系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  816.   "敵前移動"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  817.   "敵後移動"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  818.   "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  819.   "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  820.   "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  821.   
  822. #--------------------------------------------------------------------------
  823. # ● 武器アクション バトラーアニメや武器・アニメ飛ばしに利用するアクション
  824. #--------------------------------------------------------------------------
  825.   # タイプ…[0…アイコン利用]
  826.   #       [1…独自画像(画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  827.   #       [2…アニメセル(※2003仕様。バトラーと同じセル数でアニメします。画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  828.   # 移動…画像を動かす距離。[X軸, Y軸]
  829.   # 調整…微調整する画像の初期座標。[X軸, Y軸]
  830.   # 始度…動作前の最初の角度。半時計回りで0~360度。負が半時計回り
  831.   # 終度…動作後の角度
  832.   # 原点…画像の原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…バトラーと同じ(画像下と縦半分)]
  833.   # 反転…trueにすると画像を反転して表示
  834.   # 拡大…[X軸拡大率, Y軸拡大率] 小数点でも受け付けます
  835.   # Z軸…画像をキャラより手前に表示するならtrue
  836.   # 逆手…盾画像、もしくは二刀流時の左(項目だと下)の武器画像を表示
  837.   #       アイコンを利用しない場合、盾の画像はバトラー設定の盾の項目で行います
  838.   # 更新…-1でバトラーアニメ更新と同期化。独立させる場合は [更新時間間隔, 更新パターン数, ループするか]
  839.   #         
  840.   # インデックス…武器画像は装備している武器(盾)に設定された画像ファイルを参照しますが、
  841.   #          ここでインデックスを付けると、画像ファイル名+インデックス名の画像を参照します
  842.   #          一つの武器で複数のパターンがある画像を用いる場合に利用します
  843.   #          例) "縦振り"のインデックスは"" => 画像ファイル名"IconSet"を参照
  844.   #          例) "縦振り2"のインデックスは"_1" => 画像ファイル名"IconSet_1"を参照
  845.   #          参照フォルダはアイコン利用の場合はSystemフォルダ、独自画像とアニメセルはCharactersフォルダです
  846.   #         
  847.   # 画像…武器や盾に設定された画像ファイルやインデックスを無視して、武器画像を直接指定する場合は
  848.   #       ここに画像ファイル名を入れます。画像はCharactersフォルダを参照します
  849.   
  850.   #―アクション名―    判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  851.   "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  852.   "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  853.   "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  854.   "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  855.   "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  856.   "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  857.   
  858.   #―2003仕様―   判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  859.   "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  860.   
  861.   # 武器飛ばし用  判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   二刀     更新      インデックス  画像
  862.   "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  863.   "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  864.   
  865. #--------------------------------------------------------------------------
  866. # ● 武器・アニメ飛ばし 武器や戦闘アニメを移動させます。飛び道具などに
  867. #--------------------------------------------------------------------------
  868.   # ID…データベースのアニメID。0はアニメ非表示。[移動させるアニメID, ヒット時のアニメID]
  869.   # 始…アニメ移動の開始位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  870.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  871.   # 後…アニメ移動の終了位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  872.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  873.   # 始調整…移動開始座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  874.   # 後調整…移動終了座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  875.   # 速度…1フレームに移動するX軸ピクセル数。マイナスにすると時間扱いになり、距離によって速度が変わります
  876.   # タイプ…移動後の処理。[0=消える(ミス時は自動で貫通に変化)] [1=貫通] [2=消える(ミス時も消える)]
  877.   # 軌道…移動の軌道。[開始から頂点までの軌道, 頂点から終了までの軌道]
  878.   # Z軸…アニメや武器をキャラより手前に表示するならtrue
  879.   # ウエイト…アクションが終わるまで次のアクションに移行しないならtrue [移動させるアニメのウエイト, ヒット時アニメのウエイト]
  880.   # ダメージ…目標到達時にダメージ計算を適用するならtrue
  881.   # ホーミング…移動するターゲットに対してホーミングするならtrue。しないならfalse
  882.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  883.   # ループ…移動させるアニメの再生が終わった時、最初にループさせるならtrue
  884.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  885.   # 武器…武器アクション名を入れます。利用しないなら""
  886.   
  887.   #――アクション名――     判別     ID   始 後  始調整   後調整  速度 タイプ  軌道    Z軸       ウエイト      ダメージ  ホーミング カメラ    ループ 反転不可 武器
  888.   "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  889.   "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "矢"],
  890.   "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  891.   "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  892.   "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  893.   
  894. #--------------------------------------------------------------------------
  895. # ● 戦闘アニメ データベースの戦闘アニメを表示します
  896. #--------------------------------------------------------------------------
  897.   # ID…アニメID。-1で武器に設定されたアニメに  -2は二刀流のもう片方の武器アニメに
  898.   #               -3でスキルに設定されたアニメに
  899.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  900.   # ホーミング… 対象の座標移動にアニメが追尾するならtrue
  901.   # ウエイト…アニメ表示が終わるまで待つならtrue
  902.   # ダメージ…ダメージ計算を適用するならtrue
  903.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  904.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  905.   # 反転…アニメを反転させるならtrue
  906.   # Z軸…アニメをキャラより手前に表示するならtrue
  907.   
  908.   #―アクション名(ダメージ系)―     判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  909.   "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  910.   "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  911.   "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  912.   "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  913.   "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  914.   
  915.   #――アクション名(自身系)――   判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  916.   "魔法詠唱中"          => ["anime", 113,  0, false,  true, false,  true, false,  false,  true],
  917.   "特技待機中"          => ["anime", 114,  0, false,  true, false,  true, false,  false,  true],
  918.   "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  919.   "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  920.   
  921. #--------------------------------------------------------------------------
  922. # ● カメラワーク  画面のズームやスクロールを行います
  923. #--------------------------------------------------------------------------
  924.   # 対象…移動やズームの対象
  925.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  926.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  927.   # 時間…カメラワークにかける時間
  928.   # ズーム…カメラのズーム率(%)。100でズームなし。
  929.   # ウエイト…カメラワークが終わるまで待つならtrue。待たないならfalse
  930.   
  931.   #――アクション名――      判別    対象  調整座標   ズーム  時間  ウエイト
  932.   "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  933.   "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  934.   "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  935.   
  936. #--------------------------------------------------------------------------
  937. # ● 画面のシェイク  画面を揺らします。空中座標(H座標が0以上)のバトラーは揺れません
  938. #--------------------------------------------------------------------------
  939.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れ幅は大きくなります
  940.   # 速度…揺れの速度。小さいほど早く揺れます
  941.   # 時間…揺れの続く時間。揺れ幅は時間と共に弱まっていきます
  942.   # ウエイト…シェイクが終わるまで待つならtrue。待たないならfalse
  943.   
  944.   #――アクション名――       判別      方向   速度  時間  ウエイト
  945.   "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  946.   "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  947.   "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  948.   
  949. #--------------------------------------------------------------------------
  950. # ● 画面色調変更 背景やバトラーの色調を変更します
  951. #--------------------------------------------------------------------------
  952.   # 対象…色調変更の対象
  953.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  954.   #       [6=背景] [7=自分+ターゲット] [8=自分以外] [9=自分+ターゲット以外] [10=全て]
  955.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  956.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  957.   # ウエイト…色調変更が終わるまで待つならtrue。待たないならfalse
  958.   
  959.   # 変更名                        判別    対象     R,   G,   B,アルファ  時間 戻り  ウエイト
  960.   "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  961.   "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  962.   "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  963.   "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  964.   "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  965.   "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  966.    
  967. #--------------------------------------------------------------------------
  968. # ● トランジション 画面を固定した後に実行するトランジションです
  969. #--------------------------------------------------------------------------
  970.   # 実行する前にアクション"画面固定"を実行し、画面を固定させてください
  971.   #
  972.   # 境界…境界の曖昧さ。値が大きいほど曖昧になります
  973.   # 時間…トランジションにかける時間。トランジション中はゲーム画面は固定されます
  974.   # トランジションファイル名…トランジション画像。Picturesフォルダに入れてください
  975.   
  976.   #―――アクション名―――   判別  境界  時間  トランジションファイル名
  977.   "サークル"         => ["ts",  40,   60,  "circle"],
  978.   
  979. #--------------------------------------------------------------------------
  980. # ● 残像  バトラーの移動に残像を残します
  981. #--------------------------------------------------------------------------
  982.   # 数…残像数。0は表示中の残像を消します。あまり多いと負荷が高くなります
  983.   # 間隔…残像の表示間隔。小さいほど狭い。単位は1フレーム
  984.   # 処理…残像の後処理。trueはフルアクション終了時に消え、falseは消えずにずっと表示
  985.   # 透明度…残像の透明度
  986.   
  987.   #――アクション名――      判別    数  間隔  処理  透明度
  988.   "残像ON"        => ["mirage",  4,   3,  true,  160],
  989.   "残像OFF"       => ["mirage",  0,   0,  true,    0],
  990.   
  991. #--------------------------------------------------------------------------
  992. # ● バトラー回転 画像を回転
  993. #--------------------------------------------------------------------------
  994.   # 回転しているバトラーのフルアクションが終了すると、回転角度はリセットされます
  995.   # 回転中の画像転送元原点は中心になります。反転と違い、武器アクションは反映されません
  996.   #
  997.   # 時間…回転にかける時間。0で即座に反映されます
  998.   # 始度…回転開始時の角度。0~360度を指定。正が反時計周り、負が時計周り
  999.   # 終度…回転終了時の角度。0~360度を指定。上記ともにエネミーは逆計算になります
  1000.   # タイプ…回転終了後の処理。[0…回転リセット] [1…終了角度のまま] [2…ループ]

  1001.   #――アクション名――     判別    時間  始度  終度  タイプ
  1002.   "右1回転"        => ["angle",  12,    0, -360,   0],
  1003.   "左1回転"        => ["angle",  12,    0,  360,   0],
  1004.   
  1005. #--------------------------------------------------------------------------
  1006. # ● バトラー拡大縮小 画像を拡大縮小
  1007. #--------------------------------------------------------------------------
  1008.   # 拡大縮小しているバトラーのフルアクションが終了すると、拡大縮小はリセットされます
  1009.   # 反転と違い、武器アクションは反映されません
  1010.   #
  1011.   # 時間…拡大縮小にかける時間。
  1012.   # 開始サイズ…拡大縮小開始時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  1013.   # 終了サイズ…拡大縮小終了時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  1014.   # タイプ…拡大縮小終了後の処理。[0…サイズリセット] [1…終了サイズのまま] [2…ループ]

  1015.   #――アクション名――     判別   時間    開始サイズ     終了サイズ  タイプ
  1016.   "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  1017.   "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

  1018. #--------------------------------------------------------------------------
  1019. # ● バトラー透明度操作 画像の透明度を変更
  1020. #--------------------------------------------------------------------------
  1021.   # バトラーのフルアクションが終了すると、透明度操作はリセットされます
  1022.   #
  1023.   # 時間…透明度変更にかける時間。
  1024.   # 開始…変更開始時の透明度。0が完全に消えた状態、255が完全に不透明な状態
  1025.   # 終了…変更終了時の透明度
  1026.   # 影…影も同じ透明度操作をするならtrue
  1027.   # 武器…武器も同じ透明度操作をするならtrue
  1028.   # ループ…透明度変更が終了した後、操作を自動で逆転させ続けるならtrue
  1029.   # ウエイト…操作終了まで次のアクションに移行せず待つならtrue
  1030.   
  1031.   #――アクション名――         判別    時間  開始  終了    影   武器   ループ  ウエイト
  1032.   "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  1033.   "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  1034.   "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  1035.   "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  1036.   "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  1037.   
  1038. #--------------------------------------------------------------------------
  1039. # ● ふきだしアニメ イベントに使うふきだしアイコンを表示
  1040. #--------------------------------------------------------------------------
  1041.   # 種類…ふきだしの種類(縦位置)を0~9で指定
  1042.   # 速度…更新速度。セルは2コマ目から再生されます
  1043.   # サイズ…ふきだしのサイズ
  1044.   
  1045.   # ふきだし名         判別      種類 速度  サイズ
  1046.   "状態異常/汎用"   => ["balloon",   6,  10,  0.6],
  1047.   "状態異常/ピンチ" => ["balloon",   5,  10,  0.6],
  1048.   "状態異常/睡眠"   => ["balloon",   9,  10,  0.6],
  1049.   
  1050. #--------------------------------------------------------------------------
  1051. # ● ピクチャの表示  カットインなどに
  1052. #--------------------------------------------------------------------------
  1053.   # 番号…使用するピクチャの番号。ピクチャを管理するための番号です。何枚でも表示できます
  1054.   #       フルアクションが終了すると自動で消去(Bitmap解放)されます
  1055.   # 開始座標…移動開始位置。ピクチャの左上を原点とします。[X軸, Y軸]
  1056.   #           既にピクチャがある場合、[]にすると開始座標はその場所になります
  1057.   # 終了座標…移動終了位置。開始位置と同じ値にすると移動せず表示のみになります
  1058.   #           プレーン使用の場合、開始と終了を[]にすると移動速度を維持します
  1059.   # 時間…移動時間。0でピクチャを消去します
  1060.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  1061.   # 透明度…透明度設定。[開始時の透明度, 1フレームごとに加算される透明度]
  1062.   # プレーン使用…プレーンクラス(画像がタイル状に並ぶ画像)を使用する場合の矩形。[X軸,Y軸]
  1063.   #            プレーンを使用しない場合は[]
  1064.   # BA反転…バックアタック時に画像反転とX座標移動を逆にするならtrue
  1065.   #         プレーン使用時の画像はtrueでも反転せず、X座標移動のみ逆になります
  1066.   # ピクチャファイル名…ピクチャフォルダ内のファイル名。

  1067.   #―――アクション名―――    判別  番号  開始座標     終了座標   時間 Z軸   透明度    プレーン使用  BA反転 ピクチャファイル名
  1068.   "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  1069.   "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  1070.   "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  1071.   "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  1072.   "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  1073.   "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  1074.   "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  1075.   "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  1076.   "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  1077.   
  1078. #--------------------------------------------------------------------------
  1079. # ● ステート操作
  1080. #--------------------------------------------------------------------------
  1081.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  1082.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体] [2=自分を除く]
  1083.   # 操作…ステートを付与するなら"+" 解除するなら"-"
  1084.   # ステートID…操作するステートのIDをまとめて配列に入れます
  1085.   
  1086.   # ステート付与名           判別  対象 拡張 操作 ステートID
  1087.   "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  1088.   
  1089. #--------------------------------------------------------------------------
  1090. # ● FPS(ゲーム全体のスピード)変更  アクションの細部チェック用
  1091. #--------------------------------------------------------------------------
  1092.   # ゲームスピード…60がデフォルトで、低くなるほどスローになります。 
  1093.   
  1094.   #――アクション名――   判別  ゲームスピード
  1095.   "スロー再生"   => ["fps",  15],
  1096.   "通常再生"     => ["fps",  60],
  1097.   
  1098. #--------------------------------------------------------------------------
  1099. # ● バトラー画像変更  バトラー画像の参照先ファイルを変更します
  1100. #--------------------------------------------------------------------------
  1101.   # 維持…アクターの場合、戦闘後も変更を維持するならtrue
  1102.   # インデックス…アクターの場合、歩行グラのどの矩形かを設定します
  1103.   #          [0][1][2][3]
  1104.   #          [4][5][6][7]
  1105.   #
  1106.   # ファイル名…変更する画像ファイル名。アクターはCharactersフォルダ、
  1107.   #         エネミーはBattlersフォルダを参照します
  1108.   # 顔グラ…アクターの場合、戦闘後の顔グラも変更するなら[顔グラインデックス, ファイル名]
  1109.   #        変更しないなら[]
  1110.   
  1111.   #―――アクション名―――      判別     維持  インデックス  ファイル名        顔グラ
  1112.   "オオカミに変身"    => ["change", false,    6,    "Animal", [0, "Actor4"]],

  1113. #--------------------------------------------------------------------------
  1114. # ● スキル派生  アクションを中断し、別のスキルに派生させます
  1115. #--------------------------------------------------------------------------
  1116.   # 習得…派生するスキルが未修得でも実行可能ならtrue
  1117.   # コスト条件…派生するスキルのコストが足りなくても実行可能ならtrue
  1118.   # スキルID…派生するスキルID
  1119.   
  1120.   #―――アクション名―――    判別   習得  コスト条件  スキルID
  1121.   "多段攻撃に派生"   => ["der",  true,  false,   1],

  1122. #--------------------------------------------------------------------------
  1123. # ● サウンドの演奏  BGM・BGS・SEを鳴らします
  1124. #--------------------------------------------------------------------------
  1125.   # 種別…効果音は"se"  BGMは"bgm"  BGSは"bgs"
  1126.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  1127.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  1128.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  1129.   
  1130.   #――アクション名――     判別    種別  ピッチ  音量  ファイル名
  1131.   "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  1132.   
  1133. #--------------------------------------------------------------------------
  1134. # ● ムービーの再生  ogvファイルのムービーを再生します
  1135. #--------------------------------------------------------------------------
  1136.   # ファイル名…再生するムービーファイル名。Moviesフォルダを参照します
  1137.   
  1138.   #――アクション名――          判別     ファイル名
  1139.   "死亡フラグムービー" => ["movie", "sample1"],
  1140.   
  1141. #--------------------------------------------------------------------------
  1142. # ● ゲームスイッチ(サイドビュー専用スイッチ)の操作
  1143. #--------------------------------------------------------------------------
  1144.   # IDがプラスでゲームスイッチ、マイナスでサイドビュー専用スイッチの操作になります
  1145.   #
  1146.   # ON番号…ONにするスイッチIDをまとめて配列に入れます
  1147.   # OFF番号…OFFにするスイッチIDをまとめて配列に入れます
  1148.   #
  1149.   #――アクション名――       判別     ON番号   OFF番号   
  1150.   "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  1151.   "背景を宇宙に変更"=> ["switch",  [-4],   []],
  1152.   "背景宇宙を解除"  => ["switch",    [],   [-4]],
  1153.   "魔方陣ON"        => ["switch",  [-5],   []],
  1154.   "魔方陣OFF"       => ["switch",    [],   [-5]],
  1155.   
  1156. #--------------------------------------------------------------------------
  1157. # ● ゲーム変数の操作
  1158. #--------------------------------------------------------------------------
  1159.   # 変数No…何番の変数を操作するか
  1160.   # 操作…[0=代入] [1=加算] [2=減算] [3=乗算] [4=除算] [5=剰余]
  1161.   # オペランド…演算の対象となる数値を指定します。マイナスにすると、その数字の
  1162.   #          絶対値の変数Noに格納されている数値が演算の対象となります
  1163.   #
  1164.   # ――アクション名――     判別     変数No  操作  オペランド
  1165.   "変数No1/+1"     => ["variable",   1,     1,     1],
  1166.   
  1167. #--------------------------------------------------------------------------
  1168. # ● 条件分岐 (ゲームスイッチ) 条件を設定し、アクションを分岐させます
  1169. #--------------------------------------------------------------------------
  1170.   # スイッチNo…何番のスイッチを参照するか。マイナスでサイドビュー専用スイッチを操作します
  1171.   # 条件…ONならtrue、OFFならfalse
  1172.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1173.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1174.   #
  1175.   #―――アクション名―――       判別  スイッチNo  条件  分岐
  1176.   "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  1177.   
  1178. #--------------------------------------------------------------------------
  1179. # ● 条件分岐 (ゲーム変数)
  1180. #--------------------------------------------------------------------------
  1181.   # 変数No…何番の変数を参照するか
  1182.   # 数値…条件となる数字を入れます。マイナスでその絶対値の変数に格納された数値を参照します
  1183.   # 条件…参照した変数が条件の数字と比べて…[0=同値] [1=少ない] [2=多い]
  1184.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1185.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1186.   #
  1187.   #―――アクション名―――       判別  変数No 数値  条件  分岐
  1188.   "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],

  1189. #--------------------------------------------------------------------------
  1190. # ● 条件分岐 (ステート)
  1191. #--------------------------------------------------------------------------
  1192.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  1193.   # ステートID…何番のステートを条件にするか
  1194.   # 条件…[0=付加している] [1=付加していない]
  1195.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  1196.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1197.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1198.   #
  1199.   #―――アクション名―――       判別  対象  ステートID 条件  人数  分岐
  1200.   "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],

  1201. #--------------------------------------------------------------------------
  1202. # ● 条件分岐 (スキル)
  1203. #--------------------------------------------------------------------------
  1204.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  1205.   # スキルID…何番のスキルを条件にするか
  1206.   # 条件…[0=使える] [1=使えない]
  1207.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  1208.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1209.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1210.   #
  1211.   #―――アクション名―――       判別  対象 スキルID  条件  人数  分岐
  1212.   "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

  1213. #--------------------------------------------------------------------------
  1214. # ● 条件分岐 (パラメータ)
  1215. #--------------------------------------------------------------------------
  1216.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  1217.   # 種別…どのパラメータを条件にするか
  1218.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻撃力]
  1219.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  1220.   #
  1221.   # 数値…条件となる数字を入れます。マイナスで最大値からの割合%に(HP・MP・TP限定)
  1222.   # 条件…参照したパラメータが条件の数字と比べて…[0=同じ] [1=少ない] [2=多い]
  1223.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  1224.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1225.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1226.   #
  1227.   #―――アクション名―――       判別  対象  種別  数値  条件  人数  分岐
  1228.   "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],

  1229. #--------------------------------------------------------------------------
  1230. # ● 条件分岐 (装備)
  1231. #--------------------------------------------------------------------------
  1232.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  1233.   # 種類…条件となる装備の種類 [0=武器] [1=防具]
  1234.   # 装備ID…上の種類のアイテムID。IDは一括して配列[]に入れます。
  1235.   #         マイナスで武器(防具)タイプを参照します
  1236.   # 条件…[0=装備している] [1=装備していない]
  1237.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  1238.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1239.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1240.   #
  1241.   #―――アクション名―――       判別  対象  種類     ID   条件  人数  分岐
  1242.   "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  1243.   "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  1244.   "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  1245.   "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  1246.   "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  1247.   "拳弓除外"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  1248.   
  1249. #--------------------------------------------------------------------------
  1250. # ● 条件分岐 (スクリプト) 
  1251. #--------------------------------------------------------------------------
  1252.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  1253.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  1254.   # スクリプト…trueかfalseを返すスクリプトを入れます
  1255.   #
  1256.   #―――アクション名―――       判別   分岐  スクリプト
  1257.   "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  1258.   "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  1259.   "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  1260.   "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  1261.   "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  1262.   "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  1263.   "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  1264.   "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  1265.   "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  1266.   
  1267. #--------------------------------------------------------------------------
  1268. # ● セカンドターゲット操作
  1269. #--------------------------------------------------------------------------
  1270.   # セカンドターゲットとは、通常のターゲットとは別の独立したターゲット情報です
  1271.   # 何も操作しない場合、通常ターゲットと同じ対象がセットされています
  1272.   #
  1273.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  1274.   #
  1275.   # INDEX…対象をパーティのインデックス(並び順)で絞込みます INDEX = [インデックス, 判別]
  1276.   #        インデックス…パーティのインデックス数値
  1277.   #        判別…数値の条件 [0=絞込まない] [1=そのインデックスが対象に] [2=そのインデックスを排除]
  1278.   #
  1279.   # ID…対象をアクター(エネミー)IDで絞込むならIDの数字を入れる。0で絞込まない
  1280.   #     マイナスにするとその絶対値のIDが排除条件になります
  1281.   #
  1282.   # ステート…対象を現在付加しているステートIDで絞込むならステートIDの数字を入れる。0で絞込まない
  1283.   #       マイナスにすると付加していないことが条件になります
  1284.   #
  1285.   # スキル…対象を使用可能なスキルIDで絞込むならスキルIDの数字を入れる。0で絞込まない
  1286.   #      マイナスにすると使用不可能が条件になります
  1287.   #
  1288.   # パラメータ…対象のパラメータを条件に絞込みます パラメータ = [種別, 数値, 判別]
  1289.   #         種別…[0=絞込まない] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  1290.   #               [7=攻撃力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  1291.   #         数値…種別で決定した数値を入れる。マイナスで最大値からの割合%に(HP・MP・TP限定)
  1292.   #         判別…数値の条件 [0=同じ] [1=少ない] [2=多い]
  1293.   #
  1294.   # 装備…対象の装備物を条件に絞込みます。アクター限定 装備 = [種類, ID]
  1295.   #       種類…[0=武器] [1=防具]
  1296.   #       ID…装備種別の条件となるアイテムIDを配列[]に入れます。0で絞込まない
  1297.   #           マイナスで武器(防具)タイプを参照します
  1298.   #
  1299.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体]  [2=自分を除く]
  1300.   # 操作…[0=操作しない] [1=通常ターゲットをセカンドターゲットに変更]  [2=セカンドターゲット・通常ターゲットを初期化]
  1301.   
  1302.   #――アクション名――      判別 対象  INDEX  ID  ステート スキル   パラメータ      装備   拡張 操作
  1303.   "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  1304.   "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  1305.   
  1306. #--------------------------------------------------------------------------
  1307. # ● スクリプトの操作  
  1308. #--------------------------------------------------------------------------
  1309.   # スクリプトを実行。サンプルのp = 1 の部分にevalで実行するスクリプトを入れます
  1310.   #
  1311.   #―――アクション名―――  
  1312.   "テストスクリプト" => ["p = 1 "],
  1313.   
  1314. #--------------------------------------------------------------------------
  1315. # ● その他 設定項目なしでフルアクションに入れます
  1316. #--------------------------------------------------------------------------
  1317.   # 強制戦闘終了…戦闘を強制終了させます
  1318.   # 画面固定…ゲーム画面を固定させます。トランジション前に入れます
  1319.   # ダメージアニメ…スキルアニメを再生し、それが終わる直前にダメージをPOPさせます
  1320.   # 反転…画像と武器アニメを反転します。再度反転させるかフルアクション終了で反転解除
  1321.   # 武器消去…表示中の武器画像を消去します
  1322.   # 武器消去解除…消去した武器画像を表示します
  1323.   # 敵コラプス…崩御エフェクトを実行します。主に敵の戦闘不能に使用します
  1324.   # コラプス禁止…対象のHPが0になった場合のコラプスを禁止します。連続攻撃開始時などに
  1325.   # コラプス禁止解除…コラプス禁止を解除します。連続攻撃の終わりなどに。入れなくても行動終了時にコラプス許可になります
  1326.   # 待機キャンセル…待機アクションを行わないようになります。戦闘イベントでの演出などに
  1327.   # 待機キャンセル解除…待機キャンセルを解除し、待機アクションを行います
  1328.   # 初期位置変更…元の座標(初期位置)を現在の座標に変更します
  1329.   # 初期位置変更解除…初期位置変更で変更した座標を元に戻します
  1330.   # 強制…この次にある行動をターゲットに強制させます(リアクション)
  1331.   # 強制2…この次にある行動をセカンドターゲットに強制させます(リアクション)
  1332.   # 次の行動者へ…戦闘行動が終了したとみなし、直後に次のキャラが行動開始します
  1333.   # 個別開始…複数ターゲット攻撃を個別で処理する場合の、リピート行動開始の目印です
  1334.   # 個別終了…複数ターゲット攻撃を個別で処理する場合の、リピート行動終了の目印です
  1335.   # ループ開始…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  1336.   # ループ終了…"ループ開始""ループ終了"は主にコマンド入力後の待機アクションに利用します
  1337.    
  1338.   #―――アクション名―――       判別
  1339.   "強制戦闘終了"      => ["battle_end"],
  1340.   "画面固定"          => ["graphics_freeze"],
  1341.   "ダメージアニメ"    => ["damage_anime"],
  1342.   "反転"              => ["mirror"],
  1343.   "武器消去"          => ["weapon_off"],
  1344.   "武器消去解除"      => ["weapon_on"],
  1345.   "敵コラプス"        => ["normal_collapse"],
  1346.   "コラプス禁止"      => ["no_collapse"],
  1347.   "コラプス禁止解除"  => ["collapse"],
  1348.   "待機キャンセル"    => ["non_motion"],
  1349.   "待機キャンセル解除"=> ["non_motion_cancel"],
  1350.   "初期位置変更"      => ["change_base_position"],
  1351.   "初期位置変更解除"  => ["set_base_position"],
  1352.   "強制"              => ["force_action"],
  1353.   "強制2"             => ["force_action2"],
  1354.   "次の行動者へ"      => ["next_battler"],
  1355.   "個別開始"          => ["individual_start"],
  1356.   "個別終了"          => ["individual_end"],
  1357.   "ループ開始"        => ["loop_start"],
  1358.   "ループ終了"        => ["loop_end"],
  1359.   
  1360. #--------------------------------------------------------------------------
  1361. # ● ウエイト 次のアクションに行かずに待つ時間
  1362. #--------------------------------------------------------------------------
  1363.   # アクションで数値のみの場合、それがそのままウエイト時間となります。
  1364.   # (例) "20" …次のアクションに行かずに20フレーム待つ
  1365.   #
  1366.   # 数値をマイナスにするとランダムウエイトとなり、その数値の0~絶対値の間で
  1367.   # ランダムにウエイト時間が決定されます。
  1368.   # (例) "-20" …ランダムで0~20フレーム待つ
  1369.    
  1370. #--------------------------------------------------------------------------
  1371. # ● ショートカットコマンド
  1372. #--------------------------------------------------------------------------
  1373.   # 通常は設定したアクション名をフルアクション配列に入れて行動を作りますが
  1374.   # アクション設定せず直接コマンドを記述して、作業を短縮できるものがあります
  1375.   # 頻繁に利用するものはこのショートカットを使うと登録アクションが増えないのでお勧めです
  1376.   #
  1377.   # [戦闘アニメ]
  1378.   # (例) "anime(20)" …データベース20番のアニメをターゲットに実行(ウエイトあり)
  1379.   # (例) "anime(20,false)" …データベース20番のアニメをターゲットに実行(ウエイトなし)
  1380.   # (例) "anime_me(20)" …データベース20番のアニメを自分に実行(ウエイトあり)
  1381.   # (例) "anime_me(20,false)" …データベース20番のアニメを自分に実行(ウエイトなし)
  1382.   #
  1383.   # [ウエイト インデックスディレイ] ※パーティインデックスでウエイトにディレイを掛けます
  1384.   # (例) "delay(12)"…インデックス1番のウエイトが0フレーム 2番のウエイトが12フレーム  3番のウエイトが24フレーム…
  1385.   #
  1386.   # [効果音(SE)]
  1387.   # (例) "se('Bow1')" …ファイル名がBow1のSEを鳴らします
  1388.   # (例) "se('Bow1',50)" …ファイル名がBow1のSEをピッチ50で鳴らします
  1389.   #
  1390.   # [ターゲットへアクション(フルアクション)を強制]
  1391.   # (例) "target('ダメージのけぞり')" …ターゲットに"ダメージのけぞり"のアクションを強制します
  1392.   # (例) "target2('被ダメージ')" …セカンドターゲットに"被ダメージ"のフルアクションを強制します
  1393.    
  1394.   }  
  1395. #==============================================================================
  1396. # ■ フルアクション
  1397. #------------------------------------------------------------------------------
  1398. #  アクションを組み合わせたもので、行動は左側から順番に行われます。
  1399. #   フルアクションの中にフルアクションを入れることも可能で、アクションのパーツ化や
  1400. #   条件分岐の次にフルアクションを置く等の使い方が便利です
  1401. #==============================================================================
  1402.   FULLACTION = {
  1403.   
  1404.   # ―――待機系―――
  1405.   "通常待機"        => ["待機"],
  1406.   "通常待機固定"    => ["待機固定WT"],
  1407.   "ピンチ待機"      => ["状態異常/ピンチ","ピンチ色調","待機","待機"],
  1408.   "防御待機"        => ["待機固定WT"],
  1409.   "毒待機"          => ["状態異常/汎用","毒色調","待機","待機","エネミー限定","80"],
  1410.   "睡眠待機"        => ["状態異常/睡眠","エネミー限定","40","エネミー中止","倒れ","倒れ"],
  1411.   "汎用状態異常待機"=> ["状態異常/汎用","汎用状態異常色調","待機","待機","エネミー限定","80"],
  1412.   "様子見"          => ["待機","60"],
  1413.   "戦闘不能"        => ["倒れ"],
  1414.   
  1415.   # ――システム系――
  1416.   "戦闘開始味方"    => ["戦闘前の味方配置","delay(4)","座標リセット左向き"],
  1417.   "味方退場"        => ["退場"],
  1418.   "逃走"            => ["対象アニメ","カメラリセット","delay(4)","退場"],
  1419.   "敵逃走"          => ["対象アニメ","逃走透明","退場"],
  1420.   "逃走失敗"        => ["カメラリセット","delay(4)","逃走途中","一歩後移動","座標リセット左向き"],
  1421.   "コマンド入力"    => ["コマンド入力移動"],
  1422.   "コマンド入力後"  => ["座標リセット早"],
  1423.   "コマンド後防御"  => ["座標リセット早","ループ開始","待機固定WT","ループ終了"],
  1424.   "コマンド後魔法"  => ["座標リセット早","待機固定","ループ開始","魔法詠唱中","ループ終了"],
  1425.   "コマンド後特技"  => ["座標リセット早","待機固定","ループ開始","特技待機中","ループ終了"],
  1426.   "防御"            => ["対象アニメ","待機固定WT"],
  1427.   "回避"            => ["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  1428.   "盾ガード"        => ["se('Evasion2')","盾防御","60"],
  1429.   "身代わり開始"    => ["敵中移動早","初期位置変更"],
  1430.   "身代わり終了"    => ["初期位置変更解除","座標リセット左向き"],
  1431.   "被身代わり開始"  => ["一歩後移動","一歩後移動","待機固定WT"],
  1432.   "被身代わり終了"  => ["座標リセット左向き"],
  1433.   "勝利ポーズ振り"  => ["勝利ジャンプ武器","勝利ジャンプ着地","120"],
  1434.   "勝利ポーズバク転"=> ["右1回転","勝利ジャンプ","拳限定","武器拳突き","拳除外","武器振りR","120"],
  1435.   "閃き"            => ["anime_me(119)","20"],
  1436.   
  1437.   # ―リアクション系―
  1438.   "被ダメージ"      => ["ダメージのけぞり","座標リセット左向き"],
  1439.   "被ダメージ大"    => ["シェイク中","ダメージのけぞり大","座標リセット左向き"],
  1440.   "透明"            => ["透明化","ループ開始","120","ループ終了"],
  1441.   "縦揺れ"          => ["縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02"],
  1442.   
  1443.   # ―ショートカット系(他のフルアクションから呼び出されるパーツ)―
  1444.   "斬り"            => ["武器振りR","対象アニメ武器","10"],
  1445.   "拳"              => ["武器拳突き","対象アニメ武器","10"],
  1446.   "弓"              => ["Bow1","弓撃ち","矢発射","9"],
  1447.   "攻撃"            => ["拳限定","拳","弓限定","弓","拳弓除外","斬り"],
  1448.   "通常攻撃始め"    => ["敵前移動","コラプス禁止","個別開始","二刀流限定","二刀左"],
  1449.   "通常攻撃終わり"  => ["死亡確認","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],
  1450.   "二刀左"          => ["武器振りL","対象アニメ武器LWT"],
  1451.   "特技発動"        => ["一歩前移動","武器掲げ","特技発動アニメ"],
  1452.   "魔法発動"        => ["一歩前移動","武器掲げ","魔法発動アニメ"],
  1453.   "カットイン"      => ["カットイン背景始","カットイン分岐","70","カットイン終","カットイン背景終","20"],
  1454.   "カットイン分岐"  => ["アクターID1限定","カットインA1","アクターID2限定","カットインA2","アクターID6限定","カットインA3","アクターID7限定","カットインA4"],
  1455.   "死亡フラグ動画"  => ["白フェードイン","50","死亡フラグムービー","白フェードアウト","50"],
  1456.   "背景を宇宙に"    => ["ズームアウト","se('Blind',70)","背景のみ暗転","自分以外味方全員","強制2","透明","透明化","40","背景を宇宙に変更","色調初期化"],
  1457.   "背景宇宙解除"    => ["カメラリセット","背景のみ暗転","target2('透明化解除WT')","透明化解除","40","背景宇宙を解除","色調初期化"],
  1458.   "魔方陣表示"      => ["se('Blind',70)","画面固定","魔方陣ON","サークル"],
  1459.   "魔方陣消去"      => ["40","画面固定","魔方陣OFF","サークル"],
  1460.   
  1461.   # ――通常攻撃系――
  1462.   "通常攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  1463.   "斬り攻撃"        => ["通常攻撃始め","死亡確認","武器振りR","通常攻撃終わり"],
  1464.   "拳攻撃"          => ["通常攻撃始め","武器拳突き","通常攻撃終わり"],
  1465.   "突き攻撃"        => ["通常攻撃始め","武器突き","通常攻撃終わり"],
  1466.   "弓攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","弓撃ち",
  1467.                         "矢発射WT","個別終了","コラプス禁止解除","座標リセット"],
  1468.   
  1469.   # ――スキル系―――
  1470.   "汎用スキル"      => ["特技発動","武器振りR","ダメージアニメ","座標リセット"],
  1471.   "汎用魔法"        => ["魔法発動","武器振りR","ダメージアニメ","座標リセット"],
  1472.   
  1473.   "水鉄砲"          => ["特技発動","武器振りR","水鉄砲発射","座標リセット"],
  1474.   "武器投げ"        => ["特技発動","Bow1","武器振りR","6","待機固定","武器投げ開始","武器投げ戻し","座標リセット"],
  1475.   "カットイン攻撃"  => ["特技発動","カットイン","攻撃","座標リセット"],
  1476.   "ムービー攻撃"    => ["特技発動","待機固定","死亡フラグ動画","通常攻撃始め","武器振りR","通常攻撃終わり"],
  1477.   "オオカミ変身"    => ["特技発動","anime(110,false)","オオカミに変身","待機固定","120","座標リセット"],
  1478.   "5回攻撃"         => ["特技発動","コラプス禁止","弓除外","敵前移動","攻撃","攻撃","攻撃","攻撃","攻撃","コラプス禁止解除","座標リセット"],
  1479.   "スキル派生"      => ["武器投げ","多段攻撃に派生","斬り攻撃"],
  1480.   "背景変更攻撃"    => ["魔法発動","武器振りR","背景を宇宙に","ダメージアニメ","背景宇宙解除","座標リセット"],
  1481.   "ピクチャ攻撃"    => ["魔法発動","魔方陣表示","武器振りR","anime(80,false)","60","シェイク大","対象アニメ","魔方陣消去","座標リセット"],
  1482.   "暗転攻撃"        => ["特技発動","自分とターゲット以外暗転","se('Laser',150)",
  1483.                         "残像ON","敵前移動","anime(35,false)","敵後移動","対象アニメ",
  1484.                         "武器振りR","20","色調初期化","座標リセット","残像OFF"],
  1485.   "空中攻撃"        => ["特技発動","Bow1","一歩前ジャンプ","叩き付け前ジャンプ",
  1486.                         "待機固定","左1回転","10","anime(117,false)","叩き付け",
  1487.                         "対象アニメ","シェイク中","強制","縦揺れ","20",
  1488.                         "一歩後ジャンプ","座標リセット"],
  1489.   
  1490.   # ――アイテム系―――
  1491.   "アイテム使用"     => ["敵前移動","待機固定","対象アニメWT","座標リセット左向き"],
  1492.   
  1493.   
  1494.   
  1495.   }
  1496.   
  1497.   
  1498.   
  1499. #==============================================================================
  1500. # ■ バトルプログラム
  1501. #------------------------------------------------------------------------------
  1502. #  バトルシーンの演出を時間管理します
  1503. #  制御はゲームスイッチ・サイドビュー専用スイッチで行います
  1504. #==============================================================================
  1505.   BATTLE_PROGRAM = {
  1506.   
  1507. #--------------------------------------------------------------------------
  1508. # ● スイッチの制御  スイッチの時間操作で、演出をプログラムします
  1509. #--------------------------------------------------------------------------
  1510.   # スイッチ…プログラム実行合図となるゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  1511.   #       OFFにすると、実行中のプログラムは中止されます
  1512.   #       サイドビュー専用スイッチは戦闘終了時に初期化(全てOFFに)されます
  1513.   #       イベントで戦闘前にサイドビュー専用スイッチを操作する場合、イベントスクリプトで
  1514.   #       $sv_camera.switches[1] = true と入れてください
  1515.   #       (1は操作するスイッチ番号、ONにするならtrue OFFにするならfalse)
  1516.   #
  1517.   # ON番号…ONにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  1518.   #         番号は一括して配列に入れます。
  1519.   #         例…[1,2,-5] ゲームスイッチ1番2番とサイドビュー専用スイッチ5番がON
  1520.   #
  1521.   # OFF番号…OFFにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  1522.   #          操作しない場合は[]と入れます
  1523.   #
  1524.   # 時間…上のスイッチ操作を実行するまでの時間(単位は1フレーム)
  1525.   #       例えば100とした場合、プログラム開始から100フレーム後にスイッチ操作が実行されます
  1526.   #       [参考値] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  1527.   #
  1528.   # ランダム幅…時間に加算されるランダム幅。単位は1フレーム
  1529.   #          例えば時間300、ランダム幅300だと最終的に300~600フレームの時間になります
  1530.    
  1531.   #――プログラム名――       判別   スイッチ   ON番号  OFF番号   時間  ランダム幅
  1532.   "背景を砦に"       => ["switch",  -1,   [-2],      [],  1200,     0],
  1533.   "背景を海に"       => ["switch",  -2,   [-3],      [],  2400,     0],
  1534.   
  1535. #--------------------------------------------------------------------------
  1536. # ● SE/BGM/BGSの演奏  
  1537. #--------------------------------------------------------------------------
  1538.   # スイッチ…実行合図となるゲームスイッチ番号。マイナスはサイドビュー専用スイッチ。
  1539.   #
  1540.   # 種別…SEの操作なら"se"  BGMの操作なら"bgm"  BGSの操作なら"bgs"
  1541.   #
  1542.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  1543.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  1544.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  1545.    
  1546.   #――プログラム名――      判別   スイッチ  種別  ピッチ  音量  ファイル名
  1547.   "潮騒"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  1548.   
  1549. #--------------------------------------------------------------------------
  1550. # ● 背景の制御  画像変更や自動スクロールを行います
  1551. #--------------------------------------------------------------------------
  1552.   # スイッチ…実行合図となるスイッチ番号
  1553.   #
  1554.   # No.…操作する背景のナンバー。1が床背景、2が壁背景(遠景)になります
  1555.   #
  1556.   # スクロール速度…背景の移動する速度。[X軸, Y軸]
  1557.   #            単位は100フレームあたりに移動するピクセル数になります
  1558.   #            高速で移動させる場合は、1000単位の数値が目安です
  1559.   #
  1560.   # BA反転…バックアタック時に背景のX座標スクロールを逆にするならtrue 画像は反転しません
  1561.   #
  1562.   # 画像…背景画像を変更する場合、ファイル名を入れます。変更しない場合は""
  1563.   #       床背景はBattlebacks1フォルダ、壁背景はBattlebacks2フォルダから参照します
  1564.   #       変更する背景設定は、変更前のものを引き継ぎます
  1565.   #
  1566.   # 繋ぎ画像…背景スクロール時、背景変更を自然に見せるための繋ぎ画像ファイル名
  1567.   #           スクロール途中で背景変更が行われた場合、スクロールが終わってから変更が行われます
  1568.   #           性質上、斜めスクロールには対応していません
  1569.   #
  1570.   # 割込み…この背景が表示されている時に別の背景制御が割り込んできた場合、
  1571.   #         割込みを許可するならtrue(繋ぎ画像表示中はスクロールなしの背景だけが割込みます)
  1572.   #         割込みを許可しないならfalse(別の背景制御は保留され、この背景が消えた時に変更されます)
  1573.    
  1574.   #――プログラム名――      判別   スイッチ No.   スクロール速度   BA反転   画像       繋ぎ画像     割込み
  1575.   "遠景右移動"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  1576.   "海背景3に変更"   => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  1577.   "海背景4に変更"   => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  1578.   "宇宙に変更1"     => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  1579.   "宇宙に変更2"     => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  1580.   
  1581. #--------------------------------------------------------------------------
  1582. # ● 周期ピクチャ 周期的にタイル状のピクチャを操作します。風や巨大魔方陣などに
  1583. #--------------------------------------------------------------------------
  1584.   # スイッチ…実行合図となるゲームスイッチ番号
  1585.   # No.…操作するピクチャの番号。ピクチャは何枚も表示できます
  1586.   # 移動速度…100フレームあたりに移動するピクチャの速度。[X軸, Y軸] 0で背景スクロールと同期化
  1587.   # 期間…このプログラムを行う期間。単位は1フレーム。0にすると時間無制限でループ
  1588.   #
  1589.   # 透明操作…ピクチャの透明度操作。[開始透明度, 100フレームあたりに加算する透明度]
  1590.   #           透明度が255になると開始透明度まで戻り、それを繰り返します
  1591.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  1592.   # シェイク許可…シェイクアクションの揺れと連動するならtrue
  1593.   # BA反転…バックアタック時にピクチャのX座標移動を逆にするならtrue 画像は反転しません
  1594.   # ファイル名…ピクチャのファイル名。Picturesフォルダを参照します
  1595.    
  1596.   #――プログラム名――  判別   スイッチ  No.    移動速度   期間    透明操作   Z軸  シェイク許可 BA反転 ファイル名
  1597.   "風"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  1598.   "魔方陣"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  1599.   
  1600. #--------------------------------------------------------------------------
  1601. # ● 周期SE 周期的に効果音を鳴らします。雷鳴や潮騒などに
  1602. #--------------------------------------------------------------------------
  1603.   # スイッチ…実行合図となるゲームスイッチ番号
  1604.   # 周期…効果音を鳴らす周期。単位は1フレーム。この間隔で効果音が定期的に鳴ります
  1605.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1606.   #
  1607.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  1608.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  1609.   # 開始実行…プログラム実行直後に周期を待たず鳴らすならtrue
  1610.   # ファイル名…再生するファイル名。
  1611.    
  1612.   #――プログラム名――      判別   スイッチ 周期  ランダム幅  ピッチ 音量 開始実行 ファイル名
  1613.   "カモメ"         => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  1614.   "カモメ2"        => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  1615.   
  1616. #--------------------------------------------------------------------------
  1617. # ● 周期シェイク 周期的に画面を揺らします
  1618. #--------------------------------------------------------------------------
  1619.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1620.   # 周期…画面を揺らす周期。単位は1フレーム
  1621.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1622.   #
  1623.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れも大きくなります
  1624.   # 速度…揺れの速度。小さいほど早く揺れます
  1625.   # 時間…揺れの続く時間。揺れ幅は時間と共に少しずつ弱まっていきます
  1626.   # 開始実行…プログラム実行直後に周期を待たず揺らすならtrue
  1627.    
  1628.   #――プログラム名――     判別    スイッチ 周期 ランダム幅   方向   速度  時間 開始実行
  1629.   "船の揺れ"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  1630.   
  1631. #--------------------------------------------------------------------------
  1632. # ● 周期色調変更 周期的に画面の色調を変更します
  1633. #--------------------------------------------------------------------------
  1634.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1635.   # 周期…色調変更させる周期。単位は1フレーム
  1636.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1637.   #
  1638.   # 対象…色調変更の対象 [0=背景] [1=敵全] [2=味方全] [3=敵味方全] [4=全て]
  1639.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  1640.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  1641.   # 開始実行…プログラム実行直後に周期を待たず色調変更するならtrue
  1642.   
  1643.   #――プログラム名――       判別   スイッチ 周期 ランダム幅  対象     R,   G,   B, アルファ  時間 戻り  開始実行
  1644.   "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  1645.   "エマージェンシー" => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
  1646.    
  1647. }
  1648. #==============================================================================
  1649. # ■ カメラ設定
  1650. #------------------------------------------------------------------------------
  1651. #  アクションとは別にバトルシーンの各ポイントでカメラワークを行います
  1652. #  アクション名でカメラが動くため、名前は変えないようにしてください
  1653. #==============================================================================
  1654.   BATTLE_CAMERA = {
  1655. #--------------------------------------------------------------------------
  1656. # ● カメラワーク  画面のズームやスクロールを行います
  1657. #--------------------------------------------------------------------------
  1658.   # 対象…移動やズームの対象 [2=敵全] [3=味方全] [4=敵味方全] [6=画面]
  1659.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  1660.   # 時間…カメラワークにかける時間
  1661.   # ズーム…カメラのズーム率(%)。100でズームなし。
  1662.   
  1663.   #――アクション名――       判別    対象  調整座標   ズーム  時間
  1664.   "ターン開始前"   => ["camera",   6, [  40,   0],  95, 40],
  1665.   "ターン開始後"   => ["camera",   6, [   0,   0], 100, 40],
  1666.   "戦闘終了時"     => ["camera",   6, [ 100,   0], 100, 50],
  1667.   

  1668. }  
  1669. end

  1670. #==============================================================================
  1671. # ■ SideViewバトラー設定
  1672. #------------------------------------------------------------------------------
  1673. #  アクション設定で作ったアクションをバトラーに貼り付けたり
  1674. #  バトラーに関する設定を行います
  1675. #==============================================================================
  1676. class SideView
  1677.   #--------------------------------------------------------------------------
  1678.   # ● バトラーアニメ画像の横・縦セル数 = [ 横, 縦] アニメさせない場合は[1, 1]
  1679.   #--------------------------------------------------------------------------
  1680.   def max_pattern
  1681.     # バトラーIDで分岐
  1682.     case id
  1683.     when  1 # 1番のアクター
  1684.       return [ 3, 4]
  1685.     when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで指定します)
  1686.       return [ 1, 1]
  1687.     else # 上のID以外を一括で設定
  1688.       return [ 3, 4] if id > 0 # 全アクター(IDがプラス)
  1689.       return [ 1, 1] if id < 0 # 全エネミー(IDがマイナス)
  1690.     end
  1691.     # 以降の設定でID分岐させる場合はこの記述を参考にしてください
  1692.   end
  1693.   #--------------------------------------------------------------------------
  1694.   # ● 影画像ファイル名  画像はCharactersフォルダに入れてください falseで影なし
  1695.   #--------------------------------------------------------------------------
  1696.   def shadow
  1697.     return "shadow01" if id > 0 # 全アクター
  1698.     return false      if id < 0 # 全エネミー
  1699.   end
  1700.   #--------------------------------------------------------------------------
  1701.   # ● バトラー画像反転設定 初期状態でバトラー画像を反転させるならtrue
  1702.   #--------------------------------------------------------------------------
  1703.   def graphic_mirror_flag
  1704.     return false if id > 0 # 全アクター
  1705.     return true  if id < 0 # 全エネミー
  1706.   end
  1707.   #--------------------------------------------------------------------------
  1708.   # ● バトラー画像参照先固定 バトラーアニメ設定のインデックス参照を必ず""にするならtrue
  1709.   #--------------------------------------------------------------------------
  1710.   def graphic_fix
  1711.     return false if id > 0 # 全アクター
  1712.     return true  if id < 0 # 全エネミー
  1713.   end
  1714.   #--------------------------------------------------------------------------
  1715.   # ● 通常待機
  1716.   #--------------------------------------------------------------------------
  1717.   def normal
  1718.     return "通常待機"   if id > 0 # 全アクター
  1719.     return "待機固定WT" if id < 0 # 全エネミー
  1720.     # フルアクションではなくアクションだけを貼り付けることもできます
  1721.   end
  1722.   #--------------------------------------------------------------------------
  1723.   # ● ピンチ待機  HPが1/4以下の状態で行う待機アクション
  1724.   #--------------------------------------------------------------------------
  1725.   def pinch
  1726.     return "ピンチ待機" if id > 0 # 全アクター
  1727.   end
  1728.   #--------------------------------------------------------------------------
  1729.   # ● ステートアクション  複数重なった場合、表示優先度の高いステートが優先されます
  1730.   #--------------------------------------------------------------------------
  1731.   def state(state_id)
  1732.     # ステートIDで分岐
  1733.     case state_id
  1734.     when 1
  1735.       return "戦闘不能"     if id > 0 # 全アクター
  1736.       return "敵コラプス"   if id < 0 # 全エネミー
  1737.     when 2
  1738.       return "毒待機"
  1739.     when 6
  1740.       return "睡眠待機"
  1741.     when 3,4,5,7,8
  1742.       return "汎用状態異常待機"
  1743.     when 9
  1744.       return "防御待機"
  1745.     end
  1746.   end
  1747.   #--------------------------------------------------------------------------
  1748.   # ● 戦闘開始アクション
  1749.   #--------------------------------------------------------------------------
  1750.   def first_action
  1751.     return "戦闘開始味方" if id > 0 # 全アクター
  1752.     return "待機固定WT"   if id < 0 # 全エネミー
  1753.   end
  1754.   #--------------------------------------------------------------------------
  1755.   # ● 勝利アクション
  1756.   #--------------------------------------------------------------------------
  1757.   def win
  1758.     case id
  1759.     when  2,7,10 # 2・7・10番のアクター
  1760.       return "勝利ポーズバク転"
  1761.     else # 上記以外
  1762.       return "勝利ポーズ振り"
  1763.     end
  1764.   end
  1765.   #--------------------------------------------------------------------------
  1766.   # ● 戦闘退場アクション  パーティの入れ替えが行われた際の退場アクション
  1767.   #--------------------------------------------------------------------------
  1768.   def remove_action
  1769.     return "味方退場"
  1770.   end
  1771.   #--------------------------------------------------------------------------
  1772.   # ● 逃走アクション
  1773.   #--------------------------------------------------------------------------
  1774.   def escape
  1775.     return "逃走"   if id > 0 # 全アクター
  1776.     return "敵逃走" if id < 0 # 全エネミー
  1777.   end
  1778.   #--------------------------------------------------------------------------
  1779.   # ● 逃走失敗アクション
  1780.   #--------------------------------------------------------------------------
  1781.   def escape_ng
  1782.     return "逃走失敗"
  1783.   end
  1784.   #--------------------------------------------------------------------------
  1785.   # ● コマンド入力前動作
  1786.   #--------------------------------------------------------------------------
  1787.   def command_b
  1788.     return "コマンド入力"
  1789.   end
  1790.   #--------------------------------------------------------------------------
  1791.   # ● コマンド入力後動作
  1792.   #--------------------------------------------------------------------------
  1793.   def command_a
  1794.     # 選択したスキルIDで分岐
  1795.     case skill_id
  1796.     when 2
  1797.       return "コマンド後防御"
  1798.     end
  1799.     # 選択したスキルタイプで指定
  1800.     case skill_type
  1801.     when 1 # 特技
  1802.       return "コマンド後特技"
  1803.     when 2 # 魔法
  1804.       return "コマンド後魔法"
  1805.     end
  1806.     # 上の指定以外
  1807.     return "コマンド入力後"
  1808.   end
  1809.   #--------------------------------------------------------------------------
  1810.   # ● 被ダメージアクション 
  1811.   #--------------------------------------------------------------------------
  1812.   def damage(attacker)
  1813.     # 受けた攻撃がクリティカルの場合
  1814.     if critical?
  1815.       return "被ダメージ大"
  1816.     # 回復の場合
  1817.     elsif recovery?
  1818.       # アクションを取らせたくない時はreturnのみを記述します
  1819.       return
  1820.     end
  1821.     # 受けたスキルIDで分岐
  1822.     case damage_skill_id
  1823.     when 1 # スキル1番の場合
  1824.       return "被ダメージ"
  1825.     when 136 # 特定のスキルにダメージアクションを取らせたくない時はここでreturnのみを記述します
  1826.       return
  1827.     end
  1828.     # 受けたアイテムIDで指定(回復の場合は既にアクションが決定されています)
  1829.     case damage_item_id
  1830.     when 1 # アイテム1番の場合
  1831.       return
  1832.     else
  1833.       # 上のアイテムID以外
  1834.       if damage_item_id != 0
  1835.         return
  1836.       end  
  1837.     end
  1838.     # ダメージが0の場合 (強化・弱体化魔法や防御、エネミーの逃走など)
  1839.     if damage_zero?
  1840.       return
  1841.     end
  1842.     # 上の設定に当てはまらない場合
  1843.     return "被ダメージ"
  1844.   end
  1845.   #--------------------------------------------------------------------------
  1846.   # ● 回避動作  被ダメージアクションと同じ分岐が可能です
  1847.   #--------------------------------------------------------------------------
  1848.   def evasion(attacker)
  1849.     return "盾ガード" if shield? # 盾を装備している場合
  1850.     return "回避"
  1851.   end
  1852.   #--------------------------------------------------------------------------
  1853.   # ● 相手の攻撃ミス時の動作  被ダメージアクションと同じ分岐が可能です
  1854.   #--------------------------------------------------------------------------
  1855.   def miss(attacker)
  1856.     return "盾ガード" if shield? # 盾を装備している場合
  1857.     return "回避"
  1858.   end
  1859.   #--------------------------------------------------------------------------
  1860.   # ● 武器アクション  通常攻撃のアクションを装備武器で指定します
  1861.   #                    エネミーは下のエネミー武器設定で持たせることができます
  1862.   #--------------------------------------------------------------------------
  1863.   def weapon_action
  1864.     # 武器IDで指定
  1865.     case weapon_id
  1866.     when 0 # 武器0番の場合(素手)
  1867.       return "通常攻撃"
  1868.     when 1 # 武器1番の場合
  1869.       return "斬り攻撃"
  1870.     end
  1871.     # 武器タイプで指定
  1872.     case weapon_type
  1873.     when 1 # 武器タイプ1番の場合
  1874.       return "斬り攻撃"
  1875.     when 4,5,7,8,9 # 複数まとめて指定する場合
  1876.       return "斬り攻撃"
  1877.     when 2
  1878.       return "拳攻撃"
  1879.     when 3
  1880.       return "突き攻撃"
  1881.     when 6
  1882.       return "弓攻撃"
  1883.     end
  1884.   end
  1885.   #--------------------------------------------------------------------------
  1886.   # ● エネミー右手武器 エネミーにも装備武器をID指定します
  1887.   #--------------------------------------------------------------------------
  1888.   def enemy_weapon1_id
  1889.     case id
  1890.     when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで分岐させます)
  1891.       return 0 # 武器IDを指定。0番は素手扱いです
  1892.     else
  1893.       return 0
  1894.     end
  1895.   end
  1896.   #--------------------------------------------------------------------------
  1897.   # ● エネミー左手武器 エネミーにも二刀装備武器をID指定します
  1898.   #--------------------------------------------------------------------------
  1899.   def enemy_weapon2_id
  1900.     return 0
  1901.   end
  1902.   #--------------------------------------------------------------------------
  1903.   # ● エネミー盾 エネミーにも盾をID指定します 左手武器より優先されます
  1904.   #--------------------------------------------------------------------------
  1905.   def enemy_shield_id
  1906.     return 0
  1907.   end
  1908.   #--------------------------------------------------------------------------
  1909.   # ● 武器グラフィック指定 
  1910.   #--------------------------------------------------------------------------
  1911.   # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択した際の
  1912.   # 参照先の画像をここで指定します
  1913.   # return "001-Weapon01" ←対応する武器グラフィックのファイル名を入れてください
  1914.   #                         武器グラフィックはCharactersフォルダに入れてください
  1915.   # 特定の武器を非表示にしたい場合は空の画像を用意して、それを指定します
  1916.   def weapon_graphic(weapon_id, weapon_type)
  1917.     # 武器IDで指定
  1918.     case weapon_id
  1919.     when 1 # 武器1番の画像ファイル名
  1920.       return ""
  1921.     end
  1922.     # 武器タイプで指定
  1923.     case weapon_type
  1924.     when 6 # 武器タイプ6番の画像ファイル名
  1925.       return "bow01"
  1926.     end
  1927.   end
  1928.   #--------------------------------------------------------------------------
  1929.   # ● 盾グラフィック指定 
  1930.   #--------------------------------------------------------------------------
  1931.   # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択し、さらに
  1932.   # 武器アクションの逆手設定をtrueにした場合の参照先の盾画像をここで指定します
  1933.   #
  1934.   # return "001-Shield01" ←対応する盾グラフィックのファイル名を入れてください
  1935.   #                         盾グラフィックはCharactersフォルダに入れてください
  1936.   def shield_graphic(weapon_id, shield_type)
  1937.     # 防具IDで指定
  1938.     case shield_id
  1939.     when 41 # 防具41番(バックラー)の画像ファイル名
  1940.       return ""
  1941.     end
  1942.     # 防具タイプで指定
  1943.     case shield_type
  1944.     when 5 # 防具タイプ5番(小型盾)の画像ファイル名
  1945.       return ""
  1946.     end
  1947.   end
  1948.   
  1949.   #--------------------------------------------------------------------------
  1950.   # ● スキルアクション
  1951.   #--------------------------------------------------------------------------
  1952.   def skill_action
  1953.     # スキルIDで指定
  1954.     case skill_id
  1955.     when 1 # スキル1番は通常攻撃なので、上の武器アクションを実行します
  1956.       return weapon_action
  1957.     when 2 # スキル2番は防御
  1958.       return "防御"
  1959.     when 3,4,5 # スキル3/4/5番は連続攻撃
  1960.       return weapon_action
  1961.     when 6 # スキル6番はエネミー逃走
  1962.       return escape
  1963.     when 7 # スキル7番は様子を見る
  1964.       return "様子見"
  1965.     when 128
  1966.       return "水鉄砲"
  1967.     when 129
  1968.       return "武器投げ"
  1969.     when 130
  1970.       return "5回攻撃"
  1971.     when 131
  1972.       return "カットイン攻撃"
  1973.     when 132
  1974.       return "ムービー攻撃"
  1975.     when 133
  1976.       return "オオカミ変身"
  1977.     when 134
  1978.       return "スキル派生"
  1979.     when 135
  1980.       return "暗転攻撃"
  1981.     when 136
  1982.       return "空中攻撃"
  1983.     end
  1984.     # スキル名で指定(データベースでIDを移動させても大丈夫なのでお勧めです)
  1985.     case skill_name
  1986.     when "背景変更サンプル"
  1987.       return "背景変更攻撃"
  1988.     when "ピクチャ攻撃サンプル"
  1989.       return "ピクチャ攻撃"
  1990.     end
  1991.     # スキルタイプで指定
  1992.     case skill_type
  1993.     when 1 # 特技
  1994.       return "汎用スキル"
  1995.     when 2 # 魔法
  1996.       return "汎用魔法"
  1997.     end
  1998.     # 上記以外
  1999.     return "汎用スキル"
  2000.   end
  2001.   #--------------------------------------------------------------------------
  2002.   # ● アイテムアクション
  2003.   #--------------------------------------------------------------------------
  2004.   def item_action
  2005.     case item_id # アイテムIDで指定
  2006.     when 1
  2007.       return "アイテム使用"
  2008.     else
  2009.       return "アイテム使用"
  2010.     end
  2011.   end
  2012.   #--------------------------------------------------------------------------
  2013.   # ● カウンタースキルID カウンター時のスキルIDを指定します
  2014.   #--------------------------------------------------------------------------
  2015.   # ※データベースで設定された複数回攻撃は反映されません
  2016.   def counter_skill_id
  2017.     return 1
  2018.   end
  2019.   #--------------------------------------------------------------------------
  2020.   # ● 魔法反射アニメID 魔法反射時のアニメIDを指定します
  2021.   #--------------------------------------------------------------------------
  2022.   def reflection_anime_id
  2023.     return 118
  2024.   end
  2025.   #--------------------------------------------------------------------------
  2026.   # ● 身代わり開始アクション
  2027.   #--------------------------------------------------------------------------
  2028.   def substitute_start_action
  2029.     return "身代わり開始"
  2030.   end
  2031.   #--------------------------------------------------------------------------
  2032.   # ● 身代わり終了アクション
  2033.   #--------------------------------------------------------------------------
  2034.   def substitute_end_action
  2035.     return "身代わり終了"
  2036.   end
  2037.   #--------------------------------------------------------------------------
  2038.   # ● 身代わりされた側のアクション開始
  2039.   #--------------------------------------------------------------------------
  2040.   def substitute_receiver_start_action
  2041.     return "被身代わり開始"
  2042.   end
  2043.   #--------------------------------------------------------------------------
  2044.   # ● 身代わりされた側のアクション終了
  2045.   #--------------------------------------------------------------------------
  2046.   def substitute_receiver_end_action
  2047.     return "被身代わり終了"
  2048.   end
  2049.   #--------------------------------------------------------------------------
  2050.   # ● エネミーのレベル  条件分岐などに利用するためのもので、パラメータは反映されません
  2051.   #--------------------------------------------------------------------------
  2052.   def level
  2053.     case id
  2054.     when -1 # 1番のエネミー
  2055.       return 0
  2056.     end
  2057.     return 0
  2058.   end
  2059.   
  2060. end

  2061. #==============================================================================
  2062. # ■ Sideview
  2063. #------------------------------------------------------------------------------
  2064. #  サイドビューバトラーを管理するクラスです。
  2065. #==============================================================================
  2066. class SideView
  2067.   #--------------------------------------------------------------------------
  2068.   # ● 公開インスタンス変数 
  2069.   #--------------------------------------------------------------------------
  2070.   attr_accessor   :x                    # 画面X座標
  2071.   attr_accessor   :y                    # 画面Y座標
  2072.   attr_accessor   :z                    # 画面Z座標
  2073.   attr_accessor   :h                    # 高さ座標
  2074.   attr_accessor   :j                    # ジャンプ座標
  2075.   attr_accessor   :c                    # カーブ座標
  2076.   attr_accessor   :ox                   # 横原点
  2077.   attr_accessor   :oy                   # 縦原点
  2078.   attr_accessor   :oy_adjust            # 縦原点補正
  2079.   attr_accessor   :angle                # 回転角度
  2080.   attr_accessor   :zoom_x               # 横の拡大率
  2081.   attr_accessor   :zoom_y               # 縦の拡大率
  2082.   attr_accessor   :pattern_w            # セル横位置(矩形内)
  2083.   attr_accessor   :pattern_h            # セル縦位置(矩形内)
  2084.   attr_accessor   :sx                   # セル横位置(画像全体)
  2085.   attr_accessor   :sy                   # セル縦位置(画像全体)
  2086.   attr_accessor   :pattern_type         # セル更新タイプ
  2087.   attr_accessor   :pattern_time         # セル更新間隔
  2088.   attr_accessor   :graphic_name         # バトラー画像ファイル名
  2089.   attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  2090.   attr_accessor   :graphic_index        # バトラー画像インデックス
  2091.   attr_accessor   :cw                   # セル横矩形
  2092.   attr_accessor   :ch                   # セル縦矩形
  2093.   attr_accessor   :shadow_visible       # 影表示
  2094.   attr_accessor   :weapon_visible       # 武器表示
  2095.   
  2096.   attr_accessor   :wait                 # 次の動作待ち時間
  2097.   attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  2098.   attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  2099.   attr_accessor   :force_action         # 強制アクション
  2100.   attr_accessor   :target_battler       # ターゲットバトラー情報
  2101.   attr_accessor   :second_targets       # セカンドターゲット情報
  2102.   attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  2103.   attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  2104.   attr_accessor   :effect_data          # エフェクトデータ
  2105.   attr_accessor   :anime_id             # アニメID配列
  2106.   attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  2107.   attr_accessor   :mirror               # 反転フラグ
  2108.   attr_accessor   :opacity              # 透明度
  2109.   attr_accessor   :opacity_data         # 透明度操作情報
  2110.   attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  2111.   attr_accessor   :m_a_data             # アニメ飛ばし情報
  2112.   attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  2113.   attr_accessor   :action_end           # バトルシーンでの行動終了
  2114.   attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  2115.   attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  2116.   attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  2117.   attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  2118.   attr_accessor   :anime_plus_z         # 戦闘アニメZ座標補正
  2119.   attr_accessor   :derivation_skill_id  # スキル派生ID
  2120.   attr_accessor   :immortal             # 不死身フラグ
  2121.   attr_accessor   :mirage               # 残像データ
  2122.   attr_accessor   :balloon_data         # ふきだしデータ
  2123.   attr_accessor   :timing               # 別バトラーからのタイミングデータ
  2124.   attr_accessor   :timing_targets       # タイミングデータを渡す別バトラー
  2125.   attr_accessor   :color_set            # 色調変更データ
  2126.   attr_accessor   :color                # 色調データ
  2127.   attr_accessor   :change_up            # 画像変更フラグ
  2128.   attr_accessor   :hit                  # 被攻撃回数
  2129.   attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  2130.   attr_accessor   :counter_id           # カウンター時のスキルID
  2131.   attr_accessor   :reflection_id        # 魔法反射時のアニメID
  2132.   attr_accessor   :result_damage        # ターン終了時のHP変動データ
  2133.   attr_accessor   :active               # 行動権
  2134.    
  2135.   attr_accessor   :base_x               # 初期位置 X座標
  2136.   attr_accessor   :base_y               # 初期位置 Y座標
  2137.   attr_accessor   :base_h               # 初期位置 高さ座標
  2138.   attr_accessor   :max_pattern_w        # セルの横分割数
  2139.   attr_accessor   :max_pattern_h        # セルの縦分割数
  2140.   
  2141.   attr_reader     :collapse             # コラプスフラグ
  2142.   attr_reader     :picture              # ピクチャ表示フラグ
  2143.   #--------------------------------------------------------------------------
  2144.   # ● オブジェクト初期化
  2145.   #--------------------------------------------------------------------------
  2146.   def initialize(battler)
  2147.     @battler = battler
  2148.     reset
  2149.   end
  2150.   #--------------------------------------------------------------------------
  2151.   # ● 初期化
  2152.   #--------------------------------------------------------------------------
  2153.   def reset
  2154.     @x = 0
  2155.     @y = 0
  2156.     @z = 0
  2157.     @h = 0
  2158.     @j = 0
  2159.     @c = 0
  2160.     @jump = []
  2161.     @curve = []
  2162.     @ox = 0
  2163.     @oy = 0
  2164.     @oy_adjust = 0
  2165.     @z_plus = 0
  2166.     @move_time = 0
  2167.     @angle = 0
  2168.     @angle_time = 0
  2169.     @zoom_x = 1
  2170.     @zoom_y = 1
  2171.     @zoom_time = 0
  2172.     @pattern_w = 0
  2173.     @pattern_h = 0
  2174.     @sx = 0
  2175.     @sy = 0
  2176.     @pattern_type = 0
  2177.     @pattern_time = 0
  2178.     @pattern_rest_time = 0
  2179.     @graphic_name = ""
  2180.     @graphic_file_index = ""
  2181.     @graphic_index = 0
  2182.     @cw = 0
  2183.     @ch = 0
  2184.     @shadow_visible = false
  2185.     @weapon_visible = true
  2186.    
  2187.     @wait = 0
  2188.     @weapon_index = []
  2189.     @weapon_end = true
  2190.     @full_action = []
  2191.     @action = []
  2192.     @force_action = ""
  2193.     @target_battler = []
  2194.     @second_targets = []
  2195.     @individual_targets = []
  2196.     @m_a_targets = []
  2197.     @effect_data = []
  2198.     @anime_id = []
  2199.     @anime_move_id = []
  2200.     @opacity = 255
  2201.     @opacity_data = []
  2202.     @set_damage = false
  2203.     @m_a_data = []
  2204.     @m_a_starter = []
  2205.     @action_end = false
  2206.     @damage_anime_data = []
  2207.     @anime_no_mirror = false
  2208.     @anime_horming = false
  2209.     @anime_camera_zoom = false
  2210.     @anime_plus_z = true
  2211.     @derivation_skill_id = 0
  2212.     @immortal = false
  2213.     @mirage = []
  2214.     @play_data = []
  2215.     @balloon_data = []
  2216.     @picture = false
  2217.     @timing = []
  2218.     @timing_targets = []
  2219.     @color_set = []
  2220.     @color = []
  2221.     @change_up = false
  2222.     @non_motion = false
  2223.     @graphics_change = false
  2224.     @hit = 0
  2225.     @add_state = []
  2226.     @collapse = false
  2227.     @counter_id = 0
  2228.     @reflection_id = 0
  2229.     @result_damage = [0,0]
  2230.     @active = false
  2231.    
  2232.     @base_x = 0
  2233.     @base_y = 0
  2234.     @base_z = 0
  2235.     @base_h = 0
  2236.     @max_pattern_w = 0
  2237.     @max_pattern_h = 0
  2238.     @pattern_kind = 0
  2239.     @pattern_count = 0
  2240.     @move_time = 0
  2241.     @mirror = false
  2242.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  2243.     @pre_change_data = nil
  2244.   end  
  2245.   #--------------------------------------------------------------------------
  2246.   # ● セットアップ
  2247.   #--------------------------------------------------------------------------
  2248.   def setup(bitmap_width, bitmap_height, first_action_flag)
  2249.     reset if first_action_flag
  2250.     set_data
  2251.     set_base_position if !@graphics_change
  2252.     set_graphics(bitmap_width, bitmap_height)
  2253.     set_target
  2254.     setup_graphics_change if @graphics_change
  2255.     start_action(first_action) if first_action_flag && @battler.movable?
  2256.     if first_action_flag && [email protected]?
  2257.       stand_by_action
  2258.       @action_data = N03::ACTION[@action]
  2259.       next_action
  2260.     end  
  2261.   end  
  2262.   #--------------------------------------------------------------------------
  2263.   # ● 画像変更用のセットアップ
  2264.   #--------------------------------------------------------------------------
  2265.   def setup_graphics_change
  2266.     @graphics_change = false
  2267.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  2268.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  2269.   end  
  2270.   #--------------------------------------------------------------------------
  2271.   # ● バトラーデータ取得
  2272.   #--------------------------------------------------------------------------
  2273.   def set_data
  2274.     return if @battler == nil
  2275.     if @battler.actor?
  2276.       @graphic_name = @battler.character_name
  2277.       @graphic_index = @battler.character_index
  2278.     else
  2279.       @graphic_name = @battler.battler_name
  2280.       @graphic_index = 0
  2281.     end
  2282.     @max_pattern_w = max_pattern[0]
  2283.     @max_pattern_h = max_pattern[1]
  2284.   end
  2285.   #--------------------------------------------------------------------------
  2286.   # ● グラフィックデータ取得
  2287.   #--------------------------------------------------------------------------
  2288.   def set_graphics(bitmap_width, bitmap_height)
  2289.     sign = @graphic_name[/^[\!\$]./]
  2290.     if sign && sign.include?(')
  2291.       @cw = bitmap_width / @max_pattern_w
  2292.       @ch = bitmap_height / @max_pattern_h
  2293.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  2294.       @cw = bitmap_width
  2295.       @ch = bitmap_height
  2296.     else
  2297.       @cw = bitmap_width / (@max_pattern_w * 4)
  2298.       @ch = bitmap_height / (@max_pattern_h * 2)
  2299.     end
  2300.     @ox = @cw / 2
  2301.     @oy = @ch
  2302.   end
  2303.   #--------------------------------------------------------------------------
  2304.   # ● ベース座標をセット data = [X軸, Y軸, H軸]  moment_set…瞬間配置
  2305.   #--------------------------------------------------------------------------
  2306.   def set_base_position(moment_set = true)
  2307.     mirroring_reset
  2308.     if @battler.actor?
  2309.       data = N03::ACTOR_POSITION[@battler.index].dup
  2310.       @base_x = data[0] * 100 if !@mirror
  2311.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  2312.     else
  2313.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  2314.       @base_x = data[0] * 100 if !$sv_camera.mirror
  2315.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  2316.     end
  2317.     @base_y = data[1] * 100
  2318.     @base_h = data[2] * 100
  2319.     @base_z = @y
  2320.     return if !moment_set
  2321.     @x = @base_x
  2322.     @y = @base_y
  2323.     @z = @base_z
  2324.   end
  2325.   #--------------------------------------------------------------------------
  2326.   # ● ターゲットをセット
  2327.   #--------------------------------------------------------------------------
  2328.   def set_target(target = nil)
  2329.     @target_battler = target
  2330.     @target_battler = [@battler] if target == nil
  2331.     @second_targets = @target_battler
  2332.   end
  2333.   #--------------------------------------------------------------------------
  2334.   # ● アクション開始
  2335.   #--------------------------------------------------------------------------
  2336.   def start_action(kind = nil)
  2337.     # ウェイト中の場合キャンセル
  2338.     return @wait -= 1 if @wait > 0 && kind == nil
  2339.     action_setup if kind != nil
  2340.     set_action(kind)
  2341.     @action = kind if @action == nil
  2342.     # 行動配列が無い場合は行動終了処理へ移行
  2343.     action_terminate if @action == nil
  2344.     # 次のアクション決定
  2345.     @action_data = N03::ACTION[@action]
  2346.     next_action
  2347.   end
  2348.   #--------------------------------------------------------------------------
  2349.   # ● 行動パラメータの初期化
  2350.   #--------------------------------------------------------------------------
  2351.   def action_setup
  2352.     @set_damage = false
  2353.     @action_end = false
  2354.     @balloon_data = []
  2355.     @loop_act = []
  2356.     angle_reset
  2357.     zoom_reset
  2358.     opacity_reset
  2359.     @curve = []
  2360.     @c = 0
  2361.     convert_jump
  2362.   end  
  2363.   #--------------------------------------------------------------------------
  2364.   # ● 行動終了処理
  2365.   #--------------------------------------------------------------------------
  2366.   def action_terminate
  2367.     @mirage = [] if @mirage_end
  2368.     mirroring_reset
  2369.     @picture = false
  2370.     @individual_targets = []
  2371.     action_setup
  2372.     # 待機アクションへ移行
  2373.     stand_by_action if !@non_motion
  2374.     # 戦闘行動のアクティブ権を終了
  2375.     next_battler
  2376.   end  
  2377.   #--------------------------------------------------------------------------
  2378.   # ● 新しいアクション内容の決定
  2379.   #--------------------------------------------------------------------------
  2380.   def set_action(kind = nil)
  2381.     full_act = N03::FULLACTION[kind]
  2382.     @full_action = full_act.dup if full_act != nil
  2383.     @action = @full_action.shift
  2384.     # 参照したアクションがフルアクションであれば全体のアクションを統合
  2385.     full_act2 = N03::FULLACTION[@action]
  2386.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  2387.   end
  2388.   #--------------------------------------------------------------------------
  2389.   # ● 次のアクションへ
  2390.   #--------------------------------------------------------------------------
  2391.   def next_action
  2392.     @wait = 0
  2393.     # ショートカット確認
  2394.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  2395.     # ウエイト設定
  2396.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  2397.     @wait = rand(@wait.abs + 1) if @wait < 0
  2398.     # アクション開始
  2399.     action_play
  2400.   end
  2401.   #--------------------------------------------------------------------------
  2402.   # ● 待機アクションへ移行
  2403.   #--------------------------------------------------------------------------
  2404.   def stand_by_action
  2405.     # 通常待機に
  2406.     stand_by_act = normal
  2407.     # HPが1/4でピンチアクションに
  2408.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  2409.     # ステートチェック
  2410.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  2411.     set_action(stand_by_act)
  2412.     @action = stand_by_act if @action == nil
  2413.   end
  2414.   #--------------------------------------------------------------------------
  2415.   # ● 強制アクション開始
  2416.   #--------------------------------------------------------------------------
  2417.   def start_force_action
  2418.     return if @active
  2419.     start_action(@force_action)
  2420.     @force_action = ""
  2421.   end  
  2422.   #--------------------------------------------------------------------------
  2423.   # ● アクション追加
  2424.   #--------------------------------------------------------------------------
  2425.   def add_action(kind)
  2426.     @full_action.push(kind)
  2427.   end  
  2428.   #--------------------------------------------------------------------------
  2429.   # ● アクションの挿入
  2430.   #--------------------------------------------------------------------------
  2431.   def unshift_action(kind)
  2432.     @full_action.unshift(kind)
  2433.   end  
  2434.   #--------------------------------------------------------------------------
  2435.   # ● フレーム更新
  2436.   #--------------------------------------------------------------------------
  2437.   def update
  2438.     # アクション開始
  2439.     start_action
  2440.     # 強制アクション開始
  2441.     start_force_action if @force_action != ""
  2442.     # アニメパターン更新
  2443.     update_pattern
  2444.     # 移動更新
  2445.     update_move
  2446.     # 回転更新
  2447.     update_angle if @angle_time != 0
  2448.     # 拡大縮小更新
  2449.     update_zoom if @zoom_time != 0
  2450.     # 透明度更新
  2451.     update_opacity if @opacity_data != []
  2452.   end
  2453.   #--------------------------------------------------------------------------
  2454.   # ● アニメパターン更新
  2455.   #--------------------------------------------------------------------------
  2456.   def update_pattern
  2457.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  2458.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  2459.     @pattern_rest_time = @pattern_time
  2460.     # 再生開始・終了セル位置を取得
  2461.     if @pattern_kind > 0 # 通常再生中
  2462.       @pattern_start = 0
  2463.       @pattern_end = @max_pattern_w - 1
  2464.     elsif @pattern_kind < 0 # 逆転再生中
  2465.       @pattern_start = @max_pattern_w - 1
  2466.       @pattern_end = 0
  2467.     end
  2468.     # 片道の再生が終了
  2469.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  2470.     # ループ処理
  2471.     case @pattern_type.abs
  2472.     when  1,3 # 片道
  2473.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  2474.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  2475.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  2476.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  2477.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  2478.       @pattern_count = 0
  2479.     when  2,4 # 往復
  2480.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  2481.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  2482.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  2483.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  2484.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  2485.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  2486.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  2487.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  2488.       @pattern_count = 0 if @pattern_count == 2
  2489.     end
  2490.     # セル更新
  2491.     @pattern_w += 1 * @pattern_kind
  2492.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  2493.   end
  2494.   #--------------------------------------------------------------------------
  2495.   # ● 移動の更新
  2496.   #--------------------------------------------------------------------------
  2497.   def update_move
  2498.     @z = @y / 100 + @z_plus
  2499.     return if @move_time == 0
  2500.     target_position_set if @horming_move
  2501.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  2502.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  2503.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  2504.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  2505.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  2506.     @move_time -= 1
  2507.     convert_jump if @move_time == 0
  2508.   end
  2509.   #--------------------------------------------------------------------------
  2510.   # ● 移動目標の更新
  2511.   #--------------------------------------------------------------------------
  2512.   def target_position_set
  2513.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  2514.     @target_x = target_position[0] + @move_x
  2515.     @target_y = target_position[1] + @move_y
  2516.     @target_h = target_position[2] + @move_h if @move_h != nil
  2517.   end  
  2518.   #--------------------------------------------------------------------------
  2519.   # ● 回転更新
  2520.   #--------------------------------------------------------------------------
  2521.   def update_angle
  2522.     @angle += @angling
  2523.     @angle_time -= 1
  2524.     return if @angle_time != 0
  2525.     return angle_reset if @angle_data[4] == 0
  2526.     angling(@angle_data) if @angle_data[4] == 2
  2527.   end  
  2528.   #--------------------------------------------------------------------------
  2529.   # ● 拡大縮小更新
  2530.   #--------------------------------------------------------------------------
  2531.   def update_zoom
  2532.     @zoom_x += @zooming_x
  2533.     @zoom_y += @zooming_y
  2534.     @zoom_time -= 1
  2535.     return if @zoom_time != 0
  2536.     return zoom_reset if @zoom_data[4] == 0
  2537.     zooming(@zoom_data) if @zoom_data[4] == 2
  2538.   end
  2539.   #--------------------------------------------------------------------------
  2540.   # ● 透明度更新
  2541.   #--------------------------------------------------------------------------
  2542.   def update_opacity
  2543.     @opacity += @opacity_data[2]
  2544.     @opacity_data[0] -= 1
  2545.     return if @opacity_data[0] != 0
  2546.     return if !@opacity_data[5]
  2547.     @opacity_data[2] *= -1
  2548.     @opacity_data[0] = @opacity_data[1]
  2549.   end
  2550.   #--------------------------------------------------------------------------
  2551.   # ● アクション実行
  2552.   #--------------------------------------------------------------------------
  2553.   def action_play
  2554.     return if @action_data == nil
  2555.     action = @action_data[0]
  2556.     # バトラー反転の場合
  2557.     return mirroring                    if action == "mirror"
  2558.     # 残像の場合
  2559.     return mirage_set                   if action == "mirage"
  2560.     # 回転の場合  
  2561.     return angling                      if action == "angle"
  2562.     # 拡大縮小の場合  
  2563.     return zooming                      if action == "zoom"
  2564.     # 透明度操作の場合  
  2565.     return set_opacity                  if action == "opacity"
  2566.     # バトラーアニメの場合
  2567.     return battler_anime                if action == "motion"
  2568.     # 移動の場合
  2569.     return move                         if action == "move"
  2570.     # 武器アニメの場合
  2571.     return weapon_anime([@action_data]) if action == "wp"
  2572.     # アニメ飛ばしの場合
  2573.     return move_anime                   if action == "m_a"
  2574.     # 戦闘シーン通信の場合(コラプス)
  2575.     return set_play_data                if action == "collapse" or action == "no_collapse"
  2576.     # データベース戦闘アニメ表示の場合  
  2577.     return battle_anime                 if action == "anime"
  2578.     # カメラワークの場合
  2579.     return camera                       if action == "camera"
  2580.     # 画面のシェイクの場合
  2581.     return shake                        if action == "shake"
  2582.     # 画面色調変更の場合
  2583.     return color_effect                 if action == "color"
  2584.     # トランジションの場合
  2585.     return transition                   if action == "ts"
  2586.     # ふきだしアニメ表示の場合  
  2587.     return balloon_anime                if action == "balloon"
  2588.     # ピクチャ表示の場合
  2589.     return picture_set                  if action == "pic"
  2590.     # ステート操作の場合
  2591.     return state_set                    if action == "sta"
  2592.     # FPS変更の場合
  2593.     return fps                          if action == "fps"
  2594.     # バトラー画像変更の場合  
  2595.     return graphics_change              if action == "change"
  2596.     # スキル派生の場合  
  2597.     return derivating_skill             if action == "der"
  2598.     # BGM/BGS/SE演奏の場合  
  2599.     return sound                        if action == "sound"
  2600.     # ムービー再生の場合  
  2601.     return movie                        if action == "movie"
  2602.     # ゲームスイッチ操作の場合  
  2603.     return switches                     if action == "switch"
  2604.     # ゲーム変数操作の場合  
  2605.     return variable                     if action == "variable"
  2606.     # 条件分岐(ゲームスイッチ)の場合
  2607.     return nece_1                       if action == "n_1"
  2608.     # 条件分岐(ゲーム変数)の場合
  2609.     return nece_2                       if action == "n_2"
  2610.     # 条件分岐(ステート)の場合
  2611.     return nece_3                       if action == "n_3"
  2612.     # 条件分岐(スキル)の場合
  2613.     return nece_4                       if action == "n_4"
  2614.     # 条件分岐(パラメータ)の場合
  2615.     return nece_5                       if action == "n_5"
  2616.     # 条件分岐(装備)の場合
  2617.     return nece_6                       if action == "n_6"
  2618.     # 条件分岐(スクリプト)の場合
  2619.     return nece_7                       if action == "n_7"
  2620.     # セカンドターゲット操作の場合  
  2621.     return second_targets_set           if action == "s_t"
  2622.     # 強制戦闘終了の場合  
  2623.     return BattleManager.process_abort  if action == "battle_end"
  2624.     # 画面固定の場合  
  2625.     return Graphics.freeze              if action == "graphics_freeze"
  2626.     # ダメージアニメの場合  
  2627.     return damage_anime                 if action == "damage_anime"
  2628.     # 武器消去の場合  
  2629.     return @weapon_visible = false      if action == "weapon_off"
  2630.     # 武器消去解除の場合  
  2631.     return @weapon_visible = true       if action == "weapon_on"
  2632.     # 待機キャンセルの場合
  2633.     return @non_motion = true           if action == "non_motion"
  2634.     # 待機キャンセル解除の場合
  2635.     return @non_motion = false          if action == "non_motion_cancel"
  2636.     # 初期位置変更の場合
  2637.     return change_base_position         if action == "change_base_position"
  2638.     # 初期位置変更解除の場合
  2639.     return set_base_position(false)     if action == "set_base_position"
  2640.     # 強制アクションの場合  
  2641.     return force_act                    if action == "force_action"
  2642.     # 強制アクションの場合 (セカンドターゲット)
  2643.     return force_act2                   if action == "force_action2"
  2644.     # 個別開始の場合
  2645.     return individual_start             if action == "individual_start"
  2646.     # 個別終了の場合
  2647.     return individual_end               if action == "individual_end"
  2648.     # ループ開始の場合
  2649.     return loop_start                   if action == "loop_start"
  2650.     # ループ終了の場合
  2651.     return loop_end                     if action == "loop_end"
  2652.     # 自分のみ更新の場合
  2653.     return only_action_on               if action == "only_action_on"
  2654.     # 自分のみ更新解除の場合
  2655.     return only_action_off              if action == "only_action_off"
  2656.     # 次の行動者へ移行の場合
  2657.     return next_battler                 if action == "next_battler"
  2658.     # 画像変更フラグの場合
  2659.     return set_change                   if action == "set_change"
  2660.     # スクリプト操作の場合   
  2661.     return eval(@action_data[0])
  2662.   end
  2663.   #--------------------------------------------------------------------------
  2664.   # ● バトラー反転実行
  2665.   #--------------------------------------------------------------------------
  2666.   def mirroring
  2667.     @mirror = !@mirror
  2668.   end  
  2669.   #--------------------------------------------------------------------------
  2670.   # ● 反転初期化
  2671.   #--------------------------------------------------------------------------
  2672.   def mirroring_reset
  2673.     @mirror = false
  2674.     mirroring if [email protected]? && N03::ENEMY_MIRROR
  2675.     mirroring if $sv_camera.mirror
  2676.   end  
  2677.   #--------------------------------------------------------------------------
  2678.   # ● 残像実行
  2679.   #--------------------------------------------------------------------------
  2680.   def mirage_set
  2681.     @mirage = @action_data.dup
  2682.     @mirage_end = @mirage[3]
  2683.     @mirage = [] if @mirage[1] == 0
  2684.   end  
  2685.   #--------------------------------------------------------------------------
  2686.   # ● 回転実行
  2687.   #--------------------------------------------------------------------------
  2688.   def angling(data = @action_data)
  2689.     @angle_data = data.dup
  2690.     @oy = @ch / 2
  2691.     @oy_adjust = @ch * 50
  2692.     @angle_time = data[1]
  2693.     start_angle = data[2] * N03.mirror_num(@mirror)
  2694.     end_angle = data[3] * N03.mirror_num(@mirror)
  2695.     # 時間が0以下なら即座に最終角度へ
  2696.     @angle_time = 1 if @angle_time <= 0
  2697.     # 回転時間から1フレームあたりの角度を出す
  2698.     @angling = (end_angle - start_angle) / @angle_time
  2699.     # 割り切れない余りを初期角度に
  2700.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  2701.   end
  2702.   #--------------------------------------------------------------------------
  2703.   # ● 回転初期化
  2704.   #--------------------------------------------------------------------------
  2705.   def angle_reset
  2706.     @oy = @ch
  2707.     @angle = @angle_time = @oy_adjust = 0
  2708.   end  
  2709.   #--------------------------------------------------------------------------
  2710.   # ● 拡大縮小実行
  2711.   #--------------------------------------------------------------------------
  2712.   def zooming(data = @action_data)
  2713.     @zoom_data = data.dup
  2714.     @zoom_time = data[1]
  2715.     start_zoom_x = data[2][0]
  2716.     start_zoom_y = data[2][1]
  2717.     end_zoom_x = data[3][0]
  2718.     end_zoom_y = data[3][1]
  2719.     # 時間が0以下なら即座に最終サイズへ
  2720.     @zoom_time = 1 if @zoom_time <= 0
  2721.     # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  2722.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  2723.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  2724.     # 開始サイズに
  2725.     @zoom_x = start_zoom_x
  2726.     @zoom_y = start_zoom_y
  2727.   end  
  2728.   #--------------------------------------------------------------------------
  2729.   # ● 拡大縮小初期化
  2730.   #--------------------------------------------------------------------------
  2731.   def zoom_reset
  2732.     @zoom_x = @zoom_y = 1
  2733.     @zoom_time = 0
  2734.   end  
  2735.   #--------------------------------------------------------------------------
  2736.   # ● バトラー透明度操作
  2737.   #--------------------------------------------------------------------------
  2738.   def set_opacity
  2739.     data = @action_data.dup
  2740.     @opacity = data[2]
  2741.     opacity_move = (data[3] - data[2])/ data[1]
  2742.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  2743.     @wait = data[1] if data[7]
  2744.     @wait *= 2 if data[6] && data[7]
  2745.   end
  2746.   #--------------------------------------------------------------------------
  2747.   # ● 透明度操作初期化
  2748.   #--------------------------------------------------------------------------
  2749.   def opacity_reset
  2750.     @opacity = 255
  2751.     @opacity = 0 if @battler.hidden?
  2752.     @opacity_data = []
  2753.   end
  2754.   #--------------------------------------------------------------------------
  2755.   # ● バトラーアニメ実行
  2756.   #--------------------------------------------------------------------------
  2757.   def battler_anime(anime_data = nil)
  2758.     anime_data = @action_data.dup if anime_data == nil
  2759.     @graphic_file_index = anime_data[1] if !graphic_fix
  2760.     @pattern_h = anime_data[2]
  2761.     @pattern_w = anime_data[3]
  2762.     @pattern_h = 0 if @max_pattern_w == 1
  2763.     @pattern_w = 0 if @max_pattern_h == 1
  2764.     @pattern_type = anime_data[4]
  2765.     @pattern_time = anime_data[5]
  2766.     @pattern_rest_time = anime_data[5]
  2767.     @pattern_count = 0
  2768.     @pattern_kind = 1
  2769.     @pattern_kind = -1 if @pattern_type < 0
  2770.     @pattern_kind = 0 if @pattern_type == 0
  2771.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  2772.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  2773.     @z_plus = anime_data[6]
  2774.     @wait = set_anime_wait if anime_data[7]
  2775.     @shadow_visible = anime_data[8]
  2776.     weapon_anime(anime_data)
  2777.   end
  2778.   #--------------------------------------------------------------------------
  2779.   # ● アニメウエイト計算
  2780.   #--------------------------------------------------------------------------
  2781.   def set_anime_wait
  2782.     if @pattern_type > 0
  2783.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  2784.     elsif @pattern_type < 0
  2785.       pattern_time_a = @pattern_w.abs + 1
  2786.     else
  2787.       return @pattern_time if @pattern_type == 0
  2788.     end
  2789.     case @pattern_type
  2790.     when 1,-1, 3,-3
  2791.       return pattern_time_a * @pattern_time
  2792.     when 2,-2, 4,-4
  2793.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  2794.     end
  2795.   end  
  2796.   #--------------------------------------------------------------------------
  2797.   # ● 移動実行
  2798.   #--------------------------------------------------------------------------
  2799.   def move
  2800.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  2801.     return if @move_targets == []
  2802.     @move_targets = [@battler] if @action_data[1].abs == 7
  2803.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  2804.     @move_y = @action_data[3] * 100
  2805.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  2806.     @move_h = nil if @action_data[4] == nil
  2807.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  2808.     @horming_move = true
  2809.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  2810.     target_position_set
  2811.     target_position = [@target_x, @target_y, @target_z]
  2812.     distanse_move = @action_data[5] > 0
  2813.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  2814.     @wait = @move_time
  2815.     curve
  2816.     jump
  2817.     @move_time = 1 if @move_time == 0
  2818.     @horming_move = false if @move_targets.include?(@battler)
  2819.     update_move if @move_time == 1
  2820.   end  
  2821.   #--------------------------------------------------------------------------
  2822.   # ● カーブ実行
  2823.   #--------------------------------------------------------------------------
  2824.   def curve
  2825.     @c = 0
  2826.     return if @action_data[6] == 0
  2827.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  2828.   end  
  2829.   #--------------------------------------------------------------------------
  2830.   # ● ジャンプ実行
  2831.   #--------------------------------------------------------------------------
  2832.   def jump
  2833.     convert_jump
  2834.     return if @action_data[7] == [0,0]
  2835.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  2836.   end  
  2837.   #--------------------------------------------------------------------------
  2838.   # ● J座標(ジャンプ高度)をH座標に変換
  2839.   #--------------------------------------------------------------------------
  2840.   def convert_jump
  2841.     @h += @j
  2842.     @j = 0
  2843.     @jump = []
  2844.   end  
  2845.   #--------------------------------------------------------------------------
  2846.   # ● データベース戦闘アニメ実行
  2847.   #--------------------------------------------------------------------------
  2848.   def battle_anime
  2849.     data = @action_data.dup
  2850.     targets = N03.get_targets(data[2], @battler)
  2851.     return if targets == []
  2852.     data[8] = !data[8] if @mirror
  2853.     @set_damage           = data[5]
  2854.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  2855.     @damage_anime_data[1] = data[8]
  2856.     @damage_anime_data[2] = data[7]
  2857.     @damage_anime_data[3] = data[6]
  2858.     @damage_anime_data[4] = data[9]
  2859.     @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  2860.     return if @set_damage
  2861.     for target in targets do display_anime(targets, target, data) end
  2862.   end
  2863.   #--------------------------------------------------------------------------
  2864.   # ● 武器アニメ開始
  2865.   #--------------------------------------------------------------------------
  2866.   def weapon_anime(anime_data)
  2867.     @weapon_end = true
  2868.     for i in 9...anime_data.size
  2869.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  2870.     end
  2871.   end
  2872.   #--------------------------------------------------------------------------
  2873.   # ● アニメ飛ばし開始
  2874.   #--------------------------------------------------------------------------
  2875.   def move_anime
  2876.     @m_a_starter = []
  2877.     @m_a_targets = []
  2878.     starters = N03.get_targets(@action_data[2], @battler)
  2879.     targets = N03.get_targets(@action_data[3], @battler)
  2880.     return if starters == [] or targets == []
  2881.     single_start = true if starters != nil && @action_data[2] < 0
  2882.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  2883.     starters = [starters[0]] if single_start
  2884.     single_end = true if targets != nil && @action_data[3] < 0
  2885.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  2886.     targets = [targets[0]] if single_end
  2887.     se_flag = true
  2888.     for starter in starters
  2889.       for target in targets
  2890.         data = @action_data.dup
  2891.         data[17] = se_flag
  2892.         @effect_data.push(data)
  2893.         @m_a_targets.push(target)
  2894.         @m_a_starter.push(starter)
  2895.         se_flag = false
  2896.       end
  2897.     end  
  2898.   end
  2899.   #--------------------------------------------------------------------------
  2900.   # ● スプライトセット通信
  2901.   #--------------------------------------------------------------------------
  2902.   def set_effect_data(data = @action)
  2903.     action_data = N03::ACTION[data]
  2904.     return if action_data == nil
  2905.     @effect_data.push(action_data.dup)
  2906.   end
  2907.   #--------------------------------------------------------------------------
  2908.   # ● 戦闘シーン通信のデータを格納
  2909.   #--------------------------------------------------------------------------
  2910.   def set_play_data(data = @action_data)
  2911.     @play_data = data.dup
  2912.   end
  2913.   #--------------------------------------------------------------------------
  2914.   # ● 戦闘アニメの表示
  2915.   #--------------------------------------------------------------------------
  2916.   def display_anime(targets, target, data)
  2917.     return if !N03.first_of_all_screen_anime(data[1], target, targets)
  2918.     target.animation_id         = data[1]
  2919.     target.animation_mirror     = data[8]
  2920.     target.sv.anime_horming     = data[3]
  2921.     target.sv.anime_camera_zoom = data[6]
  2922.     target.sv.anime_no_mirror   = data[7]
  2923.     target.sv.anime_plus_z      = data[9]
  2924.   end
  2925.   #--------------------------------------------------------------------------
  2926.   # ● 戦闘アニメ拡張データの初期化
  2927.   #--------------------------------------------------------------------------
  2928.   def reset_anime_data
  2929.     @anime_no_mirror = false
  2930.     @anime_horming = false
  2931.     @anime_camera_zoom = false
  2932.     @timing_targets = []
  2933.     @anime_plus_z = true
  2934.   end  
  2935.   #--------------------------------------------------------------------------
  2936.   # ● カメラワーク
  2937.   #--------------------------------------------------------------------------
  2938.   def camera
  2939.     data = @action_data.dup
  2940.     N03.camera(@battler, data)
  2941.     @wait = data[4] if data[5]
  2942.   end  
  2943.   #--------------------------------------------------------------------------
  2944.   # ● 画面のシェイク
  2945.   #--------------------------------------------------------------------------
  2946.   def shake
  2947.     data = @action_data.dup
  2948.     $sv_camera.shake(data[1], data[2], data[3])
  2949.     @wait = data[3] if data[4]
  2950.   end
  2951.   #--------------------------------------------------------------------------
  2952.   # ● 画面色調変更
  2953.   #--------------------------------------------------------------------------
  2954.   def color_effect
  2955.     case @action_data[1]
  2956.     when 0,1,2,3,4,5
  2957.       targets = N03.get_targets(@action_data[1], @battler)
  2958.     when 6
  2959.       screen = true
  2960.     when 7
  2961.       targets = [@battler] + @target_battler
  2962.     when 8
  2963.       screen = true
  2964.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  2965.     when 9
  2966.       screen = true
  2967.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  2968.     when 10
  2969.       screen = true
  2970.       targets = $game_troop.members + $game_party.battle_members
  2971.     end
  2972.     return if screen == nil && targets == []
  2973.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  2974.     @wait = @action_data[2][4] if @action_data[3]
  2975.     return if !screen
  2976.     $sv_camera.color_set[1] = @action_data[2]
  2977.     $sv_camera.color_set[2] = @action_data[2]
  2978.   end  
  2979.   #--------------------------------------------------------------------------
  2980.   # ● トランジション
  2981.   #--------------------------------------------------------------------------
  2982.   def transition
  2983.     $sv_camera.perform_transition(@action_data)
  2984.   end  
  2985.   #--------------------------------------------------------------------------
  2986.   # ● ふきだしアニメ表示
  2987.   #--------------------------------------------------------------------------
  2988.   def balloon_anime
  2989.     @balloon_data = @action_data.dup
  2990.   end  
  2991.   #--------------------------------------------------------------------------
  2992.   # ● ピクチャ表示
  2993.   #--------------------------------------------------------------------------
  2994.   def picture_set
  2995.     @picture = true
  2996.     set_effect_data
  2997.   end
  2998.   #--------------------------------------------------------------------------
  2999.   # ● ステート操作
  3000.   #--------------------------------------------------------------------------
  3001.   def state_set
  3002.     targets = N03.get_targets(@action_data[1], @battler)
  3003.     return if targets == []
  3004.     case @action_data[2]
  3005.     when 1 ; targets = [targets[rand(targets.size)]]
  3006.     when 2 ; targets -= @battler if targets.include?(@battler)
  3007.     end
  3008.     for target in targets
  3009.       for id in @action_data[4]
  3010.         target.add_state(id) if @action_data[3] == "+"
  3011.         target.remove_state(id) if @action_data[3] == "-"
  3012.       end
  3013.     end
  3014.   end
  3015.   #--------------------------------------------------------------------------
  3016.   # ● FPS変更
  3017.   #--------------------------------------------------------------------------
  3018.   def fps
  3019.     Graphics.frame_rate = @action_data[1]
  3020.     start_action
  3021.   end
  3022.   #--------------------------------------------------------------------------
  3023.   # ● バトラー画像変更の場合
  3024.   #--------------------------------------------------------------------------
  3025.   def graphics_change
  3026.     @graphics_change = true
  3027.     return @battler.graphics_change(@action_data[3]) if [email protected]?
  3028.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if !@action_data[1]
  3029.     if @action_data[4] == []
  3030.       face_name = @battler.face_name
  3031.       face_index = @battler.face_index
  3032.     else
  3033.       face_name = @action_data[4][1]
  3034.       face_index = @action_data[4][0]
  3035.     end
  3036.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  3037.   end
  3038.   #--------------------------------------------------------------------------
  3039.   # ● スキル派生
  3040.   #--------------------------------------------------------------------------
  3041.   def derivating_skill
  3042.     # 未修得スキルは派生不可なら
  3043.     return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
  3044.     # コスト不足は派生不可なら
  3045.     return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
  3046.     # 派生
  3047.     @derivation_skill_id = @action_data[3]
  3048.     # 以降のアクションをキャンセル
  3049.     @full_action = []
  3050.   end
  3051.   #--------------------------------------------------------------------------
  3052.   # ● BGM/BGS/SE演奏
  3053.   #--------------------------------------------------------------------------
  3054.   def sound
  3055.     pitch = @action_data[2]
  3056.     vol   = @action_data[3]
  3057.     name  = @action_data[4]
  3058.     case @action_data[1]
  3059.     when "se"
  3060.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  3061.     when "bgm"
  3062.       # 名前指定のない場合、現在のBGMを変えないように
  3063.       name = RPG::BGM.last.name if @action_data[4] == ""
  3064.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  3065.     when "bgs"
  3066.       name = RPG::BGS.last.name if @action_data[4] == ""
  3067.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  3068.     end
  3069.   end
  3070.   #--------------------------------------------------------------------------
  3071.   # ● ムービーの再生
  3072.   #--------------------------------------------------------------------------
  3073.   def movie
  3074.     Graphics.play_movie('Movies/' + @action_data[1])
  3075.   end
  3076.   #--------------------------------------------------------------------------
  3077.   # ● ゲームスイッチ操作
  3078.   #--------------------------------------------------------------------------
  3079.   def switches
  3080.     for id in @action_data[1]
  3081.       $game_switches[id] = true if id > 0
  3082.       $sv_camera.switches[id.abs] = true  if id < 0
  3083.     end
  3084.     for id in @action_data[2]
  3085.       $game_switches[id] = false if id > 0
  3086.       $sv_camera.switches[id.abs] = false  if id < 0
  3087.     end
  3088.     $sv_camera.program_check
  3089.   end
  3090.   #--------------------------------------------------------------------------
  3091.   # ● ゲーム変数操作
  3092.   #--------------------------------------------------------------------------
  3093.   def variable
  3094.     # オペランドチェック
  3095.     operand = @action_data[3]
  3096.     operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  3097.     # 変数操作で分岐
  3098.     case @action_data[2]
  3099.     when 0 ; $game_variables[@action_data[1]] = operand  # 代入
  3100.     when 1 ; $game_variables[@action_data[1]] += operand # 加算
  3101.     when 2 ; $game_variables[@action_data[1]] -= operand # 減算
  3102.     when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
  3103.     when 4 ; $game_variables[@action_data[1]] /= operand # 除算
  3104.     when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
  3105.     end
  3106.   end  
  3107.   #--------------------------------------------------------------------------
  3108.   # ● 条件分岐 (ゲームスイッチ)
  3109.   #--------------------------------------------------------------------------
  3110.   def nece_1
  3111.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  3112.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  3113.     action_diverging(judgment, @action_data[3])
  3114.   end  
  3115.   #--------------------------------------------------------------------------
  3116.   # ● 条件分岐 (ゲーム変数)
  3117.   #--------------------------------------------------------------------------
  3118.   def nece_2
  3119.     variable = $game_variables[@action_data[1]]
  3120.     num = @action_data[2]
  3121.     num = $game_variables[@action_data[2].abs] if num < 0
  3122.     case @action_data[3]
  3123.     when 0 ; judgment = variable == num
  3124.     when 1 ; judgment = variable < num
  3125.     when 2 ; judgment = variable > num
  3126.     end  
  3127.     action_diverging(judgment, @action_data[4])
  3128.   end  
  3129.   #--------------------------------------------------------------------------
  3130.   # ● 条件分岐 (ステート)
  3131.   #--------------------------------------------------------------------------
  3132.   def nece_3
  3133.     targets = N03.get_targets(@action_data[1], @battler)
  3134.     return if targets == []
  3135.     member_num = @action_data[4]
  3136.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  3137.     hit_count = 0
  3138.     miss_count = 0
  3139.     for target in targets
  3140.       hit_count += 1 if target.state?(@action_data[2])
  3141.       miss_count += 1 if !target.state?(@action_data[2])
  3142.     end
  3143.     case @action_data[3]
  3144.     when 0 ; judgment = hit_count >= member_num
  3145.     when 1 ; judgment = miss_count >= member_num
  3146.     end
  3147.     action_diverging(judgment, @action_data[5])
  3148.   end  
  3149.   #--------------------------------------------------------------------------
  3150.   # ● 条件分岐 (スキル)
  3151.   #--------------------------------------------------------------------------
  3152.   def nece_4
  3153.     targets = N03.get_targets(@action_data[1], @battler)
  3154.     return if targets == []
  3155.     member_num = @action_data[4]
  3156.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  3157.     hit_count = 0
  3158.     miss_count = 0
  3159.     for target in targets
  3160.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  3161.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  3162.     end
  3163.     case @action_data[3]
  3164.     when 0 ; judgment = hit_count >= member_num
  3165.     when 1 ; judgment = miss_count >= member_num
  3166.     end
  3167.     action_diverging(judgment, @action_data[5])
  3168.   end  
  3169.   #--------------------------------------------------------------------------
  3170.   # ● 条件分岐 (パラメータ)
  3171.   #--------------------------------------------------------------------------
  3172.   def nece_5
  3173.     targets = N03.get_targets(@action_data[1], @battler)
  3174.     return if targets == []
  3175.     member_num = @action_data[5]
  3176.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  3177.     hit_count = 0
  3178.     for target in targets
  3179.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  3180.     end
  3181.     judgment = hit_count >= member_num
  3182.     action_diverging(judgment, @action_data[6])
  3183.   end  
  3184.   #--------------------------------------------------------------------------
  3185.   # ● 条件分岐 (装備)
  3186.   #--------------------------------------------------------------------------
  3187.   def nece_6
  3188.     targets = N03.get_targets(@action_data[1], @battler)
  3189.     return if targets == []
  3190.     member_num = @action_data[5]
  3191.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  3192.     hit_count = 0
  3193.     miss_count = 0
  3194.     for target in targets
  3195.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  3196.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  3197.     end
  3198.     case @action_data[4]
  3199.     when 0 ; judgment = hit_count >= member_num
  3200.     when 1 ; judgment = miss_count >= member_num
  3201.     end
  3202.     action_diverging(judgment, @action_data[6])
  3203.   end  
  3204.   #--------------------------------------------------------------------------
  3205.   # ● 条件分岐 (スクリプト)
  3206.   #--------------------------------------------------------------------------
  3207.   def nece_7
  3208.     judgment = eval(@action_data[2])
  3209.     action_diverging(judgment, @action_data[1])
  3210.   end  
  3211.   #--------------------------------------------------------------------------
  3212.   # ● アクション分岐  
  3213.   #--------------------------------------------------------------------------
  3214.   def action_diverging(judgment, kind)
  3215.     result = 0
  3216.     if judgment
  3217.       result = 1 if kind == 1
  3218.       result = 2 if kind == 2
  3219.     else
  3220.       result = 1 if kind == 0
  3221.     end
  3222.     # フルアクション終了
  3223.     return @full_action = []  if result == 2
  3224.     # 次のアクションを除去
  3225.     @full_action.shift if result == 1
  3226.     set_action
  3227.     # 次のアクションを実行
  3228.     @action_data = N03::ACTION[@action]
  3229.     next_action
  3230.   end
  3231.   #--------------------------------------------------------------------------
  3232.   # ● セカンドターゲット操作
  3233.   #--------------------------------------------------------------------------
  3234.   def second_targets_set
  3235.     targets = N03.get_targets(@action_data[1], @battler)
  3236.     for target in targets
  3237.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  3238.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  3239.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  3240.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  3241.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  3242.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  3243.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  3244.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  3245.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  3246.       targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  3247.     end
  3248.     return @second_targets = [] if targets.size == 0
  3249.     case @action_data[8]
  3250.     when 1 ; targets = [targets[rand(targets.size)]]
  3251.     when 2 ; targets.delete(@battler)
  3252.     end
  3253.     return @second_targets = [] if targets.size == 0
  3254.     @second_targets = targets
  3255.     case @action_data[9]
  3256.     when 0 ; return
  3257.     when 1 ; set_play_data(["second_targets_set"])
  3258.     when 2 ; set_play_data(["targets_set"])
  3259.     end
  3260.     @wait += 1
  3261.   end
  3262.   #--------------------------------------------------------------------------
  3263.   # ● ダメージアニメ
  3264.   #--------------------------------------------------------------------------
  3265.   def damage_anime(delay_time = 12)
  3266.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  3267.     action_play
  3268.     @wait -= delay_time
  3269.     @full_action.unshift("eval('@damage_anime_data = []
  3270.     @set_damage = true')")
  3271.   end
  3272.   #--------------------------------------------------------------------------
  3273.   # ● 通常コラプス
  3274.   #--------------------------------------------------------------------------
  3275.   def normal_collapse
  3276.     @collapse = true
  3277.     return
  3278.   end
  3279.   #--------------------------------------------------------------------------
  3280.   # ● 初期位置変更
  3281.   #--------------------------------------------------------------------------
  3282.   def change_base_position
  3283.     @base_x = @x
  3284.     @base_y = @y
  3285.     @base_h = @h
  3286.   end  
  3287.   #--------------------------------------------------------------------------
  3288.   # ● 強制アクション実行
  3289.   #--------------------------------------------------------------------------
  3290.   def force_act
  3291.     target(@full_action.shift)
  3292.   end
  3293.   #--------------------------------------------------------------------------
  3294.   # ● 強制アクション実行 (セカンドターゲット)
  3295.   #--------------------------------------------------------------------------
  3296.   def force_act2
  3297.     target2(@full_action.shift)
  3298.   end
  3299.   #--------------------------------------------------------------------------
  3300.   # ● 個別処理開始
  3301.   #--------------------------------------------------------------------------
  3302.   def individual_start
  3303.     @individual_targets = @target_battler.dup
  3304.     @remain_targets = @target_battler.dup
  3305.     @target_battler = [@individual_targets[0]]
  3306.     # リピート部分のアクションを保持
  3307.     @individual_act = @full_action.dup
  3308.   end
  3309.   #--------------------------------------------------------------------------
  3310.   # ● 個別処理終了
  3311.   #--------------------------------------------------------------------------
  3312.   def individual_end
  3313.     @individual_targets.shift
  3314.     for target in @individual_targets
  3315.       @individual_targets.shift if target.dead?
  3316.     end
  3317.     # ターゲットが残っているなら行動リピート
  3318.     return @target_battler = @remain_targets if @individual_targets.size == 0
  3319.     @full_action = @individual_act.dup
  3320.     @target_battler = [@individual_targets[0]]
  3321.   end
  3322.   #--------------------------------------------------------------------------
  3323.   # ● ループ開始
  3324.   #--------------------------------------------------------------------------
  3325.   def loop_start
  3326.     # ループ部分のアクションを保持
  3327.     @loop_act = @full_action.dup
  3328.   end
  3329.   #--------------------------------------------------------------------------
  3330.   # ● ループ終了
  3331.   #--------------------------------------------------------------------------
  3332.   def loop_end
  3333.     # 行動リピート
  3334.     @full_action = @loop_act.dup if @loop_act != []
  3335.   end
  3336.   #--------------------------------------------------------------------------
  3337.   # ● 次の行動者へ移行
  3338.   #--------------------------------------------------------------------------
  3339.   def next_battler
  3340.     @action_end = true
  3341.     @active = false
  3342.   end
  3343.   #--------------------------------------------------------------------------
  3344.   # ● 画像変更フラグ
  3345.   #--------------------------------------------------------------------------
  3346.   def set_change
  3347.     @change_up = true
  3348.   end
  3349.   #--------------------------------------------------------------------------
  3350.   # ● 戦闘シーン通信
  3351.   #--------------------------------------------------------------------------
  3352.   def play_data
  3353.     data = @play_data
  3354.     @play_data = []
  3355.     return data
  3356.   end
  3357.   #--------------------------------------------------------------------------
  3358.   # ● ショートカットコマンド
  3359.   #--------------------------------------------------------------------------
  3360.   def anime(anime_id, wait = true)
  3361.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  3362.   end
  3363.   def anime_me(anime_id, wait = true)
  3364.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  3365.   end
  3366.   def se(file, pitch = 100)
  3367.     @action_data = ["sound",  "se", pitch, 100, file]
  3368.   end
  3369.   def target(act)
  3370.     for target in @target_battler do target.sv.force_action = act end
  3371.   end
  3372.   def target2(act)
  3373.     for target in @second_targets do target.sv.force_action = act end
  3374.   end
  3375.   def delay(time)
  3376.     @wait = @battler.index * time
  3377.   end
  3378.   #--------------------------------------------------------------------------
  3379.   # ● バトラーのIDを取得
  3380.   #--------------------------------------------------------------------------
  3381.   def id
  3382.     return @battler.id if @battler.actor?
  3383.     return [email protected]
  3384.   end
  3385.   #--------------------------------------------------------------------------
  3386.   # ● 被クリティカルフラグを取得
  3387.   #--------------------------------------------------------------------------
  3388.   def critical?
  3389.     return @battler.result.critical
  3390.   end
  3391.   #--------------------------------------------------------------------------
  3392.   # ● 被回復フラグを取得
  3393.   #--------------------------------------------------------------------------
  3394.   def recovery?
  3395.     recovery = false
  3396.     recovery = true if @battler.result.hp_damage < 0
  3397.     recovery = true if @battler.result.mp_damage < 0
  3398.     recovery = true if @battler.result.tp_damage < 0
  3399.     return recovery
  3400.   end
  3401.   #--------------------------------------------------------------------------
  3402.   # ● 被スキルIDを取得
  3403.   #--------------------------------------------------------------------------
  3404.   def damage_skill_id
  3405.     return @damage_skill_id
  3406.   end
  3407.   #--------------------------------------------------------------------------
  3408.   # ● 被アイテムIDを取得
  3409.   #--------------------------------------------------------------------------
  3410.   def damage_item_id
  3411.     return @damage_item_id
  3412.   end
  3413.   #--------------------------------------------------------------------------
  3414.   # ● 装備武器を取得
  3415.   #--------------------------------------------------------------------------
  3416.   def weapon_id
  3417.     return 0 if [email protected][0]
  3418.     return @battler.weapons[0].id
  3419.   end
  3420.   #--------------------------------------------------------------------------
  3421.   # ● 装備武器のタイプを取得
  3422.   #--------------------------------------------------------------------------
  3423.   def weapon_type
  3424.     return 0 if [email protected][0]
  3425.     return @battler.weapons[0].wtype_id
  3426.   end
  3427.   #--------------------------------------------------------------------------
  3428.   # ● 盾を装備しているか
  3429.   #--------------------------------------------------------------------------
  3430.   def shield?
  3431.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  3432.     return false
  3433.   end
  3434.   #--------------------------------------------------------------------------
  3435.   # ● ダメージがあるか
  3436.   #--------------------------------------------------------------------------
  3437.   def damage_zero?
  3438.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  3439.   end
  3440.   #--------------------------------------------------------------------------
  3441.   # ● スキルIDを取得
  3442.   #--------------------------------------------------------------------------
  3443.   def skill_id
  3444.     return @counter_id if @counter_id != 0
  3445.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  3446.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  3447.     return @battler.current_action.item.id
  3448.   end
  3449.   #--------------------------------------------------------------------------
  3450.   # ● スキルのタイプを取得
  3451.   #--------------------------------------------------------------------------
  3452.   def skill_type
  3453.     return 0 if skill_id == 0
  3454.     return $data_skills[skill_id].stype_id
  3455.   end
  3456.   #--------------------------------------------------------------------------
  3457.   # ● スキル名を取得
  3458.   #--------------------------------------------------------------------------
  3459.   def skill_name
  3460.     return "" if skill_id == 0
  3461.     return $data_skills[skill_id].name
  3462.   end
  3463.   #--------------------------------------------------------------------------
  3464.   # ● アイテムIDを取得
  3465.   #--------------------------------------------------------------------------
  3466.   def item_id
  3467.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  3468.     return @battler.current_action.item.id
  3469.   end
  3470.   #--------------------------------------------------------------------------
  3471.   # ● 攻撃アクション
  3472.   #--------------------------------------------------------------------------
  3473.   def attack_action(item)
  3474.     return skill_action if item.is_a?(RPG::Skill)
  3475.     return item_action
  3476.   end
  3477.   #--------------------------------------------------------------------------
  3478.   # ● ダメージアクションベース
  3479.   #--------------------------------------------------------------------------
  3480.   def damage_action_base(item)
  3481.     @damage_skill_id = 0
  3482.     @damage_item_id = 0
  3483.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  3484.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  3485.   end  
  3486.   #--------------------------------------------------------------------------
  3487.   # ● ダメージアクション
  3488.   #--------------------------------------------------------------------------
  3489.   def damage_action(attacker, item)
  3490.     damage_action_base(item)
  3491.     act = damage(attacker)
  3492.     return if @active
  3493.     start_action(act) if act != nil
  3494.   end
  3495.   #--------------------------------------------------------------------------
  3496.   # ● 回避アクション
  3497.   #--------------------------------------------------------------------------
  3498.   def evasion_action(attacker, item)
  3499.     damage_action_base(item)
  3500.     act = evasion(attacker)
  3501.     return if @active
  3502.     start_action(act) if act != nil
  3503.   end
  3504.   #--------------------------------------------------------------------------
  3505.   # ● ミスアクション
  3506.   #--------------------------------------------------------------------------
  3507.   def miss_action(attacker, item)
  3508.     damage_action_base(item)
  3509.     act = miss(attacker)
  3510.     return if @active
  3511.     start_action(act) if act != nil
  3512.   end
  3513.   #--------------------------------------------------------------------------
  3514.   # ● 閃きスクリプト併用処理
  3515.   #--------------------------------------------------------------------------
  3516.   def flash_action
  3517.     return "閃き"
  3518.   end
  3519.   
  3520. end


  3521. #==============================================================================
  3522. # ■ module N03
  3523. #------------------------------------------------------------------------------
  3524. #  サイドビューバトルのモジュールです。
  3525. #==============================================================================
  3526. module N03
  3527.   #--------------------------------------------------------------------------
  3528.   # ● バトラーの敵グループを取得
  3529.   #--------------------------------------------------------------------------
  3530.   def self.get_enemy_unit(battler)
  3531.     return $game_troop if battler.actor?
  3532.     return $game_party
  3533.   end
  3534.   #--------------------------------------------------------------------------
  3535.   # ● バトラーの味方グループを取得
  3536.   #--------------------------------------------------------------------------
  3537.   def self.get_party_unit(battler)
  3538.     return $game_party if battler.actor?
  3539.     return $game_troop
  3540.   end
  3541.   #--------------------------------------------------------------------------
  3542.   # ● 戦闘アニメ時間の取得
  3543.   #--------------------------------------------------------------------------
  3544.   def self.get_anime_time(anime_id)
  3545.     return 0 if anime_id <= 0
  3546.     return $data_animations[anime_id].frame_max * 4
  3547.   end
  3548.   #--------------------------------------------------------------------------
  3549.   # ● 攻撃アニメの取得
  3550.   #--------------------------------------------------------------------------
  3551.   def self.get_attack_anime_id(kind, battler)
  3552.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  3553.     case kind
  3554.     when -1 ; anime_id = battler.atk_animation_id1
  3555.     when -2 ; anime_id = battler.atk_animation_id2
  3556.     when -3
  3557.       if battler.current_action != nil
  3558.         anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  3559.       end
  3560.     else    ; anime_id = kind
  3561.     end
  3562.     case anime_id
  3563.     when -1 ; anime_id = battler.atk_animation_id1
  3564.     when -2 ; anime_id = battler.atk_animation_id2
  3565.     end
  3566.     return anime_id if anime_id
  3567.     return 0
  3568.   end  
  3569.   #--------------------------------------------------------------------------
  3570.   # ● 戦闘アニメデータをセット
  3571.   #--------------------------------------------------------------------------
  3572.   def self.set_damage_anime_data(targets, target, data)
  3573.     return if !first_of_all_screen_anime(data[0], target, targets)
  3574.     target.animation_id         = data[0]
  3575.     target.animation_mirror     = data[1]
  3576.     target.sv.anime_no_mirror   = data[2]
  3577.     target.sv.anime_camera_zoom = data[3]
  3578.     target.sv.anime_plus_z      = data[4]
  3579.   end   
  3580.   #--------------------------------------------------------------------------
  3581.   # ● ターゲットの取得
  3582.   #--------------------------------------------------------------------------
  3583.   def self.get_targets(kind, battler)
  3584.     case kind.abs
  3585.     when 0 ; return [battler].dup
  3586.     when 1 ; return battler.sv.target_battler.dup
  3587.     when 2 ; return get_enemy_unit(battler).members.dup
  3588.     when 3 ; return get_party_unit(battler).members.dup
  3589.     when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  3590.     when 5 ; return battler.sv.second_targets.dup
  3591.     end
  3592.   end  
  3593.   #--------------------------------------------------------------------------
  3594.   # ● ターゲットの座標を取得
  3595.   #--------------------------------------------------------------------------
  3596.   def self.get_targets_position(targets, horming, m_a = nil)
  3597.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  3598.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  3599.     x = y = h = 0
  3600.     for i in 0...targets.size
  3601.       x += targets[i].sv.base_x if !horming
  3602.       y += targets[i].sv.base_y if !horming
  3603.       h += targets[i].sv.base_h if !horming
  3604.       x += targets[i].sv.x if horming
  3605.       y += targets[i].sv.y if horming
  3606.       h += targets[i].sv.h if horming
  3607.       y -= targets[i].sv.ch * 100 if m_a == 0
  3608.       y -= targets[i].sv.ch * 50 if m_a == 1
  3609.     end
  3610.     return [x / targets.size, y / targets.size, h / targets.size]
  3611.   end
  3612.   #--------------------------------------------------------------------------
  3613.   # ● 速度を時間に変換
  3614.   #--------------------------------------------------------------------------
  3615.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  3616.     return time if !distanse_move
  3617.     distanse_x = self_position[0] - target_position[0]
  3618.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  3619.     distanse_y = self_position[1] - target_position[1]
  3620.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  3621.     if self_position[2] != nil && target_position[2] != nil
  3622.       distanse_h = self_position[2] - target_position[2]
  3623.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  3624.     else
  3625.       distanse_h = 0
  3626.     end
  3627.     distanse = [distanse_x, distanse_y, distanse_h].max
  3628.     return distanse / (time * 100) + 1
  3629.   end
  3630.   #--------------------------------------------------------------------------
  3631.   # ● 放物線移動計算
  3632.   #--------------------------------------------------------------------------
  3633.   def self.parabola(data, time, size, type = 1)
  3634.     move_data = data
  3635.     move_data[0] *= size
  3636.     move_data[1] *= size
  3637.     move = []
  3638.     move_d = []
  3639.     for i in 0...time / 2
  3640.       move[i] = move_data[0]
  3641.       move_d[i] = move_data[1]
  3642.       move_data[0] = move_data[0] * type / (1 + type)
  3643.       move_data[1] = move_data[1] * type / (1 + type)
  3644.     end
  3645.     move = move + move_d.reverse!
  3646.     move.reverse!
  3647.     adjust = move.inject(0) {|result, item| result + item }
  3648.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  3649.     move.unshift(0) if time % 2 != 0
  3650.     return move
  3651.   end
  3652.   #--------------------------------------------------------------------------
  3653.   # ● 反転値
  3654.   #--------------------------------------------------------------------------
  3655.   def self.mirror_num(mirror)
  3656.     return 1 if !mirror
  3657.     return -1
  3658.   end  
  3659.   #--------------------------------------------------------------------------
  3660.   # ● カメラワーク
  3661.   #--------------------------------------------------------------------------
  3662.   def self.camera(battler, data)
  3663.     battler = $game_party.battle_members[0] if !battler
  3664.     cx = data[2][0] * 100
  3665.     cy = data[2][1] * 100
  3666.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  3667.     targets = self.get_targets(data[1], battler)
  3668.     return if targets == nil or targets == []
  3669.     position = self.get_targets_position(targets, true)
  3670.     $sv_camera.move(position[0], position[1] + position[2], data[3], data[4], false)
  3671.   end
  3672.   #--------------------------------------------------------------------------
  3673.   # ● コラプス禁止
  3674.   #--------------------------------------------------------------------------
  3675.   def self.immortaling
  3676.     # 全員に不死身付与
  3677.     for member in $game_party.battle_members + $game_troop.members
  3678.       # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  3679.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  3680.       member.add_state(N03::IMMORTAL_ID)
  3681.     end
  3682.     return true
  3683.   end  
  3684.   #--------------------------------------------------------------------------
  3685.   # ● コラプス許可
  3686.   #--------------------------------------------------------------------------
  3687.   def self.unimmortaling
  3688.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  3689.     for member in $game_party.battle_members + $game_troop.members
  3690.       next if member.dead?
  3691.       # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  3692.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  3693.       next member.sv.immortal = false if member.sv.immortal
  3694.       member.remove_state(N03::IMMORTAL_ID)
  3695.       next if member.hp != 0
  3696.       member.add_state(1)
  3697.       member.perform_collapse_effect
  3698.       member.sv.action_terminate
  3699.     end
  3700.     return false
  3701.   end  
  3702.   #--------------------------------------------------------------------------
  3703.   # ● スキル派生
  3704.   #--------------------------------------------------------------------------
  3705.   def self.derived_skill(battler)
  3706.     battler.force_action(battler.sv.derivation_skill_id, -2)
  3707.     BattleManager.unshift_action_battlers(battler)
  3708.   end
  3709.   #--------------------------------------------------------------------------
  3710.   # ● ダメージの作成
  3711.   #--------------------------------------------------------------------------
  3712.   def self.set_damage(battler, hp_damage, mp_damage)
  3713.     battler.result.hp_damage = hp_damage
  3714.     battler.result.mp_damage = mp_damage
  3715.   end
  3716.   #--------------------------------------------------------------------------
  3717.   # ● ターゲット生死確認
  3718.   #--------------------------------------------------------------------------
  3719.   def self.targets_alive?(targets)
  3720.     return false if targets == []
  3721.     for target in targets do return true if !target.dead? end
  3722.     return false
  3723.   end
  3724.   #--------------------------------------------------------------------------
  3725.   # ● ターゲットをセカンドターゲットへ
  3726.   #--------------------------------------------------------------------------
  3727.   def self.s_targets(battler)
  3728.     battler.sv.target_battler = battler.sv.second_targets
  3729.     return battler.sv.second_targets
  3730.   end  
  3731.   #--------------------------------------------------------------------------
  3732.   # ● セカンドターゲットをターゲットへ
  3733.   #--------------------------------------------------------------------------
  3734.   def self.targets_set(battler)
  3735.     battler.sv.second_targets = battler.current_action.make_targets.compact
  3736.     battler.sv.target_battler = battler.sv.second_targets
  3737.   end  
  3738.   #--------------------------------------------------------------------------
  3739.   # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
  3740.   #--------------------------------------------------------------------------
  3741.   def self.first_of_all_screen_anime(anime_id, target, targets)
  3742.     anime = $data_animations[anime_id]
  3743.     return false if !anime
  3744.     return true if anime.position != 3
  3745.     return false if anime.position == 3 && target != targets[0]
  3746.     #targets.delete(target)
  3747.     #target.sv.timing_targets = targets
  3748.     return true
  3749.   end
  3750.   #--------------------------------------------------------------------------
  3751.   # ● 戦闘不能付加攻撃か
  3752.   #--------------------------------------------------------------------------
  3753.   def self.dead_attack?(battler, item)
  3754.     for state in battler.atk_states
  3755.       return true if state == battler.death_state_id
  3756.     end
  3757.     for effect in item.effects
  3758.       return true if effect.code == 21 && effect.data_id == battler.death_state_id
  3759.     end
  3760.     return false
  3761.   end  
  3762.    
  3763. end

  3764. #==============================================================================
  3765. # ■ Sprite_Weapon
  3766. #------------------------------------------------------------------------------
  3767. #  ウエポン表示用のスプライトです。
  3768. #==============================================================================
  3769. class Sprite_Weapon < Sprite_Base
  3770.   #--------------------------------------------------------------------------
  3771.   # ● 公開インスタンス変数 
  3772.   #--------------------------------------------------------------------------
  3773.   attr_reader   :index                       # ウエポン画像配列のインデックス
  3774.   attr_reader   :battler                     # 画像が参照しているバトラー
  3775.   attr_reader   :move_time                   # 画像が目標に到達するまでの時間
  3776.   attr_reader   :through                     # 貫通フラグ
  3777.   attr_reader   :action_end                  # 武器アクション終了フラグ
  3778.   attr_reader   :action_end_cancel                  # 武器アクション終了フラグ
  3779.   attr_reader   :hit_position                # 画像が目標に到達した時の座標
  3780.   attr_accessor :hit_anime_id                # 画像が目標に到達した時のアニメID
  3781.   #--------------------------------------------------------------------------
  3782.   # ● オブジェクト初期化
  3783.   #--------------------------------------------------------------------------
  3784.   def initialize(viewport, index, battler)
  3785.     super(viewport)
  3786.     @index = index
  3787.     @battler = battler
  3788.     @position_x = @position_y = 0
  3789.     @o = 0
  3790.     @real_x = @real_y = 0
  3791.     @mirror = @battler.sv.mirror
  3792.     reset
  3793.     set_action
  3794.   end
  3795.   #--------------------------------------------------------------------------
  3796.   # ● 初期化
  3797.   #--------------------------------------------------------------------------
  3798.   def reset
  3799.     @z_plus = 0
  3800.     @weapon_data = []
  3801.     @move_data = []
  3802.     @move_x = 0
  3803.     @move_y = 0
  3804.     @orbit = []
  3805.     @through = false
  3806.     @distanse_move = false
  3807.     @weapon_width = 0
  3808.     @weapon_height = 0
  3809.     @anime_time = 0
  3810.     @anime_position = 1
  3811.     @move_time = 0
  3812.     @hit_anime_id = 0
  3813.     @move_anime = true
  3814.     @action_end = false
  3815.     @action_end_cancel = false
  3816.     reset_position
  3817.   end  
  3818.   #--------------------------------------------------------------------------
  3819.   # ● アクションをセット
  3820.   #--------------------------------------------------------------------------
  3821.   def set_action
  3822.     return if @battler.sv.effect_data == []
  3823.     weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  3824.     move_anime if @battler.sv.effect_data[0][0] == "m_a"
  3825.     @battler.sv.effect_data.shift
  3826.   end
  3827.   #--------------------------------------------------------------------------
  3828.   # ● 武器アニメ実行
  3829.   #--------------------------------------------------------------------------
  3830.   def weapon_anime
  3831.     @weapon_data = @battler.sv.effect_data[0].dup
  3832.     set_graphics
  3833.     set_ox
  3834.     set_weapon_move
  3835.   end
  3836.   #--------------------------------------------------------------------------
  3837.   # ● アニメ移動実行
  3838.   #--------------------------------------------------------------------------
  3839.   def move_anime
  3840.     @move_data = @battler.sv.effect_data[0].dup
  3841.     # ターゲットを取得
  3842.     @target_battler = [@battler.sv.m_a_targets.shift]
  3843.     @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  3844.     set_move
  3845.     return if @move_data[16] == ""
  3846.     weapon_data = N03::ACTION[@move_data[16]]
  3847.     return if weapon_data == nil
  3848.     @weapon_data = weapon_data.dup
  3849.     set_graphics
  3850.     set_ox
  3851.     set_weapon_move
  3852.   end
  3853.   #--------------------------------------------------------------------------
  3854.   # ● 武器画像を取得
  3855.   #--------------------------------------------------------------------------  
  3856.   def set_graphics
  3857.     # 武器に依存しない画像設定がある場合
  3858.     if @weapon_data[13] != ""
  3859.       self.bitmap = Cache.character(@weapon_data[13]).dup
  3860.       @weapon_width = self.bitmap.width
  3861.       @weapon_height = self.bitmap.height
  3862.       return
  3863.     end
  3864.     # 武器を取得
  3865.     weapon = @battler.weapons[0]
  3866.     # 逆手装備を取得
  3867.     if @weapon_data[10]
  3868.       weapon = nil
  3869.       for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  3870.       weapon = @battler.weapons[1] if !weapon
  3871.     end  
  3872.     # 武器がなければ処理をキャンセル
  3873.     return if weapon == nil
  3874.     # インデックスを取得
  3875.     file_index = @weapon_data[12]
  3876.     # アイコンを利用するなら
  3877.     if @weapon_data[1] == 0
  3878.       icon_index = weapon.icon_index
  3879.       self.bitmap = Cache.system("Iconset" + file_index).dup
  3880.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  3881.       @weapon_width = @weapon_height = 24
  3882.     # 独自画像指定
  3883.     else
  3884.       file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  3885.       file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  3886.       self.bitmap = Cache.character(file_name + file_index).dup
  3887.       @weapon_width = self.bitmap.width
  3888.       @weapon_height = self.bitmap.height
  3889.       return if @weapon_data[1] == 1
  3890.       # 2003仕様の武器アニメ
  3891.       @weapon_width /= @battler.sv.max_pattern[0]
  3892.     end
  3893.   end
  3894.   #--------------------------------------------------------------------------
  3895.   # ● 画像の原点を取得
  3896.   #--------------------------------------------------------------------------  
  3897.   def set_ox
  3898.     # 反転時は設定を逆に
  3899.     if @mirror
  3900.       case @weapon_data[6]
  3901.       when 1 ; @weapon_data[6] = 2 # 左上→右上に
  3902.       when 2 ; @weapon_data[6] = 1 # 右上→左上に
  3903.       when 3 ; @weapon_data[6] = 4 # 左下→右下に
  3904.       when 4 ; @weapon_data[6] = 3 # 右下→左下に
  3905.       end
  3906.     end
  3907.     # 原点を設定
  3908.     case @weapon_data[6]
  3909.     when 0 # 中心
  3910.       self.ox = @weapon_width / 2
  3911.       self.oy = @weapon_height / 2
  3912.     when 1 # 左上
  3913.       self.ox = 0
  3914.       self.oy = 0
  3915.     when 2 # 右上
  3916.       self.ox = @weapon_width
  3917.       self.oy = 0
  3918.     when 3 # 左下
  3919.       self.ox = 0
  3920.       self.oy = @weapon_height
  3921.     when 4 # 右下
  3922.       self.ox = @weapon_width
  3923.       self.oy = @weapon_height
  3924.     when 5 # バトラーと同じ
  3925.       self.ox = @weapon_width / 2
  3926.       self.oy = @weapon_height
  3927.     end
  3928.   end  
  3929.   #--------------------------------------------------------------------------
  3930.   # ● バトラーの座標を取得
  3931.   #--------------------------------------------------------------------------  
  3932.   def set_battler_position
  3933.     @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  3934.     @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  3935.     reset_position
  3936.   end
  3937.   #--------------------------------------------------------------------------
  3938.   # ● 座標を初期化
  3939.   #--------------------------------------------------------------------------  
  3940.   def reset_position
  3941.     @real_x = @position_x / 100
  3942.     @real_y = @position_y / 100
  3943.     @real_zoom_x = 1
  3944.     @real_zoom_y = 1
  3945.   end
  3946.   #--------------------------------------------------------------------------
  3947.   # ● 戦闘アニメを表示
  3948.   #--------------------------------------------------------------------------  
  3949.   def set_animation(anime_id)
  3950.     return if $data_animations[anime_id] == nil
  3951.     @anime_position = $data_animations[anime_id].position
  3952.     @horming = true
  3953.     @horming = false if @anime_position == 3
  3954.     @anime_camera_zoom = true
  3955.     @anime_no_mirror = false
  3956.     start_animation($data_animations[anime_id], @mirror)
  3957.     timings = $data_animations[anime_id].timings
  3958.   end
  3959.   #--------------------------------------------------------------------------
  3960.   # ● ヒット時の戦闘アニメ実行
  3961.   #--------------------------------------------------------------------------  
  3962.   def set_hit_animation(position_data, hit_anime_id, target)
  3963.     return if $data_animations[hit_anime_id] == nil
  3964.     @real_x = position_data[0]
  3965.     @real_y = position_data[1]
  3966.     @position_x = position_data[0] * 100
  3967.     @position_y = position_data[1] * 100
  3968.     self.z = position_data[2]
  3969.     @z_plus = 1000
  3970.     @action_end = false
  3971.     @horming = true
  3972.     set_animation(hit_anime_id)
  3973.     @anime_time = $data_animations[hit_anime_id].frame_max * 4
  3974.     @timing_targets = [target]
  3975.     @move_time = @hit_anime_id = 0
  3976.     @weapon_data = []
  3977.   end
  3978.   #--------------------------------------------------------------------------
  3979.   # ● タイミングバトラー追加
  3980.   #--------------------------------------------------------------------------  
  3981.   def timing_battler_set(target)
  3982.     @timing_targets.push(target)
  3983.   end
  3984.   #--------------------------------------------------------------------------
  3985.   # ● 武器の動きを取得
  3986.   #--------------------------------------------------------------------------  
  3987.   def set_weapon_move
  3988.     # 開始位置を取得
  3989.     set_battler_position if @move_time == 0
  3990.     @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  3991.     self.z = @battler.sv.z + @z_plus
  3992.     # 反転処理
  3993.     @mirror = !@mirror if @weapon_data[7]
  3994.     self.mirror = @mirror
  3995.     # 更新パターンをセット
  3996.     set_pattern
  3997.     @max_pattern = 2 if @max_pattern == 1
  3998.     # 動きを計算
  3999.     @weapon_move_data = []
  4000.     @weapon_angle_data = []
  4001.     @weapon_zoom_data = []
  4002.     num = N03.mirror_num(@mirror)
  4003.     for i in 0...@max_pattern
  4004.       move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  4005.       move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  4006.       move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  4007.       move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  4008.       move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  4009.       @weapon_move_data.push([move_data_x, move_data_y])
  4010.       @weapon_angle_data.push(move_angle)
  4011.       @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  4012.     end
  4013.   end  
  4014.   #--------------------------------------------------------------------------
  4015.   # ● 更新パターン
  4016.   #--------------------------------------------------------------------------
  4017.   def set_pattern
  4018.     if @weapon_data[11] == -1
  4019.       return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  4020.       @count = @battler.sv.pattern_time
  4021.       @max_count = @battler.sv.pattern_time
  4022.       @max_pattern = @battler.sv.max_pattern[0]
  4023.       @repeat = false
  4024.     else
  4025.       @count = @weapon_data[11][0]
  4026.       @max_count = @weapon_data[11][0]
  4027.       @max_pattern = @weapon_data[11][1]
  4028.       @repeat = @weapon_data[11][2]
  4029.     end
  4030.     @pattern = 0
  4031.   end
  4032.   #--------------------------------------------------------------------------
  4033.   # ● 移動実行
  4034.   #--------------------------------------------------------------------------
  4035.   def set_move
  4036.     # 戦闘アニメを取得
  4037.     set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  4038.     @anime_camera_zoom = @move_data[13]
  4039.     @loop = @move_data[14]
  4040.     @loop = false if @move_data[1][0] == 0
  4041.     @anime_no_mirror = @move_data[15]
  4042.     @se_flag = @move_data[17]
  4043.     # 開始位置を取得
  4044.     start_position
  4045.     @z_plus = 1000 if @move_data[9]
  4046.     # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
  4047.     @timing_targets = @target_battler
  4048.     # 座標計算
  4049.     @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  4050.     @move_y = @move_data[5][1]* 100
  4051.     # 時間計算か速度計算か
  4052.     @distanse_move = true if @move_data[6] > 0
  4053.     @move_time = @move_data[6].abs
  4054.     # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
  4055.     if @move_time == 0
  4056.       @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  4057.       @move_time = 1 if !$data_animations[@move_data[1][0]]
  4058.       @distanse_move = false
  4059.     end
  4060.     # 貫通タイプの場合
  4061.     @through = true if @move_data[7] == 1
  4062.     @auto_through_flag = false
  4063.     @auto_through_flag = true if @move_data[7] == 0
  4064.     # ターゲット座標計算
  4065.     if @target_battler == nil
  4066.       @target_x = @move_x * 100
  4067.       @target_x = (Graphics.width - @move_x) * 100 if @mirror
  4068.       @target_y = @move_y * 100
  4069.     else
  4070.       move_data_set
  4071.     end
  4072.     # ターゲットに到達するまでの時間を計算
  4073.     @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  4074.     # 円軌道計算
  4075.     orbit
  4076.     # バトラーのウエイト設定
  4077.     @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  4078.     @move_horming = @move_data[12]
  4079.   end  
  4080.   #--------------------------------------------------------------------------
  4081.   # ● 速度を時間に変換
  4082.   #--------------------------------------------------------------------------
  4083.   def distanse_calculation(time, target_x, target_y)
  4084.     return time if !@distanse_move
  4085.     distanse_x = @position_x - @target_x
  4086.     distanse_x = @target_x - @position_x if @target_x > @position_x
  4087.     distanse_y = @position_y - @target_y
  4088.     distanse_y = @target_y - @position_y if @target_y > @position_y
  4089.     distanse = [distanse_x, distanse_y].max
  4090.     return distanse / (time * 100) + 1
  4091.   end
  4092.   #--------------------------------------------------------------------------
  4093.   # ● 移動目標の更新
  4094.   #--------------------------------------------------------------------------
  4095.   def move_data_set
  4096.     return if @target_battler == nil
  4097.     position = N03.get_targets_position(@target_battler, true, @anime_position)
  4098.     @target_x = position[0] + @move_x
  4099.     @target_y = position[1] + position[2] + @move_y
  4100.   end
  4101.   #--------------------------------------------------------------------------
  4102.   # ● 開始位置を計算
  4103.   #--------------------------------------------------------------------------
  4104.   def start_position
  4105.     starter = [@battler.sv.m_a_starter.shift]
  4106.     starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  4107.     position = [0, 0]
  4108.     position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  4109.     @position_x = position[0] + @move_data[4][0] * 100
  4110.     @position_y = position[1] + position[2] + @move_data[4][1] * 100
  4111.     @position_z = @position_y
  4112.   end  
  4113.   #--------------------------------------------------------------------------
  4114.   # ● 円軌道計算
  4115.   #--------------------------------------------------------------------------
  4116.   def orbit
  4117.     orbit_data = @move_data[8].dup
  4118.     orbit_data[0] *= 100
  4119.     orbit_data[1] *= 100
  4120.     orbit_d = []
  4121.     for i in 0...@move_time / 2
  4122.       @orbit[i] = orbit_data[0]
  4123.       orbit_data[0] /= 2
  4124.       orbit_d[i] = orbit_data[1]
  4125.       orbit_data[1] /= 2
  4126.     end
  4127.     @orbit = @orbit + orbit_d.reverse!
  4128.     @orbit.reverse!
  4129.   end  
  4130.   #--------------------------------------------------------------------------
  4131.   # ● フレーム更新
  4132.   #--------------------------------------------------------------------------
  4133.   def update
  4134.     update_hit_anime if @anime_time != 0
  4135.     update_move if @move_time != 0
  4136.     update_weapon_move if @weapon_data != []
  4137.     update_position
  4138.     update_color
  4139.     super
  4140.   end
  4141.   #--------------------------------------------------------------------------
  4142.   # ● ヒット時の戦闘アニメ
  4143.   #--------------------------------------------------------------------------
  4144.   def update_hit_anime
  4145.     @anime_time -= 1
  4146.     @action_end = true if @anime_time == 0
  4147.   end
  4148.   #--------------------------------------------------------------------------
  4149.   # ● 移動の更新
  4150.   #--------------------------------------------------------------------------
  4151.   def update_move
  4152.     move_data_set if @move_horming && !@hit_position
  4153.     through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  4154.     @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  4155.     @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  4156.     @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  4157.     reset_position
  4158.     set_animation(@move_data[1][0]) if @loop && !animation?
  4159.     @move_time -= 1
  4160.     return if @move_time != 0
  4161.     @action_end = true if !@action_end_cancel
  4162.   end
  4163.   #--------------------------------------------------------------------------
  4164.   # ● 武器の動きを更新
  4165.   #--------------------------------------------------------------------------
  4166.   def update_weapon_move
  4167.     pattern = update_pattern
  4168.     set_battler_position if @move_time == 0 && !@action_end_cancel
  4169.     @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  4170.     @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  4171.     @real_zoom_x = @weapon_zoom_data[pattern][0]
  4172.     @real_zoom_y = @weapon_zoom_data[pattern][1]
  4173.     self.angle = @weapon_angle_data[pattern]
  4174.     self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  4175.   end
  4176.   #--------------------------------------------------------------------------
  4177.   # ● パターンを更新
  4178.   #--------------------------------------------------------------------------
  4179.   def update_pattern
  4180.     return @battler.sv.pattern_w if @count == nil
  4181.     @count -= 1
  4182.     return @pattern if @count != 0
  4183.     @count = @max_count
  4184.     @pattern += 1
  4185.     if !@repeat && @pattern == @max_pattern
  4186.       @pattern = @max_pattern - 1
  4187.     elsif @pattern == @max_pattern
  4188.       @pattern = 0
  4189.     end
  4190.     return @pattern
  4191.   end
  4192.   #--------------------------------------------------------------------------
  4193.   # ● 座標を更新
  4194.   #--------------------------------------------------------------------------
  4195.   def update_position
  4196.     self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  4197.     self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  4198.     self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  4199.     self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  4200.     self.z = @battler.sv.z + @z_plus - 10
  4201.     self.zoom_x = @real_zoom_x * $sv_camera.zoom
  4202.     self.zoom_y = @real_zoom_y * $sv_camera.zoom
  4203.     self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  4204.   end
  4205.   #--------------------------------------------------------------------------
  4206.   # ● 貫通の処理
  4207.   #--------------------------------------------------------------------------
  4208.   def through_set(time, target_x, target_y)
  4209.     @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  4210.     @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  4211.     moving_x = (target_x / 100 - @position_x / 100) / time
  4212.     moving_y = (target_y / 100 - @position_y / 100) / time
  4213.     goal_x = $sv_camera.max_left - 100 if moving_x < 0
  4214.     goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  4215.     goal_y = $sv_camera.max_top - 100 if moving_y < 0
  4216.     goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  4217.     if goal_x == nil &&  goal_y == nil
  4218.       time = 0
  4219.       reset_position
  4220.     else
  4221.       time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  4222.     end
  4223.     target_x = @position_x + moving_x * time * 100
  4224.     target_y = @position_y + moving_y * time * 100
  4225.     @pre_data = [time, target_x, target_y]
  4226.     @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  4227.     @action_end_cancel = true
  4228.     @hit_position = [@real_x, @real_y, self.z]
  4229.   end  
  4230.   #--------------------------------------------------------------------------
  4231.   # ● 到達時間試算
  4232.   #--------------------------------------------------------------------------
  4233.   def move_calculation(moving_x, moving_y, goal_x, goal_y)
  4234.     move_x = @position_x / 100
  4235.     move_y = @position_y / 100
  4236.     time = 0
  4237.     loop do
  4238.       move_x += moving_x
  4239.       move_y += moving_y
  4240.       time += 1
  4241.       return time if moving_x < 0 && move_x < goal_x
  4242.       return time if moving_x > 0 && move_x > goal_x
  4243.       return time if moving_y < 0 && move_y < goal_y
  4244.       return time if moving_y > 0 && move_y > goal_y
  4245.     end
  4246.   end   
  4247.   #--------------------------------------------------------------------------
  4248.   # ● ミス時に消える処理から貫通処理に変換
  4249.   #--------------------------------------------------------------------------
  4250.   def through_change
  4251.     @action_end_cancel = false
  4252.     @through = true
  4253.     @move_time = @pre_data[0]
  4254.     @target_x = @pre_data[1]
  4255.     @target_y = @pre_data[2]
  4256.     @pre_data = nil
  4257.   end  
  4258.   #--------------------------------------------------------------------------
  4259.   # ● SE とフラッシュのタイミング処理
  4260.   #--------------------------------------------------------------------------
  4261.   def animation_process_timing(timing)
  4262.     return if !@timing_targets
  4263.     se_flag = true
  4264.     se_flag = @se_flag if @se_flag != nil
  4265.     for target in @timing_targets
  4266.       target.sv.timing.push([se_flag, timing.dup])
  4267.       se_flag = false if @animation.position == 3
  4268.     end  
  4269.   end
  4270.   #--------------------------------------------------------------------------
  4271.   # ● 色調の更新
  4272.   #--------------------------------------------------------------------------
  4273.   def update_color
  4274.     return if @battler.sv.color == []
  4275.     self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  4276.   end
  4277.   #--------------------------------------------------------------------------
  4278.   # ● 解放
  4279.   #--------------------------------------------------------------------------
  4280.   def dispose
  4281.     super
  4282.     self.bitmap.dispose if self.bitmap != nil
  4283.   end
  4284. end

  4285. #==============================================================================
  4286. # ■ Sprite_Battle_Picture
  4287. #------------------------------------------------------------------------------
  4288. #  ピクチャ表示用のスプライトです。
  4289. #==============================================================================
  4290. class Sprite_Battle_Picture < Sprite
  4291.   #--------------------------------------------------------------------------
  4292.   # ● 公開インスタンス変数 
  4293.   #--------------------------------------------------------------------------
  4294.   attr_accessor   :action_end           # 終了フラグ
  4295.   #--------------------------------------------------------------------------
  4296.   # ● オブジェクト初期化
  4297.   #--------------------------------------------------------------------------
  4298.   def initialize(viewport = nil)
  4299.     super(viewport)
  4300.     @action_end = false
  4301.     self.ox = 0
  4302.   end
  4303.   #--------------------------------------------------------------------------
  4304.   # ● セット
  4305.   #--------------------------------------------------------------------------
  4306.   def set(battler)
  4307.     @battler = battler
  4308.     @data = @battler.sv.effect_data.shift
  4309.     @time = @data[4]
  4310.     @mirror = $sv_camera.mirror
  4311.     @mirror = false if !@data[8]
  4312.     self.opacity = @data[6][0]
  4313.     @s_x = @data[2][0] if @data[2] != []
  4314.     @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
  4315.     @s_y = @data[2][1] if @data[2] != []
  4316.     @e_x = @data[3][0] if @data[3] != []
  4317.     @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  4318.     @e_y = @data[3][1] if @data[3] != []
  4319.     @s_x = self.x if @data[2] == []
  4320.     @s_y = self.y if @data[2] == []
  4321.     @e_x = self.x if @data[3] == []
  4322.     @e_y = self.y if @data[3] == []
  4323.     self.x = @s_x
  4324.     self.y = @s_y
  4325.     return @action_end = true if @time == 0
  4326.     @move_x = (@e_x * 1.0 - @s_x) / @time
  4327.     @move_y = (@e_y * 1.0 - @s_y) / @time
  4328.     self.z = @data[5]
  4329.     return set_plane(battler) if @data[7] != []
  4330.     self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  4331.     return @action_end = true if !bitmap
  4332.     self.mirror = @mirror
  4333.     self.ox = self.bitmap.width if @mirror
  4334.   end
  4335.   #--------------------------------------------------------------------------
  4336.   # ● プレーン移行
  4337.   #--------------------------------------------------------------------------
  4338.   def set_plane(battler)
  4339.     @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  4340.     viewport = @viewport
  4341.     @plane = Plane.new(viewport) if !@plane
  4342.     @plane.bitmap = Cache.picture(@data[9]) if [email protected] or @data[9] != ""
  4343.     return @action_end = true if [email protected]
  4344.     @plane.ox = @data[7][0]
  4345.     @plane.oy = @data[7][1]
  4346.     @plane.opacity = @data[6][0]
  4347.     @move_x = @remain_move[0] if @data[2] == @data[3]
  4348.     @move_y = @remain_move[1] if @data[2] == @data[3]
  4349.     @remain_move = [@move_x, @move_y]
  4350.   end
  4351.   #--------------------------------------------------------------------------
  4352.   # ● フレーム更新
  4353.   #--------------------------------------------------------------------------
  4354.   def update
  4355.     @action_end = true if [email protected]
  4356.     return if @time == 0
  4357.     return if @action_end
  4358.     @time -= 1
  4359.     return plane_update if @plane
  4360.     super
  4361.     self.x += @move_x
  4362.     self.y += @move_y
  4363.     self.opacity += @data[6][1]
  4364.     return if @time != 1
  4365.     self.x = @e_x
  4366.     self.y = @e_y
  4367.     @time = 0
  4368.   end
  4369.   #--------------------------------------------------------------------------
  4370.   # ● フレーム更新
  4371.   #--------------------------------------------------------------------------
  4372.   def plane_update
  4373.     @plane.ox += @move_x
  4374.     @plane.oy += @move_y
  4375.     @plane.opacity += @data[6][1]
  4376.     @time = @data[4] if @time == 0
  4377.   end
  4378.   #--------------------------------------------------------------------------
  4379.   # ● 解放
  4380.   #--------------------------------------------------------------------------
  4381.   def dispose
  4382.     bitmap.dispose if bitmap
  4383.     @plane.dispose if @plane
  4384.     @viewport.dispose if @viewport
  4385.     super
  4386.   end
  4387. end

  4388. #==============================================================================
  4389. # ■ Sprite_Back_Picture
  4390. #------------------------------------------------------------------------------
  4391. #  周期ピクチャ用のスプライトです。
  4392. #==============================================================================
  4393. class Sprite_Back_Picture < Plane
  4394.   #--------------------------------------------------------------------------
  4395.   # ● 公開インスタンス変数 
  4396.   #--------------------------------------------------------------------------
  4397.   attr_accessor   :action_end           # 終了フラグ
  4398.   #--------------------------------------------------------------------------
  4399.   # ● オブジェクト初期化
  4400.   #--------------------------------------------------------------------------
  4401.   def initialize(viewport = nil, index)
  4402.     super(viewport)
  4403.     @index = index
  4404.     @real_x = 0
  4405.     @real_y = 0
  4406.     @real_opacity = 0
  4407.     @move_x = 0
  4408.     @move_y = 0
  4409.     @move_opacity = 0
  4410.     @time = 0
  4411.     @switche = 0
  4412.     @action_end = false
  4413.   end
  4414.   #--------------------------------------------------------------------------
  4415.   # ● セットアップ
  4416.   #--------------------------------------------------------------------------
  4417.   def setup(data)
  4418.     self.bitmap = Cache.picture(data[9])
  4419.     self.z = data[6]
  4420.     @switche = data[1]
  4421.     mirror = $sv_camera.mirror
  4422.     mirror = false if !data[8]
  4423.     @move_x = data[3][0]
  4424.     @move_x *= -1 if mirror
  4425.     @move_y = data[3][1]
  4426.     @time = data[4]
  4427.     @time = -1 if @time == 0
  4428.     @real_opacity = (data[5][0] + 1) * 100
  4429.     @move_opacity = data[5][1]
  4430.     @start_opacity = data[5][0]
  4431.     @shake_ok = data[7]
  4432.   end
  4433.   #--------------------------------------------------------------------------
  4434.   # ● フレーム更新
  4435.   #--------------------------------------------------------------------------
  4436.   def update
  4437.     update_picture if @time != 0
  4438.     self.ox = $sv_camera.x - @real_x
  4439.     self.oy = $sv_camera.y - @real_y
  4440.     if @shake_ok
  4441.       self.ox -= $sv_camera.sx / 100
  4442.       self.oy -= $sv_camera.sy / 100
  4443.     end
  4444.     self.ox *= $sv_camera.zoom
  4445.     self.oy *= $sv_camera.zoom
  4446.     self.zoom_x = @zoom_x * $sv_camera.zoom
  4447.     self.zoom_y = @zoom_y * $sv_camera.zoom
  4448.     self.opacity = @real_opacity / 100
  4449.     @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  4450.     @switche
  4451.     @action_end = true if @switche > 0 && !$game_switches[@switche]
  4452.     @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  4453.   end
  4454.   #--------------------------------------------------------------------------
  4455.   # ● ピクチャの更新
  4456.   #--------------------------------------------------------------------------
  4457.   def update_picture
  4458.     @real_x += @move_x / 100
  4459.     @real_y += @move_y / 100
  4460.     @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  4461.     @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  4462.     @zoom_x = 1
  4463.     @zoom_y = 1
  4464.     @real_opacity += @move_opacity
  4465.     @time -= 1
  4466.     @time = -1 if @time < -100
  4467.   end
  4468. end

  4469. #==============================================================================
  4470. # ■ Sprite_Back_Picture
  4471. #------------------------------------------------------------------------------
  4472. #  ダメージ表示のスプライトです。
  4473. #==============================================================================
  4474. class Sprite_Damage < Sprite
  4475.   #--------------------------------------------------------------------------
  4476.   # ● 公開インスタンス変数 
  4477.   #--------------------------------------------------------------------------
  4478.   attr_reader   :action_end                  # POP終了フラグ
  4479.   #--------------------------------------------------------------------------
  4480.   # ● オブジェクト初期化
  4481.   #--------------------------------------------------------------------------
  4482.   def initialize(viewport = nil, battler)
  4483.     super(viewport)
  4484.     @battler = battler
  4485.     @time = 0
  4486.     return @action_end = true if !@battler
  4487.     @direction = -1
  4488.     @direction *= -1 if @battler.actor?
  4489.     @direction *= -1 if $sv_camera.mirror
  4490.     set_state
  4491.     set_damage
  4492.     update
  4493.   end
  4494.   #--------------------------------------------------------------------------
  4495.   # ● ステート表示
  4496.   #--------------------------------------------------------------------------
  4497.   def set_state
  4498.     return if !N03::STATE_POP
  4499.     states = @battler.result.added_state_objects
  4500.     states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  4501.     return if states == []
  4502.     return if @battler.sv.add_state == @battler.result.added_state_objects
  4503.     @battler.sv.add_state = states.dup
  4504.     @st = []
  4505.     @st_base = []
  4506.     for i in 0...states.size
  4507.       @st[i] = Sprite.new
  4508.       bitmap_state(@st[i], states[i])
  4509.       @st_base[i] = []
  4510.       @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  4511.       @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  4512.       @st[i].z = 1000 + i
  4513.       @st[i].opacity = 0
  4514.     end
  4515.     @time = @pop_time = 80
  4516.   end   
  4517.   #--------------------------------------------------------------------------
  4518.   # ● ステート画像
  4519.   #--------------------------------------------------------------------------
  4520.   def bitmap_state(state, state_object)
  4521.     name = state_object.name
  4522.     state.bitmap = Cache.system("Iconset").dup
  4523.     state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  4524.     @state_height = 24
  4525.   end
  4526.   #--------------------------------------------------------------------------
  4527.   # ● ダメージ表示
  4528.   #--------------------------------------------------------------------------
  4529.   def set_damage
  4530.     return @action_end = true if !N03::DAMAGE_POP
  4531.     damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  4532.     damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
  4533.     damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  4534.     damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
  4535.     damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  4536.     if !damage or damage == 0
  4537.       @action_end = true if @st == nil
  4538.       return # ステートだけPOPする設定を考慮して@action_endは返さない
  4539.     end
  4540.     @hit = @battler.sv.hit
  4541.     @battler.sv.hit += 1 if damage > 0
  4542.     file = N03::DAMAGE_PLUS if damage > 0
  4543.     file = N03::DAMAGE_MINUS if damage < 0
  4544.     add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  4545.     add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  4546.     adjust_x = N03::DAMAGE_ADJUST
  4547.     @num = []
  4548.     @num_base = []
  4549.     damage = damage.abs
  4550.     max_num = damage.to_s.size
  4551.     max_num += 1 if add_file != nil
  4552.     for i in 0...max_num
  4553.       @num[i] = Sprite.new
  4554.       if add_file != nil && i == max_num - 1
  4555.         @num[i].bitmap = Cache.system(add_file)
  4556.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  4557.         sw = 0 if sw == nil
  4558.       else
  4559.         @num[i].bitmap = Cache.system(file)
  4560.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  4561.         sw = @num[i].bitmap.width / 10
  4562.         @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  4563.       end
  4564.       @num_base[i] = []
  4565.       @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  4566.       @num_base[i][1] =  -(@num[i].bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  4567.       @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  4568.       @num[i].z = 1000 + i + @hit * 10
  4569.     end
  4570.     @time = @pop_time = 80
  4571.   end
  4572.   #--------------------------------------------------------------------------
  4573.   # ● フレーム更新
  4574.   #--------------------------------------------------------------------------
  4575.   def update
  4576.     return if @time == 0
  4577.     for i in [email protected] do update_state_move(@st[i], i) end if @st != nil
  4578.     for i in [email protected] do update_num_move(@num[i], i) end if @num != nil
  4579.     @time -= 1
  4580.     @action_end = true if @time == 0
  4581.   end
  4582.   #--------------------------------------------------------------------------
  4583.   # ● ステート画像の更新
  4584.   #--------------------------------------------------------------------------
  4585.   def update_state_move(state, index)
  4586.     min = @pop_time - index * 2
  4587.     case @time
  4588.     when min-15..min
  4589.       @st_base[index][0] += @direction
  4590.       state.opacity += 25
  4591.     when min-80..min-50
  4592.       @st_base[index][0] += @direction
  4593.       state.opacity -= 25
  4594.     end
  4595.     state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  4596.     state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  4597.   end
  4598.   #--------------------------------------------------------------------------
  4599.   # ● 数値の更新
  4600.   #--------------------------------------------------------------------------
  4601.   def update_num_move(num, index)
  4602.     min = @pop_time - index * 2
  4603.     case @time
  4604.     when min-1..min
  4605.       @num_base[index][0] += @direction * @hit
  4606.       @num_base[index][1] -= 5 + @hit * 2
  4607.     when min-3..min-2
  4608.       @num_base[index][0] += @direction * @hit
  4609.       @num_base[index][1] -= 4 + @hit * 2
  4610.     when min-6..min-4
  4611.       @num_base[index][0] += @direction
  4612.       @num_base[index][1] -= 3 + @hit * 2
  4613.     when min-14..min-7
  4614.       @num_base[index][0] += @direction
  4615.       @num_base[index][1] += 2
  4616.     when min-17..min-15
  4617.       @num_base[index][1] -= 2 + @hit * 2
  4618.     when min-23..min-18
  4619.       @num_base[index][1] += 1
  4620.     when min-27..min-24
  4621.       @num_base[index][1] -= 1
  4622.     when min-30..min-28
  4623.       @num_base[index][1] += 1
  4624.     when min-33..min-31
  4625.       @num_base[index][1] -= 1
  4626.     when min-36..min-34
  4627.       @num_base[index][1] += 1
  4628.     end
  4629.     num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  4630.     num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  4631.     num.opacity = 256 - (12 - @time) * 32
  4632.     num.visible = false if @time == 0
  4633.   end
  4634.   #--------------------------------------------------------------------------
  4635.   # ● 解放
  4636.   #--------------------------------------------------------------------------
  4637.   def dispose
  4638.     @battler.sv.hit = 0
  4639.     bitmap.dispose if bitmap
  4640.     for i in [email protected] do @num[i].dispose end if @num != nil
  4641.     for i in [email protected] do @st[i].dispose end if @st != nil
  4642.     super
  4643.   end
  4644. end

  4645. #==============================================================================
  4646. # ■ Window_Skill_name
  4647. #------------------------------------------------------------------------------
  4648. #  スキル名を表示するウィンドウです。
  4649. #==============================================================================
  4650. class Window_Skill_name < Window_Base
  4651.   #--------------------------------------------------------------------------
  4652.   # ● オブジェクト初期化
  4653.   #--------------------------------------------------------------------------
  4654.   def initialize(text)
  4655.     super(0, 0, Graphics.width, line_height + standard_padding * 2)
  4656.     draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  4657.   end
  4658. end

  4659. #==============================================================================
  4660. # ■ Spriteset_Sideview
  4661. #------------------------------------------------------------------------------
  4662. #  サイドビュー独自のスプライトをまとめたクラスです。
  4663. #==============================================================================
  4664. class Spriteset_Sideview
  4665.   #--------------------------------------------------------------------------
  4666.   # ● オブジェクト初期化
  4667.   #--------------------------------------------------------------------------
  4668.   def initialize(viewport)
  4669.     @viewport = viewport
  4670.     @weapons = []
  4671.     @pictures = []
  4672.     @back_pic = []
  4673.     @damage = []
  4674.     $sv_camera.setup
  4675.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  4676.   end
  4677.   #--------------------------------------------------------------------------
  4678.   # ● フレーム更新
  4679.   #--------------------------------------------------------------------------
  4680.   def update
  4681.     update_battler_data
  4682.     update_damage
  4683.     update_pictures
  4684.     update_back_pic
  4685.     update_weapons
  4686.   end  
  4687.   #--------------------------------------------------------------------------
  4688.   # ● バトラーデータの更新
  4689.   #--------------------------------------------------------------------------
  4690.   def update_battler_data
  4691.     for battler in $game_party.battle_members + $game_troop.members
  4692.       weapon_end(battler) if battler.sv.weapon_end
  4693.       next if battler.sv.effect_data == []
  4694.       for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  4695.     end
  4696.   end
  4697.   #--------------------------------------------------------------------------
  4698.   # ● ダメージ画像の更新
  4699.   #--------------------------------------------------------------------------
  4700.   def update_damage
  4701.     for i in [email protected]
  4702.       next if @damage[i] == nil
  4703.       @damage[i].update if @damage[i] != nil
  4704.       next if !@damage[i].action_end
  4705.       @damage[i].dispose
  4706.       @damage[i] = nil
  4707.     end
  4708.   end
  4709.   #--------------------------------------------------------------------------
  4710.   # ● ピクチャアクションの更新
  4711.   #--------------------------------------------------------------------------
  4712.   def update_pictures
  4713.     for i in [email protected]
  4714.       next if @pictures[i] == nil
  4715.       @pictures[i].update if @pictures[i] != nil
  4716.       next if !@pictures[i].action_end
  4717.       @pictures[i].dispose
  4718.       @pictures[i] = nil
  4719.     end
  4720.   end
  4721.   #--------------------------------------------------------------------------
  4722.   # ● 周期ピクチャの更新
  4723.   #--------------------------------------------------------------------------
  4724.   def update_back_pic
  4725.     set_back_pic if $sv_camera.program_picture != []
  4726.     for i in 0...@back_pic.size
  4727.       next if @back_pic[i] == nil
  4728.       @back_pic[i].update if @back_pic[i] != nil
  4729.       next if !@back_pic[i].action_end
  4730.       @back_pic[i].dispose
  4731.       @back_pic[i] = nil
  4732.     end
  4733.   end
  4734.   #--------------------------------------------------------------------------
  4735.   # ● 武器アクションの更新
  4736.   #--------------------------------------------------------------------------
  4737.   def update_weapons
  4738.     for i in [email protected]
  4739.       next if @weapons[i] == nil
  4740.       @weapons[i].update if @weapons[i] != nil
  4741.       next if !@weapons[i].action_end
  4742.       @weapons[i].dispose
  4743.       @weapons[i] = nil
  4744.     end
  4745.   end
  4746.   #--------------------------------------------------------------------------
  4747.   # ● ダメージ実行
  4748.   #--------------------------------------------------------------------------
  4749.   def set_damage_pop(target)
  4750.     for i in [email protected]
  4751.       next if @damage[i] != nil
  4752.       return @damage[i] = Sprite_Damage.new(@viewport, target)
  4753.     end
  4754.     @damage.push(Sprite_Damage.new(@viewport, target))
  4755.   end
  4756.   #--------------------------------------------------------------------------
  4757.   # ● 周期ピクチャ実行
  4758.   #--------------------------------------------------------------------------
  4759.   def set_back_pic
  4760.     for data in $sv_camera.program_picture
  4761.       if @back_pic[data[2]] != nil
  4762.         @back_pic[data[2]].dispose
  4763.         @back_pic[data[2]] = nil
  4764.       end
  4765.       @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  4766.       @back_pic[data[2]].setup(data)
  4767.     end
  4768.     $sv_camera.program_picture = []
  4769.   end
  4770.   #--------------------------------------------------------------------------
  4771.   # ● エフェクト開始
  4772.   #--------------------------------------------------------------------------
  4773.   def set_effects(battler, effect_data)
  4774.     case effect_data[0]
  4775.     when "pic" ; set_pictures(battler, effect_data)
  4776.     when  "wp" ; set_weapons(battler,  true)
  4777.     when "m_a" ; set_weapons(battler, false)
  4778.     end
  4779.   end
  4780.   #--------------------------------------------------------------------------
  4781.   # ● ピクチャアクション実行
  4782.   #--------------------------------------------------------------------------
  4783.   def set_pictures(battler, effect_data)
  4784.     @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  4785.     @pictures[effect_data[1]].set(battler)
  4786.   end
  4787.   #--------------------------------------------------------------------------
  4788.   # ● 武器アクション実行
  4789.   #--------------------------------------------------------------------------
  4790.   def set_weapons(battler, weapon_flag, test = true)
  4791.     for i in [email protected]
  4792.       next if @weapons[i] != nil
  4793.       @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  4794.       battler.sv.weapon_index.push(i) if weapon_flag
  4795.       return i
  4796.     end
  4797.     @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  4798.     battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  4799.     return @weapons.size - 1
  4800.   end
  4801.   #--------------------------------------------------------------------------
  4802.   # ● バトラーの武器アクション終了
  4803.   #--------------------------------------------------------------------------
  4804.   def weapon_end(battler)
  4805.     battler.sv.weapon_end = false
  4806.     for index in battler.sv.weapon_index
  4807.       weapon_index = battler.sv.weapon_index.shift
  4808.       @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  4809.       @weapons[weapon_index] = nil
  4810.     end
  4811.     battler.sv.weapon_index.compact!
  4812.   end  
  4813.   #--------------------------------------------------------------------------
  4814.   # ● ヒット時の戦闘アニメ実行
  4815.   #--------------------------------------------------------------------------
  4816.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  4817.     weapon = @weapons[weapon_index]
  4818.     for target in hit_targets
  4819.       next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  4820.       @hit_index = set_weapons(battler, false, false)
  4821.       @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  4822.     end
  4823.     @hit_index = nil
  4824.     if !weapon.through && !miss
  4825.       @weapons[weapon_index].dispose
  4826.       @weapons[weapon_index] = nil
  4827.     else
  4828.       @weapons[weapon_index].through_change
  4829.     end
  4830.   end
  4831.   #--------------------------------------------------------------------------
  4832.   # ● サイドビューデータの初期化
  4833.   #--------------------------------------------------------------------------
  4834.   def reset_sideview
  4835.     $sv_camera.reset
  4836.     for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  4837.   end  
  4838.   #--------------------------------------------------------------------------
  4839.   # ● 解放
  4840.   #--------------------------------------------------------------------------
  4841.   def dispose
  4842.     dispose_effects(@weapons)
  4843.     dispose_effects(@pictures)
  4844.     dispose_effects(@back_pic)
  4845.     dispose_effects(@damage)
  4846.     reset_sideview
  4847.   end
  4848.   #--------------------------------------------------------------------------
  4849.   # ● エフェクト画像の解放
  4850.   #--------------------------------------------------------------------------
  4851.   def dispose_effects(effects)
  4852.     for i in 0...effects.size
  4853.       effects[i].dispose if effects[i] != nil
  4854.       effects[i] = nil
  4855.     end
  4856.   end
  4857. end


  4858. #==============================================================================
  4859. # ■ Sprite_Battle_Back
  4860. #------------------------------------------------------------------------------
  4861. #  戦闘背景用のスプライトです。
  4862. #==============================================================================
  4863. class Sprite_Battle_Back < Plane
  4864.   #--------------------------------------------------------------------------
  4865.   # ● オブジェクト初期化
  4866.   #--------------------------------------------------------------------------
  4867.   def initialize(viewport = nil, index, battleback_name)
  4868.     super(viewport)
  4869.     @index = index
  4870.     if @index == 1
  4871.       data = N03::FLOOR1_DATA[battleback_name]
  4872.       data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  4873.     elsif @index == 2
  4874.       data = N03::FLOOR2_DATA[battleback_name]
  4875.       data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  4876.     end   
  4877.     data = data.dup
  4878.     @adjust_position = data[0]
  4879.     @zoom_x = data[1][0] / 100.0
  4880.     @zoom_y = data[1][1] / 100.0
  4881.     @shake_on = data[2]
  4882.     $game_switches[data[3]] = true if data[3] > 0
  4883.     $sv_camera.switches[data[3].abs] = true if data[3] < 0
  4884.     reset_scroll
  4885.     reset_back_data(battleback_name)
  4886.   end
  4887.   #--------------------------------------------------------------------------
  4888.   # ● 背景スクロールを初期化
  4889.   #--------------------------------------------------------------------------
  4890.   def reset_scroll
  4891.     @scroll_x = 0
  4892.     @scroll_y = 0
  4893.     @move_x = 0
  4894.     @move_y = 0
  4895.   end
  4896.   #--------------------------------------------------------------------------
  4897.   # ● 背景データを初期化
  4898.   #--------------------------------------------------------------------------
  4899.   def reset_back_data(battleback_name)
  4900.     @back_data = []
  4901.     @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  4902.     start_back_data(@active_data)
  4903.   end  
  4904.   #--------------------------------------------------------------------------
  4905.   # ● 背景画像のセッティング
  4906.   #--------------------------------------------------------------------------
  4907.   def set_graphics(new_bitmap)
  4908.     self.bitmap = new_bitmap
  4909.     @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  4910.     @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  4911.     # 限界座標を取得
  4912.     max_top =  0
  4913.     max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  4914.     max_left = 0
  4915.     max_right = self.bitmap.width * @zoom_x - Graphics.width
  4916.     exist = true
  4917.     exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  4918.     $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  4919.   end
  4920.   #--------------------------------------------------------------------------
  4921.   # ● フレーム更新
  4922.   #--------------------------------------------------------------------------
  4923.   def update
  4924.     return if !bitmap
  4925.     update_back_data
  4926.     update_scroll unless @move_x == 0 && @move_y == 0
  4927.     update_color
  4928.     update_position
  4929.     update_back_adjust if @bt_back != nil
  4930.     create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  4931.   end
  4932.   #--------------------------------------------------------------------------
  4933.   # ● 背景データを更新
  4934.   #--------------------------------------------------------------------------
  4935.   def update_back_data
  4936.     delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  4937.     delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  4938.     return if !delete
  4939.     for i in 0...@back_data.size
  4940.       @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  4941.       @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  4942.     end
  4943.     @back_data.compact!
  4944.     next_back_data
  4945.   end
  4946.   #--------------------------------------------------------------------------
  4947.   # ● 次の背景データをセット
  4948.   #--------------------------------------------------------------------------
  4949.   def next_back_data
  4950.     @back_data.delete(@active_data[11]) if @active_data[11] != nil
  4951.     @back_data.push(@active_data[11]) if @active_data[11] != nil
  4952.     @active_data = nil
  4953.     data = @back_data.pop
  4954.     @back_data = [@active_data] if @back_data.size == 0
  4955.     start_back_data(data)
  4956.   end  
  4957.   #--------------------------------------------------------------------------
  4958.   # ● 背景データを実行
  4959.   #--------------------------------------------------------------------------
  4960.   def start_back_data(data)
  4961.     return if back_data_remain(data)
  4962.     bt_back_dispose
  4963.     pre_active_data = @active_data
  4964.     @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  4965.     @back_data.push(@active_data)     if @active_data != nil
  4966.     @active_data = data.dup
  4967.     @active_data[5] = @back_name      if @active_data[5] == ""
  4968.     @active_data[9] = set_back_adjust if @active_data[9] == nil
  4969.     back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
  4970.     set_remain_back_data              if @active_data[8] != nil
  4971.     create_back(@active_data[5])      if @active_data[9][0] == false
  4972.     create_back_adjust                if @active_data[10]
  4973.     @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  4974.   end  
  4975.   #--------------------------------------------------------------------------
  4976.   # ● 背景データの保留
  4977.   #--------------------------------------------------------------------------
  4978.   def back_data_remain(data)
  4979.     remain = false
  4980.     remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  4981.     remain = true if @active_data != nil && @active_data[7] == false
  4982.     return remain if !remain
  4983.     @remain = true
  4984.     @back_data.push(data)
  4985.     return remain
  4986.   end  
  4987.   #--------------------------------------------------------------------------
  4988.   # ● 背景変更補正データをセット
  4989.   #--------------------------------------------------------------------------
  4990.   def set_back_adjust
  4991.     bt_adjust = []
  4992.     sign = -1
  4993.     if @active_data[6] == ""
  4994.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  4995.       bt_adjust = [false,false,0,0]
  4996.       return bt_adjust
  4997.     elsif @move_x != 0 or @active_data[3][0] != 0
  4998.       sign = 1 if @move_x < 0
  4999.       bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  5000.       bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  5001.     elsif @move_y != 0 or @active_data[3][1] != 0
  5002.       sign = 1 if @move_y < 0
  5003.       bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  5004.       bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  5005.     else
  5006.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  5007.       bt_adjust = [false,false,0,0]
  5008.       return bt_adjust
  5009.     end
  5010.     bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  5011.     return bt_adjust
  5012.   end
  5013.   #--------------------------------------------------------------------------
  5014.   # ● 背景スクロールデータを実行
  5015.   #--------------------------------------------------------------------------
  5016.   def back_data_scroll_on
  5017.     mirror = $sv_camera.mirror
  5018.     mirror = false if !@active_data[4]
  5019.     @move_x = @active_data[3][0]
  5020.     @move_x *= -1 if mirror
  5021.     @move_y = @active_data[3][1]
  5022.   end
  5023.   #--------------------------------------------------------------------------
  5024.   # ● 保持している背景データを実行
  5025.   #--------------------------------------------------------------------------
  5026.   def set_remain_back_data
  5027.     return back_data_scroll_on if @move_x != 0 or @move_y != 0
  5028.     create_back(@active_data[8][0])
  5029.     @move_x    = @active_data[8][1]
  5030.     @move_y    = @active_data[8][2]
  5031.     @scroll_x  = @active_data[8][3]
  5032.     @scroll_y  = @active_data[8][4]
  5033.   end  
  5034.   #--------------------------------------------------------------------------
  5035.   # ● 背景画像の作成
  5036.   #--------------------------------------------------------------------------
  5037.   def create_back(back_name)
  5038.     return if back_name == @back_name or back_name == ""
  5039.     self.bitmap = Cache.battleback1(back_name) if @index == 1
  5040.     self.bitmap = Cache.battleback2(back_name) if @index == 2
  5041.     @back_name = back_name
  5042.   end  
  5043.   #--------------------------------------------------------------------------
  5044.   # ● 背景変更補正画像の作成
  5045.   #--------------------------------------------------------------------------
  5046.   def create_back_adjust
  5047.     return if @active_data[9][0] == false
  5048.     @active_data[10] = true
  5049.     mirror = $sv_camera.mirror
  5050.     mirror = false if !@active_data[4]
  5051.     @bt_back = []
  5052.     @bt_back[0] = Sprite.new(viewport)
  5053.     @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  5054.     @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  5055.     @bt_back[0].mirror = mirror
  5056.     @bt_back[1] = Sprite.new(viewport)
  5057.     @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  5058.     @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  5059.     @bt_back[1].mirror = mirror
  5060.   end
  5061.   #--------------------------------------------------------------------------
  5062.   # ● 背景スクロールの更新
  5063.   #--------------------------------------------------------------------------
  5064.   def update_scroll
  5065.     @scroll_x += @move_x
  5066.     @scroll_y += @move_y
  5067.     @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  5068.     @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  5069.   end
  5070.   #--------------------------------------------------------------------------
  5071.   # ● 色調変更の更新
  5072.   #--------------------------------------------------------------------------
  5073.   def update_color
  5074.     color_set if $sv_camera.color_set[@index] != nil
  5075.     return if @color_data == nil
  5076.     @color_data[4] -= 1
  5077.     if @color_data[4] == 0 && @color_data[5] != 0
  5078.       @color_data[4] = @color_data[5]
  5079.       @color_data[5] = 0
  5080.       @color_data[6] = [0,0,0,0]
  5081.     elsif @color_data[4] == 0
  5082.       @remain_color_data = @color_data
  5083.       return @color_data = nil
  5084.     end  
  5085.     for i in 0..3
  5086.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  5087.     end  
  5088.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  5089.   end
  5090.   #--------------------------------------------------------------------------
  5091.   # ● 座標の更新
  5092.   #--------------------------------------------------------------------------
  5093.   def update_position
  5094.     self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  5095.     self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  5096.     self.ox -= $sv_camera.sx / 100 if @shake_on
  5097.     self.oy -= $sv_camera.sy / 100 if @shake_on
  5098.     self.zoom_x = @zoom_x * $sv_camera.zoom
  5099.     self.zoom_y = @zoom_y * $sv_camera.zoom
  5100.     self.ox *= $sv_camera.zoom
  5101.     self.oy *= $sv_camera.zoom
  5102.     self.z = @index * 10
  5103.   end
  5104.   #--------------------------------------------------------------------------
  5105.   # ● 背景変更補正画像を更新
  5106.   #--------------------------------------------------------------------------
  5107.   def update_back_adjust
  5108.     @active_data[9][0][0] = 0 if @scroll_x == 0
  5109.     @active_data[9][0][1] = 0 if @scroll_y == 0
  5110.     @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  5111.     @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  5112.     for i in 0...@bt_back.size
  5113.       @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  5114.       @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  5115.       @bt_back[i].zoom_x = self.zoom_x
  5116.       @bt_back[i].zoom_y = self.zoom_y
  5117.       @bt_back[i].z = self.z + 1
  5118.       @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  5119.     end
  5120.     back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  5121.     return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  5122.     bt_back_dispose
  5123.     create_back(@active_data[5])
  5124.     @active_data[9][0] = false
  5125.     next_back_data if @remain && @back_data.size != 1
  5126.     @remain = false
  5127.   end
  5128.   #--------------------------------------------------------------------------
  5129.   # ● 色調変更
  5130.   #--------------------------------------------------------------------------
  5131.   def color_set
  5132.     set = $sv_camera.color_set[@index]
  5133.     $sv_camera.color_set[@index] = nil
  5134.     set[4] = 1 if set[4] == 0
  5135.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  5136.     @color_data = @remain_color_data
  5137.     @color_data[4] = set[4]
  5138.     @color_data[5] = set[5]
  5139.     @color_data[6] = set
  5140.   end
  5141.   #--------------------------------------------------------------------------
  5142.   # ● 背景変更補正画像の解放
  5143.   #--------------------------------------------------------------------------
  5144.   def bt_back_dispose
  5145.     for i in 0...@bt_back.size do @bt_back[i].dispose end if @bt_back != nil
  5146.     @bt_back = nil
  5147.   end  
  5148.   #--------------------------------------------------------------------------
  5149.   # ● 解放
  5150.   #--------------------------------------------------------------------------
  5151.   def dispose
  5152.     bitmap.dispose if bitmap
  5153.     bt_back_dispose
  5154.     super
  5155.   end
  5156. end  
  5157.   
  5158. #==============================================================================
  5159. # ■ Battle_Camera
  5160. #------------------------------------------------------------------------------
  5161. #  戦闘カメラやバトルプログラムを扱うクラスです。
  5162. #==============================================================================
  5163. class Battle_Camera
  5164.   #--------------------------------------------------------------------------
  5165.   # ● 公開インスタンス変数 
  5166.   #--------------------------------------------------------------------------
  5167.   attr_reader   :sx                 # シェイクX座標
  5168.   attr_reader   :sy                 # シェイクY座標
  5169.   attr_reader   :max_top            # 上限界座標
  5170.   attr_reader   :max_bottom         # 下限界座標
  5171.   attr_reader   :max_left           # 左限界座標
  5172.   attr_reader   :max_right          # 右限界座標
  5173.   attr_accessor :switches           # サイドビュー専用スイッチ
  5174.   attr_accessor :color_set          # 色調変更データ
  5175.   attr_accessor :wait               # 戦闘シーンの強制ウエイト
  5176.   attr_accessor :win_wait           # 戦闘勝利前のウエイト
  5177.   attr_accessor :mirror             # 画面反転フラグ
  5178.   attr_accessor :program_scroll     # バトルプログラム 背景の自動スクロール
  5179.   attr_accessor :program_picture    # バトルプログラム 周期ピクチャ
  5180.   #--------------------------------------------------------------------------
  5181.   # ● オブジェクト初期化
  5182.   #--------------------------------------------------------------------------
  5183.   def initialize
  5184.     @switches = []
  5185.     @max_data = []
  5186.     @color_set = []
  5187.     @wait = 0
  5188.     @win_wait = false
  5189.     @mirror = false
  5190.     setup
  5191.   end
  5192.   #--------------------------------------------------------------------------
  5193.   # ● カメラX座標
  5194.   #--------------------------------------------------------------------------
  5195.   def x
  5196.     return @x / 100
  5197.   end
  5198.   #--------------------------------------------------------------------------
  5199.   # ● カメラY座標
  5200.   #--------------------------------------------------------------------------
  5201.   def y
  5202.     return @y / 100
  5203.   end
  5204.   #--------------------------------------------------------------------------
  5205.   # ● ズーム率
  5206.   #--------------------------------------------------------------------------
  5207.   def zoom
  5208.     return @zoom * 0.001
  5209.   end
  5210.   #--------------------------------------------------------------------------
  5211.   # ● ズーム率による座標変換
  5212.   #--------------------------------------------------------------------------
  5213.   def convert
  5214.     return @zoom
  5215.   end
  5216.   #--------------------------------------------------------------------------
  5217.   # ● カメラセットアップ
  5218.   #--------------------------------------------------------------------------
  5219.   def setup
  5220.     @x = 0
  5221.     @y = 0
  5222.     @sx = 0
  5223.     @sy = 0
  5224.     @zoom = 1000
  5225.     @time = 0
  5226.     @shake_time = 0
  5227.     program_setup
  5228.   end
  5229.   #--------------------------------------------------------------------------
  5230.   # ● カメラ初期化
  5231.   #--------------------------------------------------------------------------
  5232.   def reset
  5233.     @switches = []
  5234.     @max_data = []
  5235.     @color_set = []
  5236.     @wait = 0
  5237.     @win_wait = false
  5238.     @mirror = false
  5239.     program_setup(false)
  5240.   end  
  5241.   #--------------------------------------------------------------------------
  5242.   # ● バトルプログラムのセットアップ
  5243.   #--------------------------------------------------------------------------
  5244.   def program_setup(check = true)
  5245.     @played_program  = []
  5246.     @program_switch  = []
  5247.     @program_sound   = []
  5248.     @program_scroll  = []
  5249.     @program_se      = []
  5250.     @program_shake   = []
  5251.     @program_color   = []
  5252.     @program_picture = []
  5253.     @program_base = N03::BATTLE_PROGRAM.values.dup
  5254.     program_check if check
  5255.   end  
  5256.   #--------------------------------------------------------------------------
  5257.   # ● バトルプログラムのチェック
  5258.   #--------------------------------------------------------------------------
  5259.   def program_check
  5260.     for data in @program_base
  5261.       if program_start?(data) && !@played_program.include?(data)
  5262.         @played_program.push(data.dup)
  5263.         @program_scroll.push(data.dup)  if data[0] == "scroll"
  5264.         @program_picture.push(data.dup) if data[0] == "kpic"
  5265.         start_sound(data.dup)           if data[0] == "sound"
  5266.         start_program_switch(data.dup)  if data[0] == "switch"
  5267.         start_program_se(data.dup)      if data[0] == "keep_se"
  5268.         start_program_shake(data.dup)   if data[0] == "keep_sk"
  5269.         start_program_color(data.dup)   if data[0] == "keep_c"
  5270.       else
  5271.         @played_program.delete(data)  if !program_start?(data)
  5272.         @program_scroll.delete(data)  if data[0] == "scroll"
  5273.         @program_picture.delete(data) if data[0] == "kpic"
  5274.         @program_switch.delete(data)  if data[0] == "switch"
  5275.         @program_sound.delete(data)   if data[0] == "sound"
  5276.         @program_se.delete(data)      if data[0] == "keep_se"
  5277.         @program_shake.delete(data)   if data[0] == "keep_sk"
  5278.         @program_color.delete(data)   if data[0] == "keep_c"
  5279.       end
  5280.     end
  5281.   end
  5282.   #--------------------------------------------------------------------------
  5283.   # ● バトルプログラムの開始
  5284.   #--------------------------------------------------------------------------
  5285.   def program_start?(data)
  5286.     start = false
  5287.     start = true if $game_switches[data[1].abs] && data[1] > 0
  5288.     start = true if @switches[data[1].abs] && data[1] < 0
  5289.     return start
  5290.   end  
  5291.   #--------------------------------------------------------------------------
  5292.   # ● バトルプログラム スイッチ操作の開始
  5293.   #--------------------------------------------------------------------------
  5294.   def start_program_switch(data)
  5295.     data[4] = data[4] + rand(data[5] + 1)
  5296.     data[4] = 1 if data[4] <= 0
  5297.     @program_switch.push(data)
  5298.   end
  5299.   #--------------------------------------------------------------------------
  5300.   # ● スイッチ操作の更新
  5301.   #--------------------------------------------------------------------------
  5302.   def update_program_switch
  5303.     for data in @program_switch
  5304.       data[4] -= 1
  5305.       next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  5306.       next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  5307.       next if data[4] != 0
  5308.       for id in data[2]
  5309.         $game_switches[id] = true if id > 0
  5310.         @switches[id.abs] = true  if id < 0
  5311.       end
  5312.       for id in data[3]
  5313.         $game_switches[id] = false if id > 0
  5314.         @switches[id.abs] = false  if id < 0
  5315.       end
  5316.       @program_switch.delete(data)
  5317.       program_check
  5318.     end  
  5319.   end
  5320.   #--------------------------------------------------------------------------
  5321.   # ● バトルプログラム BGM/BGSの開始
  5322.   #--------------------------------------------------------------------------
  5323.   def start_sound(data)
  5324.     @program_sound.push(data)
  5325.     name = data[5]
  5326.     case data[2]
  5327.     when "se"
  5328.       Audio.se_play("Audio/SE/" + name, data[4], data[3])
  5329.     when "bgm"
  5330.       name = RPG::BGM.last.name if data[5] == ""
  5331.       Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  5332.     when "bgs"
  5333.       name = RPG::BGS.last.name if data[5] == ""
  5334.       Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  5335.     end
  5336.   end
  5337.   #--------------------------------------------------------------------------
  5338.   # ● バトルプログラム 周期SEの開始
  5339.   #--------------------------------------------------------------------------
  5340.   def start_program_se(data)
  5341.     data[3] = [data[2], data[3]]
  5342.     data[2] = data[3][0] + rand(data[3][1] + 1)
  5343.     @program_se.push(data)
  5344.     Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  5345.   end
  5346.   #--------------------------------------------------------------------------
  5347.   # ● 周期SEの更新
  5348.   #--------------------------------------------------------------------------
  5349.   def update_program_se
  5350.     for data in @program_se
  5351.       data[2] -= 1
  5352.       next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  5353.       next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  5354.       next if data[2] != 0
  5355.       Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  5356.       data[2] = data[3][0] + rand(data[3][1] + 1)
  5357.     end  
  5358.   end
  5359.   #--------------------------------------------------------------------------
  5360.   # ● バトルプログラム 周期シェイクの開始
  5361.   #--------------------------------------------------------------------------
  5362.   def start_program_shake(data)
  5363.     data[3] = [data[2], data[3]]
  5364.     data[2] = data[3][0] + rand(data[3][1] + 1)
  5365.     @program_shake.push(data)
  5366.     shake(data[4], data[5], data[6]) if data[7]
  5367.   end
  5368.   #--------------------------------------------------------------------------
  5369.   # ● 周期シェイクの更新
  5370.   #--------------------------------------------------------------------------
  5371.   def update_program_shake
  5372.     for data in @program_shake
  5373.       data[2] -= 1
  5374.       next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  5375.       next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  5376.       next if data[2] != 0
  5377.       shake(data[4], data[5], data[6])
  5378.       data[2] = data[3][0] + rand(data[3][1] + 1)
  5379.     end  
  5380.   end
  5381.   #--------------------------------------------------------------------------
  5382.   # ● バトルプログラム 周期色調変更の開始
  5383.   #--------------------------------------------------------------------------
  5384.   def start_program_color(data)
  5385.     data[3] = [data[2], data[3]]
  5386.     data[2] = data[3][0] + rand(data[3][1] + 1)
  5387.     data[7] = true if data[4] == 0 or data[4] == 4
  5388.     case data[4]
  5389.     when 1   ;data[4] = $game_troop.members
  5390.     when 2   ;data[4] = $game_party.battle_members
  5391.     when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  5392.     else ;data[4] = []
  5393.     end
  5394.     @program_color.push(data)
  5395.     return if !data[6]
  5396.     for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  5397.     @color_set[1] = data[5] if data[7]
  5398.     @color_set[2] = data[5] if data[7]
  5399.   end
  5400.   #--------------------------------------------------------------------------
  5401.   # ● 周期色調変更の更新
  5402.   #--------------------------------------------------------------------------
  5403.   def update_program_color
  5404.     for data in @program_color
  5405.       data[2] -= 1
  5406.       next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  5407.       next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  5408.       next if data[2] != 0
  5409.       for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  5410.       @color_set[1] = data[5] if data[7]
  5411.       @color_set[2] = data[5] if data[7]
  5412.       data[2] = data[3][0] + rand(data[3][1] + 1)
  5413.     end
  5414.   end
  5415.   #--------------------------------------------------------------------------
  5416.   # ● トランジション実行
  5417.   #--------------------------------------------------------------------------
  5418.   def perform_transition(data)
  5419.     Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  5420.   end  
  5421.   #--------------------------------------------------------------------------
  5422.   # ● 背景からカメラの限界値を取得  data = [max_top, max_bottom, max_left, max_right]
  5423.   #--------------------------------------------------------------------------
  5424.   def setting(index, data)
  5425.     @max_data[index - 1] = data
  5426.     return if index != 2
  5427.     setup
  5428.     # カメラの中心座標
  5429.     @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  5430.     @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  5431.     # 上下左右の移動限界距離
  5432.     @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
  5433.     @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  5434.     @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
  5435.     @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
  5436.     exist_data = @max_data[0] if !@max_data[1][6]
  5437.     exist_data = @max_data[1] if !@max_data[0][6]
  5438.     @max_top    = exist_data[5] * -1        if exist_data != nil
  5439.     @max_bottom = exist_data[1] + @max_top  if exist_data != nil
  5440.     @max_left   = exist_data[4] * -1        if exist_data != nil
  5441.     @max_right  = exist_data[3] + @max_left if exist_data != nil
  5442.     @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  5443.     @max_width    = @max_right - @max_left + Graphics.width
  5444.     @max_height   = @max_bottom - @max_top + Graphics.height
  5445.     # ズームアウト限界値
  5446.     max_zoom_x    = 100 * Graphics.width / @max_width
  5447.     max_zoom_y    = 100 * Graphics.height / @max_height
  5448.     @max_zoom_out = [max_zoom_x, max_zoom_y].max
  5449.   end
  5450.   #--------------------------------------------------------------------------
  5451.   # ● カメラ移動
  5452.   #--------------------------------------------------------------------------
  5453.   def move(target_x, target_y, zoom, time, screen = true)
  5454.     # 戦闘背景以上のサイズまでズームアウトしないよう調整
  5455.     @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  5456.     target_x *= -1 if screen && @mirror
  5457.     # ズーム分の中心座標補正
  5458.     if screen && @target_zoom != 1
  5459.       target_x = target_x + @center_x
  5460.       target_y = target_y + @center_y
  5461.     end
  5462.     adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  5463.     adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  5464.     adjust_x = 0 if adjust_x.nan?
  5465.     adjust_y = 0 if adjust_y.nan?
  5466.     adjust_x = @center_x if !screen && adjust_x == 0
  5467.     adjust_y = @center_y if !screen && adjust_y == 0
  5468.     @target_x = target_x - adjust_x.to_i
  5469.     @target_y = target_y - adjust_y.to_i
  5470.     @target_zoom = (@target_zoom * 1000).to_i
  5471.     @zoom = @zoom.to_i
  5472.     limit_test
  5473.     # 時間0の場合は即実行
  5474.     return @time = time.abs if time != 0
  5475.     @time = 1
  5476.     update
  5477.   end
  5478.   #--------------------------------------------------------------------------
  5479.   # ● 限界座標の試算
  5480.   #--------------------------------------------------------------------------
  5481.   def limit_test
  5482.     new_width = @max_width * @target_zoom / 1000
  5483.     new_height = @max_height * @target_zoom / 1000
  5484.     new_max_right = @max_right - (@max_width - new_width)
  5485.     new_max_bottom = @max_bottom - (@max_height - new_height)
  5486.     # 画面の移動先が限界の場合、限界座標をセット
  5487.     if @target_x < @max_left * 100
  5488.       @target_x = @max_left * 100
  5489.     end
  5490.     if @target_x > new_max_right * 100
  5491.       @target_x = new_max_right * 100
  5492.     end
  5493.     if @target_y < @max_top * 100
  5494.       @target_y = @max_top * 100
  5495.     end
  5496.     if @target_y > new_max_bottom * 100
  5497.       @target_y = new_max_bottom * 100
  5498.     end
  5499.   end
  5500.   #--------------------------------------------------------------------------
  5501.   # ● 画面のシェイク
  5502.   #--------------------------------------------------------------------------
  5503.   def shake(power, speed, time)
  5504.     @shake_x = power[0] * 100
  5505.     @shake_y = power[1] * 100
  5506.     @power_time_base = @power_time = speed
  5507.     @shake_time = time
  5508.     update_shake
  5509.   end
  5510.   #--------------------------------------------------------------------------
  5511.   # ● シェイクの更新
  5512.   #--------------------------------------------------------------------------
  5513.   def update_shake
  5514.     @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  5515.     @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  5516.     @power_time -= 1
  5517.     @shake_time -= 1
  5518.     return @sx = @sy = 0 if @shake_time == 0
  5519.     return if @power_time != 0
  5520.     @power_time = @power_time_base
  5521.     @shake_x = @shake_x * -4 / 5
  5522.     @shake_y = @shake_y * -4 / 5
  5523.   end
  5524.   #--------------------------------------------------------------------------
  5525.   # ● フレーム更新
  5526.   #--------------------------------------------------------------------------
  5527.   def update
  5528.     update_shake if @shake_time != 0
  5529.     update_program
  5530.     return if @time == 0
  5531.     @x = (@x * (@time - 1) + @target_x) / @time
  5532.     @y = (@y * (@time - 1) + @target_y) / @time
  5533.     @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  5534.     @time -= 1
  5535.   end
  5536.   #--------------------------------------------------------------------------
  5537.   # ● フレーム更新
  5538.   #--------------------------------------------------------------------------
  5539.   def update_program
  5540.     update_program_switch if @program_switch != []
  5541.     update_program_se     if @program_se != []
  5542.     update_program_shake  if @program_shake != []
  5543.     update_program_color  if @program_color != []
  5544.   end
  5545. end

  5546. #==============================================================================
  5547. # ■ Scene_Battle
  5548. #------------------------------------------------------------------------------
  5549. #  バトル画面の処理を行うクラスです。
  5550. #==============================================================================
  5551. class Scene_Battle < Scene_Base
  5552.   #--------------------------------------------------------------------------
  5553.   # ● フレーム更新(基本)
  5554.   #--------------------------------------------------------------------------
  5555.   alias update_basic_scene_battle_n03 update_basic
  5556.   def update_basic
  5557.     update_basic_scene_battle_n03
  5558.     $sv_camera.update
  5559.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  5560.     camera_wait
  5561.   end
  5562.   #--------------------------------------------------------------------------
  5563.   # ● カメラウェイト
  5564.   #--------------------------------------------------------------------------
  5565.   def camera_wait
  5566.     while $sv_camera.wait != 0
  5567.       Graphics.update
  5568.       Input.update
  5569.       update_all_windows
  5570.       $game_timer.update
  5571.       $game_troop.update
  5572.       $sv_camera.update
  5573.       @spriteset.update
  5574.       update_info_viewport
  5575.       update_message_open
  5576.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  5577.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  5578.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  5579.     end
  5580.   end
  5581.   #--------------------------------------------------------------------------
  5582.   # ● カメラウェイトのセット
  5583.   #--------------------------------------------------------------------------
  5584.   def set_camera_wait(time)
  5585.     $sv_camera.wait = time
  5586.     camera_wait
  5587.   end  
  5588.   #--------------------------------------------------------------------------
  5589.   # ● エフェクト実行が終わるまでウェイト ★再定義
  5590.   #--------------------------------------------------------------------------
  5591.   def wait_for_effect
  5592.   end
  5593.   #--------------------------------------------------------------------------
  5594.   # ● ターン開始
  5595.   #--------------------------------------------------------------------------
  5596.   alias turn_start_scene_battle_n03 turn_start
  5597.   def turn_start
  5598.     turn_start_scene_battle_n03
  5599.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  5600.   end
  5601.   #--------------------------------------------------------------------------
  5602.   # ● ターン終了
  5603.   #--------------------------------------------------------------------------
  5604.   alias turn_end_scene_battle_n03 turn_end
  5605.   def turn_end
  5606.     turn_end_scene_battle_n03
  5607.     for member in $game_troop.members + $game_party.members
  5608.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  5609.       member.sv.result_damage = [0,0]
  5610.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  5611.     end
  5612.     set_camera_wait(N03::TURN_END_WAIT)
  5613.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  5614.     @log_window.clear
  5615.   end
  5616.   #--------------------------------------------------------------------------
  5617.   # ● スキル/アイテムの使用 ★再定義
  5618.   #--------------------------------------------------------------------------
  5619.   def use_item
  5620.     item = @subject.current_action.item
  5621.     display_item(item)
  5622.     @subject.use_item(item)
  5623.     refresh_status
  5624.     @targets = @subject.current_action.make_targets.compact
  5625.     @targets = [@subject] if @targets.size == 0
  5626.     set_substitute(item)
  5627.     for time in item.repeats.times do play_sideview(@targets, item) end
  5628.     end_reaction(item)
  5629.     display_end_item
  5630.   end
  5631.   #--------------------------------------------------------------------------
  5632.   # ● スキル/アイテム名の表示
  5633.   #--------------------------------------------------------------------------
  5634.   def display_item(item)
  5635.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  5636.     @log_window.off
  5637.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  5638.   end  
  5639.   #--------------------------------------------------------------------------
  5640.   # ● スキル/アイテム名の表示終了
  5641.   #--------------------------------------------------------------------------
  5642.   def display_end_item
  5643.     @skill_name_window.dispose if @skill_name_window != nil
  5644.     @skill_name_window = nil
  5645.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  5646.     @log_window.clear if N03::BATTLE_LOG
  5647.   end  
  5648.   #--------------------------------------------------------------------------
  5649.   # ● 反撃/魔法反射/身代わり処理
  5650.   #--------------------------------------------------------------------------
  5651.   def end_reaction(item)
  5652.     end_substitute if @substitute != nil
  5653.     set_reflection(item) if @reflection_data != nil
  5654.     set_counter_attack if @counter_attacker != nil
  5655.   end  
  5656.   #--------------------------------------------------------------------------
  5657.   # ● 反撃の発動 ★再定義
  5658.   #--------------------------------------------------------------------------
  5659.   def invoke_counter_attack(target, item)
  5660.     return if @subject.sv.counter_id != 0
  5661.     @counter_attacker = [] if @counter_attacker == nil
  5662.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  5663.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  5664.     target.sv.counter_id = target.sv.counter_skill_id
  5665.     @counter_attacker.push(target)
  5666.   end
  5667.   #--------------------------------------------------------------------------
  5668.   # ● 魔法反射の発動 ★再定義
  5669.   #--------------------------------------------------------------------------
  5670.   def invoke_magic_reflection(target, item)
  5671.     return if @subject.sv.reflection_id != 0
  5672.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  5673.     target.sv.reflection_id = target.sv.reflection_anime_id
  5674.   end
  5675.   #--------------------------------------------------------------------------
  5676.   # ● 身代わりの適用 ★再定義
  5677.   #--------------------------------------------------------------------------
  5678.   def apply_substitute(target, item)
  5679.     return target if @substitute == nil
  5680.     return target if !check_substitute(target, item)
  5681.     return @substitute
  5682.   end
  5683.   #--------------------------------------------------------------------------
  5684.   # ● 身代わりセット
  5685.   #--------------------------------------------------------------------------
  5686.   def set_substitute(item)
  5687.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  5688.     return if @substitute == nil
  5689.     s_targets = []
  5690.     for i in [email protected]
  5691.       next if @targets[i] == @substitute
  5692.       next if !check_substitute(@targets[i], item)
  5693.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  5694.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  5695.       s_targets.push(@targets[i])
  5696.       @targets[i] = @substitute
  5697.     end
  5698.     return @substitute = nil if s_targets == []
  5699.     @substitute.sv.set_target(s_targets)
  5700.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  5701.   end  
  5702.   #--------------------------------------------------------------------------
  5703.   # ● 身代わり終了
  5704.   #--------------------------------------------------------------------------
  5705.   def end_substitute
  5706.     for member in @substitute.sv.target_battler
  5707.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  5708.     end  
  5709.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  5710.     @substitute = nil
  5711.   end
  5712.   #--------------------------------------------------------------------------
  5713.   # ● 反撃
  5714.   #--------------------------------------------------------------------------
  5715.   def set_counter_attack
  5716.     pre_subject = @subject
  5717.     for attacker in @counter_attacker
  5718.       @subject = attacker
  5719.       item = $data_skills[attacker.sv.counter_skill_id]
  5720.       play_sideview([pre_subject], item)
  5721.     end
  5722.     # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  5723.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  5724.     @subject = pre_subject
  5725.     @counter_attacker = nil
  5726.   end
  5727.   #--------------------------------------------------------------------------
  5728.   # ● 魔法反射
  5729.   #--------------------------------------------------------------------------
  5730.   def set_reflection(item)
  5731.     @log_window.back_to(1)
  5732.     for data in @reflection_data
  5733.       @subject.sv.damage_action(@subject, item)
  5734.       N03.set_damage_anime_data([@subject], @subject, data)
  5735.       apply_item_effects(@subject, item)
  5736.       @spriteset.set_damage_pop(@subject)
  5737.     end
  5738.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  5739.     @reflection_data = nil
  5740.   end
  5741.   #--------------------------------------------------------------------------
  5742.   # ● サイドビューアクション実行
  5743.   #--------------------------------------------------------------------------
  5744.   def play_sideview(targets, item)
  5745.     @subject.sv.set_target(targets)
  5746.     return if @subject.sv.attack_action(item) == nil
  5747.     return if [email protected]?
  5748.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  5749.     @subject.sv.start_action(@subject.sv.attack_action(item))
  5750.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  5751.     @subject.sv.active = true
  5752.     loop do
  5753.       update_basic
  5754.       data = @subject.sv.play_data
  5755.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  5756.       N03.targets_set(@subject)          if data[0] == "targets_set"
  5757.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  5758.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  5759.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  5760.       set_damage(item)                   if @subject.sv.set_damage
  5761.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  5762.       break                              if @subject.sv.action_end or @subject.hidden?
  5763.     end
  5764.     @immortal = N03.unimmortaling        if @immortal
  5765.   end
  5766.   #--------------------------------------------------------------------------
  5767.   # ● ダメージの実行
  5768.   #--------------------------------------------------------------------------
  5769.   def set_damage(item)
  5770.     targets = @targets
  5771.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  5772.     for target in targets do damage_anime(targets.dup, target, item) end
  5773.     @subject.sv.set_damage = false
  5774.     @subject.sv.damage_anime_data = []
  5775.   end
  5776.   #--------------------------------------------------------------------------
  5777.   # ● ダメージ戦闘アニメ処理
  5778.   #--------------------------------------------------------------------------
  5779.   def damage_anime(targets, target, item)
  5780.     @log_window.back_to(1) if @log_window.line_number == 5
  5781.     return if item.scope != 9 && item.scope != 10 && target.dead?
  5782.     @miss = false
  5783.     invoke_item(target,item)
  5784.     if target.result.missed
  5785.       target.sv.miss_action(@subject, item)
  5786.       return @miss = true
  5787.     elsif target.result.evaded or target.sv.counter_id != 0
  5788.       target.sv.evasion_action(@subject, item)
  5789.       return @miss = true
  5790.     elsif target.sv.reflection_id != 0
  5791.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  5792.       target.sv.reflection_id = 0
  5793.       @reflection_data = [] if @reflection_data == nil
  5794.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  5795.     end
  5796.     target.sv.damage_action(@subject, item)
  5797.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  5798.     @spriteset.set_damage_pop(target)
  5799.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  5800.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  5801.   end
  5802.   #--------------------------------------------------------------------------
  5803.   # ● 飛ばしアニメ処理
  5804.   #--------------------------------------------------------------------------
  5805.   def set_move_anime(item)
  5806.     for data in @subject.sv.m_a_data
  5807.       @subject.sv.damage_anime_data = data[4]
  5808.       hit_targets = []
  5809.       for target in data[1]
  5810.         damage_anime(data[1], target, item) if data[0]
  5811.         hit_targets.push(target) if !@miss
  5812.       end
  5813.       @miss = false if !data[3]
  5814.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  5815.     end
  5816.     @subject.sv.set_damage = false
  5817.     @subject.sv.m_a_data = []
  5818.   end
  5819. end

  5820. #==============================================================================
  5821. # ■ DataManager
  5822. #------------------------------------------------------------------------------
  5823. #  データベースとゲームオブジェクトを管理するモジュールです。
  5824. #==============================================================================
  5825. module DataManager
  5826.   #--------------------------------------------------------------------------
  5827.   # ● 各種ゲームオブジェクトの作成 ★再定義
  5828.   #--------------------------------------------------------------------------
  5829.   def self.create_game_objects
  5830.     $game_temp          = Game_Temp.new
  5831.     $game_system        = Game_System.new
  5832.     $game_timer         = Game_Timer.new
  5833.     $game_message       = Game_Message.new
  5834.     $game_switches      = Game_Switches.new
  5835.     $game_variables     = Game_Variables.new
  5836.     $game_self_switches = Game_SelfSwitches.new
  5837.     $game_actors        = Game_Actors.new
  5838.     $game_party         = Game_Party.new
  5839.     $game_troop         = Game_Troop.new
  5840.     $game_map           = Game_Map.new
  5841.     $game_player        = Game_Player.new
  5842.     $sv_camera          = Battle_Camera.new
  5843.   end
  5844. end

  5845. #==============================================================================
  5846. # ■ BattleManager
  5847. #------------------------------------------------------------------------------
  5848. #  戦闘の進行を管理するモジュールです。
  5849. #==============================================================================
  5850. module BattleManager
  5851.   #--------------------------------------------------------------------------
  5852.   # ● エンカウント時の処理 ★再定義
  5853.   #--------------------------------------------------------------------------
  5854.   def self.on_encounter
  5855.     @preemptive = (rand < rate_preemptive)
  5856.     @surprise = (rand < rate_surprise && !@preemptive)
  5857.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  5858.   end
  5859.   #--------------------------------------------------------------------------
  5860.   # ● 勝利の処理 ★再定義
  5861.   #--------------------------------------------------------------------------
  5862.   def self.process_victory
  5863.     $sv_camera.win_wait = true
  5864.   end  
  5865.   #--------------------------------------------------------------------------
  5866.   # ● 勝利
  5867.   #--------------------------------------------------------------------------
  5868.   def self.victory
  5869.     $sv_camera.win_wait = false
  5870.     N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  5871.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  5872.     play_battle_end_me
  5873.     replay_bgm_and_bgs
  5874.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  5875.     display_exp
  5876.     gain_gold
  5877.     gain_drop_items
  5878.     gain_exp
  5879.     SceneManager.return
  5880.     battle_end(0)
  5881.     return true
  5882.   end
  5883.   #--------------------------------------------------------------------------
  5884.   # ● 逃走の処理 ★再定義
  5885.   #--------------------------------------------------------------------------
  5886.   def self.process_escape
  5887.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  5888.     success = @preemptive ? true : (rand < @escape_ratio)
  5889.     Sound.play_escape
  5890.     if success
  5891.       process_abort
  5892.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  5893.     else
  5894.       @escape_ratio += 0.1
  5895.       $game_message.add('\.' + Vocab::EscapeFailure)
  5896.       $game_party.clear_actions
  5897.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  5898.     end
  5899.     wait_for_message
  5900.     return success
  5901.   end
  5902.   #--------------------------------------------------------------------------
  5903.   # ● 次のコマンド入力へ ★再定義
  5904.   #--------------------------------------------------------------------------
  5905.   def self.next_command
  5906.     begin
  5907.       if !actor || !actor.next_command
  5908.         @actor_index += 1
  5909.         if @actor_index >= $game_party.members.size
  5910.           for member in $game_party.battle_members.reverse
  5911.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  5912.           end
  5913.           return false
  5914.         end
  5915.       end
  5916.     end until actor.inputable?
  5917.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  5918.     if pre_actor
  5919.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  5920.     end
  5921.     return true
  5922.   end
  5923.   #--------------------------------------------------------------------------
  5924.   # ● 前のコマンド入力へ ★再定義
  5925.   #--------------------------------------------------------------------------
  5926.   def self.prior_command
  5927.     begin
  5928.       if !actor || !actor.prior_command
  5929.         @actor_index -= 1
  5930.         if @actor_index < 0
  5931.           for member in $game_party.battle_members
  5932.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  5933.           end
  5934.           return false
  5935.         end
  5936.       end
  5937.     end until actor.inputable?
  5938.     actor.make_actions if actor.inputable?
  5939.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  5940.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  5941.     return true
  5942.   end
  5943.   #--------------------------------------------------------------------------
  5944.   # ● コマンド入力前のアクターを取得
  5945.   #--------------------------------------------------------------------------
  5946.   def self.pre_actor
  5947.     return if @actor_index == 0
  5948.     $game_party.members[@actor_index - 1]
  5949.   end
  5950.   #--------------------------------------------------------------------------
  5951.   # ● コマンド入力後のアクターを取得
  5952.   #--------------------------------------------------------------------------
  5953.   def self.after_actor
  5954.     $game_party.members[@actor_index + 1]
  5955.   end
  5956.   #--------------------------------------------------------------------------
  5957.   # ● 戦闘行動者を前に追加
  5958.   #--------------------------------------------------------------------------
  5959.   def self.unshift_action_battlers(battler)
  5960.     @action_battlers.unshift(battler)
  5961.   end
  5962. end  

  5963. #==============================================================================
  5964. # ■ Game_Battler
  5965. #------------------------------------------------------------------------------
  5966. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  5967. #==============================================================================
  5968. class Game_Battler < Game_BattlerBase
  5969.   #--------------------------------------------------------------------------
  5970.   # ● 公開インスタンス変数
  5971.   #--------------------------------------------------------------------------
  5972.   attr_reader   :sv                     # サイドビューデータ
  5973.   attr_accessor :flash_flg              # 閃きフラグ
  5974.   #--------------------------------------------------------------------------
  5975.   # ● オブジェクト初期化
  5976.   #--------------------------------------------------------------------------
  5977.   alias initialize_game_battler_n03 initialize
  5978.   def initialize
  5979.     initialize_game_battler_n03
  5980.     @sv = SideView.new(self)
  5981.   end
  5982.   #--------------------------------------------------------------------------
  5983.   # ● 現在の戦闘行動を除去
  5984.   #--------------------------------------------------------------------------
  5985.   alias remove_current_action_game_battler_n03 remove_current_action
  5986.   def remove_current_action
  5987.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  5988.     remove_current_action_game_battler_n03
  5989.   end
  5990.   #--------------------------------------------------------------------------
  5991.   # ● ターン終了処理
  5992.   #--------------------------------------------------------------------------
  5993.   alias on_turn_end_game_battler_n03 on_turn_end
  5994.   def on_turn_end
  5995.     on_turn_end_game_battler_n03
  5996.     @sv.add_state = []
  5997.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  5998.   end
  5999.   #--------------------------------------------------------------------------
  6000.   # ● パラメータ条件比較 data = [種別, 数値, 判別]
  6001.   #--------------------------------------------------------------------------
  6002.   def comparison_parameter(data)
  6003.     return true if data[0][0] == 0
  6004.     kind = data[0]
  6005.     num = data[1]
  6006.     select = data[2]
  6007.     case kind
  6008.     when  1 ; par = level
  6009.     when  2 ; par = mhp
  6010.     when  3 ; par = mmp
  6011.     when  4 ; par = hp
  6012.     when  5 ; par = mp
  6013.     when  6 ; par = tp
  6014.     when  7 ; par = atk
  6015.     when  8 ; par = self.def
  6016.     when  9 ; par = mat
  6017.     when 10 ; par = mdf
  6018.     when 11 ; par = agi
  6019.     when 12 ; par = luk
  6020.     end
  6021.     if num < 0
  6022.       case kind
  6023.       when  4 ; num = mhp * num / 100
  6024.       when  5 ; num = mmp * num / 100
  6025.       when  6 ; num = max_tp * num / 100
  6026.       end
  6027.       num = num.abs
  6028.     end  
  6029.     case select
  6030.     when  0 ; return par == num
  6031.     when  1 ; return par < num
  6032.     when  2 ; return par > num
  6033.     end
  6034.   end
  6035.   #--------------------------------------------------------------------------
  6036.   # ● 装備条件比較 data = [装備種別, タイプID]
  6037.   #--------------------------------------------------------------------------
  6038.   def comparison_equip(data)
  6039.     kind = data[0]
  6040.     items = weapons if kind == 0
  6041.     items = armors  if kind == 1
  6042.     for item in items
  6043.       for id in data[1]
  6044.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  6045.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  6046.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  6047.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  6048.       end
  6049.     end
  6050.     return false
  6051.   end
  6052.   
  6053. end  
  6054. #==============================================================================
  6055. # ■ Game_Actor
  6056. #------------------------------------------------------------------------------
  6057. #  アクターを扱うクラスです。
  6058. #==============================================================================
  6059. class Game_Actor < Game_Battler
  6060.   #--------------------------------------------------------------------------
  6061.   # ● 公開インスタンス変数
  6062.   #--------------------------------------------------------------------------
  6063.   attr_reader :actor_id                    # ID
  6064.   #--------------------------------------------------------------------------
  6065.   # ● ID
  6066.   #--------------------------------------------------------------------------
  6067.   def id
  6068.     return @actor_id
  6069.   end
  6070.   #--------------------------------------------------------------------------
  6071.   # ● スプライトを使うか? ★再定義
  6072.   #--------------------------------------------------------------------------
  6073.   def use_sprite?
  6074.     return true
  6075.   end
  6076.   #--------------------------------------------------------------------------
  6077.   # ● ダメージ効果の実行 ★再定義
  6078.   #--------------------------------------------------------------------------
  6079.   def perform_damage_effect
  6080.     return if !N03::ACTOR_DAMAGE
  6081.     $game_troop.screen.start_shake(5, 5, 10)
  6082.     @sprite_effect_type = :blink
  6083.     Sound.play_actor_damage
  6084.   end
  6085.   
  6086. end

  6087. #==============================================================================
  6088. # ■ Game_Enemy
  6089. #------------------------------------------------------------------------------
  6090. #  敵キャラを扱うクラスです。
  6091. #==============================================================================
  6092. class Game_Enemy < Game_Battler
  6093.   #--------------------------------------------------------------------------
  6094.   # ● 公開インスタンス変数
  6095.   #--------------------------------------------------------------------------
  6096.   attr_reader :enemy_id                    # ID
  6097.   #--------------------------------------------------------------------------
  6098.   # ● ID
  6099.   #--------------------------------------------------------------------------
  6100.   def id
  6101.     return @enemy_id
  6102.   end
  6103.   #--------------------------------------------------------------------------
  6104.   # ● レベル
  6105.   #--------------------------------------------------------------------------
  6106.   def level
  6107.     return @sv.level
  6108.   end
  6109.   #--------------------------------------------------------------------------
  6110.   # ● ダメージ効果の実行 ★再定義
  6111.   #--------------------------------------------------------------------------
  6112.   def perform_damage_effect
  6113.     return if !N03::ENEMY_DAMAGE
  6114.     @sprite_effect_type = :blink
  6115.     Sound.play_enemy_damage
  6116.   end
  6117.   #--------------------------------------------------------------------------
  6118.   # ● 武器
  6119.   #--------------------------------------------------------------------------
  6120.   def weapons
  6121.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  6122.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  6123.     return [weapon1, weapon2]
  6124.   end
  6125.   #--------------------------------------------------------------------------
  6126.   # ● 防具
  6127.   #--------------------------------------------------------------------------
  6128.   def armors
  6129.     return [$data_armors[@sv.enemy_shield_id]]
  6130.   end
  6131.   #--------------------------------------------------------------------------
  6132.   # ● 二刀流の判定
  6133.   #--------------------------------------------------------------------------
  6134.   def dual_wield?
  6135.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  6136.   end
  6137.   #--------------------------------------------------------------------------
  6138.   # ● バトラー画像変更
  6139.   #--------------------------------------------------------------------------
  6140.   def graphics_change(battler_name)
  6141.     @battler_name = battler_name
  6142.   end
  6143.   #--------------------------------------------------------------------------
  6144.   # ● 通常攻撃 アニメーション ID の取得
  6145.   #--------------------------------------------------------------------------
  6146.   def atk_animation_id1
  6147.     return weapons[0].animation_id if weapons[0]
  6148.     return weapons[1] ? 0 : 1
  6149.   end
  6150.   #--------------------------------------------------------------------------
  6151.   # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  6152.   #--------------------------------------------------------------------------
  6153.   def atk_animation_id2
  6154.     return weapons[1] ? weapons[1].animation_id : 0
  6155.   end
  6156. end

  6157. #==============================================================================
  6158. # ■ Sprite_Base
  6159. #------------------------------------------------------------------------------
  6160. #  アニメーションの表示処理を追加したスプライトのクラスです。
  6161. #==============================================================================
  6162. class Sprite_Base < Sprite
  6163.   #--------------------------------------------------------------------------
  6164.   # ● アニメーションの座標更新 (ホーミングあり)
  6165.   #--------------------------------------------------------------------------
  6166.   def update_animation_position_horming
  6167.     return if @action_end_cancel
  6168.     ani_ox_set if @horming
  6169.     camera_zoom = $sv_camera.zoom
  6170.     camera_zoom = 1 if @move_anime
  6171.     kind = 1
  6172.     kind = -1 if @ani_mirror && !@anime_no_mirror
  6173.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  6174.     for i in 0..15
  6175.       @ani_sprites[i].x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 1] != nil
  6176.       @ani_sprites[i].y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 2] != nil
  6177.     end
  6178.   end
  6179.   #--------------------------------------------------------------------------
  6180.   # ● アニメーション元の座標をセット
  6181.   #--------------------------------------------------------------------------
  6182.   def ani_ox_set
  6183.     @real_x = x if !@real_x
  6184.     @real_y = y if !@real_y
  6185.     @ani_ox = @real_x - ox + width / 2
  6186.     @ani_oy = @real_y - oy + height / 2
  6187.     @ani_oy -= height / 2 if @animation.position == 0
  6188.     @ani_oy += height / 2 if @animation.position == 2
  6189.   end
  6190.   #--------------------------------------------------------------------------
  6191.   # ● アニメーションの更新
  6192.   #--------------------------------------------------------------------------
  6193.   alias update_animation_sprite_base_n03 update_animation
  6194.   def update_animation
  6195.     update_animation_position_horming if animation? && @animation.position != 3
  6196.     update_animation_sprite_base_n03
  6197.   end
  6198.   #--------------------------------------------------------------------------
  6199.   # ● アニメーションの原点設定 ★再定義
  6200.   #--------------------------------------------------------------------------
  6201.   def set_animation_origin
  6202.     return ani_ox_set if @animation.position != 3
  6203.     if viewport == nil
  6204.       @ani_ox = Graphics.width / 2
  6205.       @ani_oy = Graphics.height / 2
  6206.     else
  6207.       @ani_ox = viewport.rect.width / 2
  6208.       @ani_oy = viewport.rect.height / 2
  6209.     end
  6210.   end
  6211.   #--------------------------------------------------------------------------
  6212.   # ● アニメーションスプライトの設定 ★再定義
  6213.   #--------------------------------------------------------------------------
  6214.   def animation_set_sprites(frame)
  6215.     camera_zoom = 1
  6216.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3
  6217.     camera_x = $sv_camera.x
  6218.     camera_y = $sv_camera.y
  6219.     camera_x = 0 if @animation.position == 3
  6220.     camera_y = 0 if @animation.position == 3
  6221.     plus_z = 5
  6222.     plus_z = 1000 if @animation.position == 3
  6223.     plus_z = -17 if @plus_z != nil && @plus_z == false
  6224.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  6225.     cell_data = frame.cell_data
  6226.     @ani_sprites.each_with_index do |sprite, i|
  6227.       next unless sprite
  6228.       pattern = cell_data[i, 0]
  6229.       if !pattern || pattern < 0
  6230.         sprite.visible = false
  6231.         next
  6232.       end
  6233.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  6234.       sprite.visible = true
  6235.       sprite.src_rect.set(pattern % 5 * 192,
  6236.         pattern % 100 / 5 * 192, 192, 192)
  6237.       if @ani_mirror && !@anime_no_mirror
  6238.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  6239.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  6240.         sprite.angle = (360 - cell_data[i, 4])
  6241.         sprite.mirror = (cell_data[i, 5] == 0)
  6242.       else
  6243.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  6244.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  6245.         sprite.angle = cell_data[i, 4]
  6246.         sprite.mirror = (cell_data[i, 5] == 1)
  6247.       end
  6248.       sprite.z = self.z + plus_z + i
  6249.       sprite.ox = 96
  6250.       sprite.oy = 96
  6251.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  6252.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  6253.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  6254.       sprite.blend_type = cell_data[i, 7]
  6255.     end
  6256.   end
  6257.   #--------------------------------------------------------------------------
  6258.   # ● 子スプライトフラグ
  6259.   #--------------------------------------------------------------------------
  6260.   def set(battler, horming, camera_zoom, no_mirror)
  6261.     @battler = battler
  6262.     @next = true
  6263.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  6264.     self.ox = bitmap.width / 2
  6265.     self.oy = bitmap.height
  6266.     @horming = horming
  6267.     @anime_camera_zoom = camera_zoom
  6268.     @anime_no_mirror = no_mirror
  6269.     @battler.sv.reset_anime_data
  6270.   end  
  6271.   #--------------------------------------------------------------------------
  6272.   # ● 子スプライト座標セット
  6273.   #--------------------------------------------------------------------------
  6274.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  6275.     self.z = z
  6276.     self.zoom_x = zoom_x
  6277.     self.zoom_y = zoom_y
  6278.     @real_x = real_x
  6279.     @real_y = real_y
  6280.   end
  6281.   #--------------------------------------------------------------------------
  6282.   # ● 他スプライトへのタイミング処理
  6283.   #--------------------------------------------------------------------------
  6284.   def other_process_timing(timing)
  6285.     se_flag = true
  6286.     se_flag = @se_flag if @se_flag != nil
  6287.     @battler.sv.timing.push([se_flag, timing.dup])
  6288.   end
  6289.   #--------------------------------------------------------------------------
  6290.   # ● 他バトラーへのタイミング処理
  6291.   #--------------------------------------------------------------------------
  6292.   def target_battler_process_timing(timing)
  6293.     for target in @timing_targets
  6294.       target.sv.timing.push([false, timing.dup])
  6295.     end  
  6296.   end
  6297.   #--------------------------------------------------------------------------
  6298.   # ● SE とフラッシュのタイミング処理
  6299.   #--------------------------------------------------------------------------
  6300.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  6301.   def animation_process_timing(timing)
  6302.     #target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  6303.     return other_process_timing(timing) if @next != nil
  6304.     animation_process_timing_sprite_base_n03(timing)
  6305.   end
  6306. end


  6307. #==============================================================================
  6308. # ■ Sprite_Battler
  6309. #------------------------------------------------------------------------------
  6310. #  バトラー表示用のスプライトです。
  6311. #==============================================================================
  6312. class Sprite_Battler < Sprite_Base
  6313.   #--------------------------------------------------------------------------
  6314.   # ● 公開インスタンス変数 
  6315.   #--------------------------------------------------------------------------
  6316.   attr_accessor   :removing             # パーティ離脱中
  6317.   #--------------------------------------------------------------------------
  6318.   # ● オブジェクト初期化
  6319.   #--------------------------------------------------------------------------
  6320.   alias initialize_sprite_battler_n03 initialize
  6321.   def initialize(viewport, battler = nil)
  6322.     initialize_sprite_battler_n03(viewport, battler)
  6323.     @real_x = @real_y = 0
  6324.     update_bitmap if @battler != nil
  6325.   end
  6326.   #--------------------------------------------------------------------------
  6327.   # ● アニメーションの開始 ★再定義
  6328.   #--------------------------------------------------------------------------
  6329.   def start_animation(animation, mirror = false)
  6330.     return next_animation(animation, mirror) if animation?
  6331.     @animation = animation
  6332.     if @animation
  6333.       @horming = @battler.sv.anime_horming
  6334.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  6335.       @anime_no_mirror = @battler.sv.anime_no_mirror
  6336.       @timing_targets = @battler.sv.timing_targets
  6337.       @plus_z = @battler.sv.anime_plus_z
  6338.       @battler.sv.reset_anime_data
  6339.       @ani_mirror = mirror
  6340.       set_animation_rate
  6341.       @ani_duration = @animation.frame_max * @ani_rate + 1
  6342.       load_animation_bitmap
  6343.       make_animation_sprites
  6344.       set_animation_origin
  6345.     end
  6346.   end
  6347.   #--------------------------------------------------------------------------
  6348.   # ● 次のアニメを開始
  6349.   #--------------------------------------------------------------------------
  6350.   def next_animation(animation, mirror)
  6351.     @next_anime = [] if @next_anime == nil
  6352.     @next_anime.push(Sprite_Base.new(viewport))
  6353.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  6354.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  6355.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  6356.   end
  6357.   #--------------------------------------------------------------------------
  6358.   # ● 影グラフィック作成
  6359.   #--------------------------------------------------------------------------
  6360.   def create_shadow
  6361.     reset_shadow
  6362.     return if @battler.sv.shadow == false
  6363.     @shadow = Sprite.new(viewport) if @shadow == nil
  6364.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  6365.     @shadow.ox = @shadow.bitmap.width / 2
  6366.     @shadow.oy = @shadow.bitmap.height / 2
  6367.   end
  6368.   #--------------------------------------------------------------------------
  6369.   # ● 影グラフィック初期化
  6370.   #--------------------------------------------------------------------------
  6371.   def reset_shadow
  6372.     return if @shadow == nil
  6373.     @shadow.dispose
  6374.     @shadow = nil
  6375.   end  
  6376.   #--------------------------------------------------------------------------
  6377.   # ● 転送元ビットマップの更新 ★再定義
  6378.   #--------------------------------------------------------------------------
  6379.   def update_bitmap
  6380.     update_bitmap_enemy if [email protected]?
  6381.     update_bitmap_actor if @battler.actor?
  6382.     update_src_rect if @battler != nil
  6383.     update_color if @battler != nil
  6384.   end
  6385.   #--------------------------------------------------------------------------
  6386.   # ● 転送元ビットマップ:エネミー
  6387.   #--------------------------------------------------------------------------
  6388.   def update_bitmap_enemy
  6389.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  6390.       @battler_name = @battler.battler_name
  6391.       @battler_hue = @battler.battler_hue
  6392.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  6393.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  6394.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  6395.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  6396.       create_shadow
  6397.       init_visibility
  6398.       @battler_id = @battler.id
  6399.     end
  6400.   end  
  6401.   #--------------------------------------------------------------------------
  6402.   # ● 転送元ビットマップ:アクター
  6403.   #--------------------------------------------------------------------------
  6404.   def update_bitmap_actor
  6405.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  6406.       @battler_name = @battler.character_name
  6407.       @battler_index = @battler.character_index
  6408.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  6409.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  6410.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  6411.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  6412.       create_shadow
  6413.       init_visibility
  6414.       @battler_id = @battler.id
  6415.     end
  6416.   end
  6417.   #--------------------------------------------------------------------------
  6418.   # ● 可視状態の初期化 ★再定義
  6419.   #--------------------------------------------------------------------------
  6420.   def init_visibility
  6421.     @battler_visible = @battler.alive?
  6422.     @battler_visible = true if @battler.sv.state(1) != "通常コラプス"
  6423.     @battler_visible = false if @battler.hidden?
  6424.     @battler.sv.opacity = 0 unless @battler_visible
  6425.     self.opacity = 0 unless @battler_visible
  6426.     self.opacity = 255 if @battler_visible
  6427.     @battler.sv.weapon_visible = @battler_visible
  6428.   end
  6429.   #--------------------------------------------------------------------------
  6430.   # ● 転送元矩形の更新
  6431.   #--------------------------------------------------------------------------
  6432.   def update_src_rect
  6433.     return if @battler.sv.collapse
  6434.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  6435.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  6436.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  6437.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if [email protected]?
  6438.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  6439.     end
  6440.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  6441.     self.opacity = @battler.sv.opacity
  6442.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  6443.   end
  6444.   #--------------------------------------------------------------------------
  6445.   # ● 位置の更新 ★再定義
  6446.   #--------------------------------------------------------------------------
  6447.   def update_position
  6448.     @real_x = @battler.sv.x / 100
  6449.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  6450.     self.x = @real_x - $sv_camera.x
  6451.     self.y = @real_y - $sv_camera.y
  6452.     self.z = @battler.sv.z - @battler.sv.c / 100
  6453.     if @battler.sv.h <= 0
  6454.       self.x += $sv_camera.sx / 100
  6455.       self.y += $sv_camera.sy / 100
  6456.     end  
  6457.     self.x *= $sv_camera.zoom
  6458.     self.y *= $sv_camera.zoom
  6459.   end
  6460.   #--------------------------------------------------------------------------
  6461.   # ● 原点の更新 ★再定義
  6462.   #--------------------------------------------------------------------------
  6463.   def update_origin
  6464.     return if !bitmap or @battler.sv.collapse
  6465.     self.ox = @battler.sv.ox
  6466.     self.oy = @battler.sv.oy
  6467.     self.angle = @battler.sv.angle
  6468.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  6469.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  6470.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  6471.     self.mirror = [email protected] if @graphic_mirror_flag
  6472.   end
  6473.   #--------------------------------------------------------------------------
  6474.   # ● 影グラフィックの更新
  6475.   #--------------------------------------------------------------------------
  6476.   def update_shadow
  6477.     @shadow.visible = @battler.sv.shadow_visible
  6478.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  6479.     @shadow.opacity = self.opacity if [email protected]_data[3]
  6480.     @shadow.x = @real_x - $sv_camera.x
  6481.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  6482.     @shadow.z = @battler.sv.z - 10
  6483.     @shadow.zoom_x = $sv_camera.zoom
  6484.     @shadow.zoom_y = $sv_camera.zoom
  6485.     @shadow.x += $sv_camera.sx / 100
  6486.     @shadow.y += $sv_camera.sy / 100
  6487.     @shadow.x *= $sv_camera.zoom
  6488.     @shadow.y *= $sv_camera.zoom
  6489.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  6490.   end
  6491.   #--------------------------------------------------------------------------
  6492.   # ● ふきだしの更新
  6493.   #--------------------------------------------------------------------------
  6494.   def update_balloon
  6495.     if @battler.sv.balloon_data == [] && @balloon
  6496.       @balloon_data = []
  6497.       @balloon.dispose
  6498.       return @balloon = nil
  6499.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  6500.       @balloon_data = @battler.sv.balloon_data
  6501.       @balloon = Sprite.new(self.viewport)
  6502.       @balloon.bitmap = Cache.system("Balloon")
  6503.       @balloon.zoom_x = @balloon_data[3]
  6504.       @balloon.zoom_y = @balloon_data[3]
  6505.       @balloon.ox = 32 if @battler.sv.mirror
  6506.       @balloon.oy = 16
  6507.       @balloon_count = 0
  6508.     end
  6509.     return if !@balloon
  6510.     @balloon.opacity = self.opacity
  6511.     @balloon.x = self.x
  6512.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  6513.     @balloon.z = self.z + 20
  6514.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  6515.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  6516.     @balloon_count += 1
  6517.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  6518.   end
  6519.   #--------------------------------------------------------------------------
  6520.   # ● 色調変更の更新
  6521.   #--------------------------------------------------------------------------
  6522.   def update_color
  6523.     color_set if @battler.sv.color_set != []
  6524.     return if @color_data == nil
  6525.     @color_data[4] -= 1
  6526.     if @color_data[4] == 0 && @color_data[5] != 0
  6527.       @color_data[4] = @color_data[5]
  6528.       @color_data[5] = 0
  6529.       @color_data[6] = [0,0,0,0]
  6530.     elsif @color_data[4] == 0
  6531.       @remain_color_data = @color_data
  6532.       @battler.sv.color = @color_data.dup
  6533.       return @color_data = nil
  6534.     end  
  6535.     for i in 0..3
  6536.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  6537.     end  
  6538.     @battler.sv.color = @color_data.dup
  6539.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  6540.   end
  6541.   #--------------------------------------------------------------------------
  6542.   # ● 残像の更新
  6543.   #--------------------------------------------------------------------------
  6544.   def update_mirage
  6545.     if @battler.sv.mirage == [] && @mirages
  6546.       @mirage_data = []
  6547.       for mirage in @mirages do mirage.dispose end
  6548.       return @mirages = nil
  6549.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  6550.       @mirage_data = @battler.sv.mirage
  6551.       @mirages = []
  6552.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  6553.       @mirage_count = 0
  6554.     end
  6555.     return if !@mirages
  6556.     @mirage_count += 1
  6557.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  6558.     for i in [email protected]
  6559.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  6560.     end
  6561.   end
  6562.   #--------------------------------------------------------------------------
  6563.   # ● 残像本体
  6564.   #--------------------------------------------------------------------------
  6565.   def mirage_body(body, opacity)
  6566.     body.bitmap = self.bitmap.dup
  6567.     body.x = self.x
  6568.     body.y = self.y
  6569.     body.ox = self.ox
  6570.     body.oy = self.oy
  6571.     body.z = self.z - 20
  6572.     body.mirror = self.mirror
  6573.     body.angle = self.angle
  6574.     body.opacity = opacity * self.opacity / 255
  6575.     body.zoom_x = self.zoom_x
  6576.     body.zoom_y = self.zoom_y   
  6577.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  6578.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  6579.   end   
  6580.   #--------------------------------------------------------------------------
  6581.   # ● 次のアニメを更新
  6582.   #--------------------------------------------------------------------------
  6583.   def update_next_anime
  6584.     return if !@next_anime
  6585.     for anime in @next_anime
  6586.       anime.update
  6587.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  6588.       anime.dispose if !anime.animation?
  6589.       @next_anime.delete(anime) if !anime.animation?
  6590.     end  
  6591.   end
  6592.   #--------------------------------------------------------------------------
  6593.   # ● フレーム更新
  6594.   #--------------------------------------------------------------------------
  6595.   alias update_sprite_battler_n03 update
  6596.   def update
  6597.     @battler.sv.update if @battler
  6598.     update_sprite_battler_n03
  6599.     update_next_anime
  6600.     update_shadow  if @battler && @shadow
  6601.     update_mirage  if @battler
  6602.     update_balloon if @battler
  6603.     update_remove if @battler && @removing && @battler.sv.change_up
  6604.   end
  6605.   #--------------------------------------------------------------------------
  6606.   # ● バトラー入れ替え
  6607.   #--------------------------------------------------------------------------
  6608.   def remove
  6609.     @battler.sv.start_action(@battler.sv.remove_action)
  6610.     $sv_camera.wait = 40
  6611.     @battler.sv.add_action("eval('set_change')")
  6612.     @removing = true
  6613.   end
  6614.   #--------------------------------------------------------------------------
  6615.   # ● バトラー入れ替えの更新
  6616.   #--------------------------------------------------------------------------
  6617.   def update_remove
  6618.     @battler.sv.change_up = false
  6619.     @removing = false
  6620.     @battler = nil
  6621.   end  
  6622.   #--------------------------------------------------------------------------
  6623.   # ● バトラー加入
  6624.   #--------------------------------------------------------------------------
  6625.   def join(join_battler)
  6626.     $sv_camera.wait = 30
  6627.     @battler = join_battler
  6628.     @battler_name = @battler.character_name
  6629.     @battler_index = @battler.character_index
  6630.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  6631.     self.bitmap = Cache.character(@battler_name)
  6632.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  6633.     create_shadow
  6634.     init_visibility
  6635.   end
  6636.   #--------------------------------------------------------------------------
  6637.   # ● 通常の設定に戻す ★再定義
  6638.   #--------------------------------------------------------------------------
  6639.   def revert_to_normal
  6640.     self.blend_type = 0
  6641.     self.opacity = 255
  6642.   end
  6643.   #--------------------------------------------------------------------------
  6644.   # ● 崩壊エフェクトの更新
  6645.   #--------------------------------------------------------------------------
  6646.   alias update_collapse_sprite_battler_n03 update_collapse
  6647.   def update_collapse
  6648.     return if @battler.sv.state(1) != "敵コラプス"
  6649.     update_collapse_sprite_battler_n03
  6650.   end
  6651.   #--------------------------------------------------------------------------
  6652.   # ● 別スプライトからのタイミング処理
  6653.   #--------------------------------------------------------------------------
  6654.   def set_process_timing(timing_data)
  6655.     for data in timing_data
  6656.       set_timing(data[0],data[1])
  6657.     end
  6658.     @battler.sv.timing = []
  6659.   end
  6660.   #--------------------------------------------------------------------------
  6661.   # ● タイミング処理
  6662.   #--------------------------------------------------------------------------
  6663.   def set_timing(se_flag, data)
  6664.     @ani_rate = 4
  6665.     data.se.play if se_flag
  6666.     case data.flash_scope
  6667.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  6668.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  6669.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  6670.     end
  6671.   end
  6672.   #--------------------------------------------------------------------------
  6673.   # ● 色調変更
  6674.   #--------------------------------------------------------------------------
  6675.   def color_set
  6676.     set = @battler.sv.color_set
  6677.     @battler.sv.color_set= []
  6678.     set[4] = 1 if set[4] == 0
  6679.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  6680.     @color_data = @remain_color_data
  6681.     @color_data[4] = set[4]
  6682.     @color_data[5] = set[5]
  6683.     @color_data[6] = set
  6684.   end
  6685.   #--------------------------------------------------------------------------
  6686.   # ● 解放
  6687.   #--------------------------------------------------------------------------
  6688.   alias dispose_sprite_battler_n03 dispose
  6689.   def dispose
  6690.     dispose_sprite_battler_n03
  6691.     @shadow.dispose if @shadow != nil
  6692.     @balloon.dispose if @balloon != nil
  6693.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  6694.   end
  6695. end


  6696. #==============================================================================
  6697. # ■ Spriteset_Battle
  6698. #------------------------------------------------------------------------------
  6699. #  バトル画面のスプライトをまとめたクラスです。
  6700. #==============================================================================
  6701. class Spriteset_Battle
  6702.   #--------------------------------------------------------------------------
  6703.   # ● 戦闘背景(床)スプライトの作成 ★再定義
  6704.   #--------------------------------------------------------------------------
  6705.   def create_battleback1
  6706.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  6707.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  6708.     @back1_sprite.z = 0
  6709.   end
  6710.   #--------------------------------------------------------------------------
  6711.   # ● 戦闘背景(壁)スプライトの作成 ★再定義
  6712.   #--------------------------------------------------------------------------
  6713.   def create_battleback2
  6714.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  6715.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  6716.     @back2_sprite.z = 1
  6717.   end
  6718.   #--------------------------------------------------------------------------
  6719.   # ● アクタースプライトの作成 ★再定義
  6720.   #--------------------------------------------------------------------------
  6721.   def create_actors
  6722.     @actor_sprites = []
  6723.     for i in 0...$game_party.max_battle_members
  6724.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  6725.     end
  6726.     @effect_sprites = Spriteset_Sideview.new(@viewport1)
  6727.   end
  6728.   #--------------------------------------------------------------------------
  6729.   # ● アクタースプライトの更新 ★再定義
  6730.   #--------------------------------------------------------------------------
  6731.   def update_actors
  6732.     @actor_sprites.each_with_index do |sprite, i|
  6733.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  6734.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  6735.       sprite.update
  6736.     end
  6737.     @effect_sprites.update
  6738.     update_program
  6739.   end
  6740.   #--------------------------------------------------------------------------
  6741.   # ● メンバーを加える
  6742.   #--------------------------------------------------------------------------
  6743.   def sprite_join(member, sprite)
  6744.     for sp in @actor_sprites
  6745.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  6746.     end
  6747.     sprite.join(member)
  6748.   end
  6749.   #--------------------------------------------------------------------------
  6750.   # ● バトルプログラムの更新
  6751.   #--------------------------------------------------------------------------
  6752.   def update_program
  6753.     return if $sv_camera.program_scroll == []
  6754.     for data in  $sv_camera.program_scroll
  6755.       @back1_sprite.start_back_data(data) if data[2] == 1
  6756.       @back2_sprite.start_back_data(data) if data[2] == 2
  6757.     end
  6758.     $sv_camera.program_scroll = []
  6759.   end
  6760.   #--------------------------------------------------------------------------
  6761.   # ● ヒット時の戦闘アニメ実行
  6762.   #--------------------------------------------------------------------------
  6763.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  6764.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  6765.   end
  6766.   #--------------------------------------------------------------------------
  6767.   # ● ダメージPOP
  6768.   #--------------------------------------------------------------------------
  6769.   def set_damage_pop(target)
  6770.     @effect_sprites.set_damage_pop(target)
  6771.   end
  6772.   #--------------------------------------------------------------------------
  6773.   # ● 解放
  6774.   #--------------------------------------------------------------------------
  6775.   alias dispose_spriteset_battle_n03 dispose
  6776.   def dispose
  6777.     dispose_spriteset_battle_n03
  6778.     @effect_sprites.dispose
  6779.   end
  6780.   
  6781.   
  6782.   
  6783. end


  6784. #==============================================================================
  6785. # ■ Window_BattleLog
  6786. #------------------------------------------------------------------------------
  6787. #  戦闘の進行を実況表示するウィンドウです。
  6788. #==============================================================================
  6789. class Window_BattleLog < Window_Selectable
  6790.   #--------------------------------------------------------------------------
  6791.   # ● ウェイト ★再定義
  6792.   #--------------------------------------------------------------------------
  6793.   def wait
  6794.   end
  6795.   #--------------------------------------------------------------------------
  6796.   # ● ウェイトとクリア ★再定義
  6797.   #--------------------------------------------------------------------------
  6798.   def wait_and_clear
  6799.     $sv_camera.wait = 10
  6800.   end
  6801.   #--------------------------------------------------------------------------
  6802.   # ● 行動結果の表示 ★再定義
  6803.   #--------------------------------------------------------------------------
  6804.   def display_action_results(target, item)
  6805.     if target.result.used
  6806.       last_line_number = line_number
  6807.       display_critical(target, item)
  6808.       display_damage(target, item)
  6809.       display_affected_status(target, item)
  6810.       display_failure(target, item)
  6811.     end
  6812.     off if !N03::BATTLE_LOG
  6813.   end
  6814.   #--------------------------------------------------------------------------
  6815.   # ● ウインドウ非表示
  6816.   #--------------------------------------------------------------------------
  6817.   def off
  6818.     @back_sprite.visible = self.visible = false
  6819.   end
  6820. end
  6821. #==============================================================================
  6822. # ■ Game_Interpreter
  6823. #------------------------------------------------------------------------------
  6824. #  イベントコマンドを実行するインタプリタです。
  6825. #==============================================================================
  6826. class Game_Interpreter
  6827.   #--------------------------------------------------------------------------
  6828.   # ● スイッチの操作
  6829.   #--------------------------------------------------------------------------
  6830.   alias command_121_game_interpreter_n03 command_121
  6831.   def command_121
  6832.     command_121_game_interpreter_n03
  6833.     $sv_camera.program_check
  6834.   end
  6835. end
  6836. #==============================================================================
  6837. #
  6838. # ▼ YSA Battle System: Predicted Charge Turn Battle
  6839. # -- Last Updated: 2012.02.20
  6840. # -- Level: Easy, Normal
  6841. # -- Requires: n/a
  6842. #
  6843. #==============================================================================

  6844. $imported = {} if $imported.nil?
  6845. $imported["YSA-PCTB"] = true

  6846. #==============================================================================
  6847. # ▼ Updates
  6848. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  6849. # 2012.02.20 - Reduced lag a little.
  6850. # 2012.02.19 - Fixed: Press Left/Right when choose action for actor.
  6851. #            - Script now can work alone, without YEA - Battle Engine Ace.
  6852. # 2012.02.16 - Finished Script.
  6853. # 2012.02.07 - Started Script.
  6854. #
  6855. #==============================================================================
  6856. # ▼ Introduction
  6857. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  6858. # Battle Type: Predicted CTB.
  6859. #
  6860. #==============================================================================
  6861. # ▼ Instructions
  6862. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  6863. # To install this script, open up your script editor and copy/paste this script
  6864. # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
  6865. #
  6866. # To get this work with YEA - Ace Battle Engine, set the default battle system
  6867. # for your game to be :pctb by either going to the Ace Battle Engine script and
  6868. # setting DEFAULT_BATTLE_SYSTEM as :pctb or by using the following script call:
  6869. #
  6870. # $game_system:set_battle_system(:pctb)
  6871. #
  6872. # -----------------------------------------------------------------------------
  6873. # Skill and Item Database
  6874. # -----------------------------------------------------------------------------
  6875. # SPEED FIX
  6876. # ~ When set SPEED FIX to a number larger than 0, battler's Speed will be reseted
  6877. #   by value, equal to SPEED_FIX * :speed_rate.
  6878. # ~ When set SPEED FIX to a number smaller than 0, battler's Speed will be
  6879. #   reduced by value, equal to SPEED_FIX * :speed_rate. This Skill/Item will be
  6880. #   counted as a charging skill/item.
  6881. #
  6882. # -----------------------------------------------------------------------------
  6883. # Skill and Item Notetags
  6884. # -----------------------------------------------------------------------------
  6885. # <charge rate: x%>
  6886. # Change battler's speed rate when charging a skill or item.
  6887. #
  6888. # <ctb cost: x%> or <ctb cost: x>
  6889. # Decide how much Speed will be reduced after an action.
  6890. # If it's a percent, Battler's Speed will be reduced x percents of Max Threshold.
  6891. # If it's a normal value, Battler's Speed will be reduced by x.
  6892. # Default: CTB COST 100% in percent and 0 in value
  6893. #
  6894. # <ctb change: +x%> or <ctb change: +x>
  6895. # <ctb change: -x%> or <ctb change: -x>
  6896. # Change target's Speed when use this skill/item.
  6897. # If it's a percent, Battler's Speed will be increase or decrease x percents of
  6898. # Max Threshold.
  6899. # If it's a normal value, Battler's Speed will be increase or decrease by x.
  6900. #
  6901. #==============================================================================
  6902. # ▼ Compatibility
  6903. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  6904. # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
  6905. # it will run with RPG Maker VX without adjusting.
  6906. #
  6907. # This script is compatible with Yanfly Engine Ace - Ace Battle Engine v1.15+
  6908. # and the script must be placed under Ace Battle Engine in the script listing.
  6909. #
  6910. #==============================================================================

  6911. #==============================================================================
  6912. # ▼ Configuration
  6913. #==============================================================================

  6914. module YSA
  6915.   module PCTB
  6916.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6917.     # - Mechanic Configuration -
  6918.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6919.     CTB_MECHANIC = { # Start
  6920.       :dyn_threshold      =>  true,
  6921.       # Threshold Offset. If Dynamic Threshold is set to false, this will be
  6922.       # threshold
  6923.       :threshold_offset   =>  400,
  6924.       # For Dynamic Threshold
  6925.       :threshold_min      =>  800,
  6926.       :threshold_rate     =>  4.0,
  6927.       # Ticks per turn
  6928.       :turn_ctr           =>  32,
  6929.       :wait_after_turn    =>  5, # Frames
  6930.       # Predict Type
  6931.       # Type 0: Show Battlers Order only.
  6932.       # Type 1: Show Battlers Order and Re-order when active battler chooses
  6933.       #         an action.
  6934.       # Type 2: Show Battlers Order in X Turns (FFX Style).
  6935.       :predict            =>  2,
  6936.       :pre_turns          =>  8,
  6937.     } # Do not remove this.
  6938.    
  6939.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6940.     # - Battler Configuration -
  6941.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6942.     BATTLER_RULES = { # Start
  6943.       # Speed offset when reset, multiply with Skill/Item speed
  6944.       :speed_rate         =>  16.0,
  6945.       :speed_limit        =>  0.75, # Set to 0 to disable limit.
  6946.       # Initialize speed
  6947.       :initial            =>  0.10,
  6948.       :surprise           =>  0.75,
  6949.       :random_rate        =>  8.0, # Multiply with AGI.
  6950.       # Charging Term
  6951.       :charge_text        =>  "正在准备!",#"%s is charging %s!",
  6952.       :charge_text_dur    =>  4,
  6953.       # Can't take action Term
  6954.       :cant_text          =>  "无法行动!",#"%s cannot take an action!",
  6955.       :cant_text_dur      =>  4,
  6956.       :show_cant_text     =>  true,
  6957.     } # Do not remove this.
  6958.    
  6959.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6960.     # - Event Configuration -
  6961.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  6962.     CTB_COMMON_EVENT = { # Start
  6963.       # Set to 0 to disable this.
  6964.       :turn_update        =>  0, # Run common event whenever turn updates.
  6965.       :end_action         =>  0, # Run common event whenever an action finishes.
  6966.     } # Do not remove this.
  6967.    
  6968.   end
  6969. end

  6970. #==============================================================================
  6971. # ▼ Editting anything past this point may potentially result in causing
  6972. # computer damage, incontinence, explosion of user's head, coma, death, and/or
  6973. # halitosis so edit at your own risk.
  6974. #==============================================================================

  6975. module YSA
  6976.   module REGEXP
  6977.   module USABLEITEM
  6978.    
  6979.     CHARGE_RATE = /<(?:CHARGE_RATE|charge rate):[ ](\d+)?([%%])>/i
  6980.     CTB_COST_PER = /<(?:CTB_COST|ctb cost):[ ](\d+)?([%%])>/i
  6981.     CTB_COST_VAL = /<(?:CTB_COST|ctb cost):[ ](\d+)?>/i
  6982.    
  6983.     CHANGE_CTB_PER = /<(?:CTB_CHANGE|ctb change):[ ]([\+\-]\d+)([%%])?>/i
  6984.     CHANGE_CTB_VAL = /<(?:CTB_CHANGE|ctb change):[ ]([\+\-]\d+)?>/i
  6985.    
  6986.   end # USABLEITEM
  6987.   end # REGEXP
  6988. end # YSA

  6989. #==============================================================================
  6990. # ■ DataManager
  6991. #==============================================================================

  6992. module DataManager
  6993.   
  6994.   #--------------------------------------------------------------------------
  6995.   # alias method: load_database
  6996.   #--------------------------------------------------------------------------
  6997.   class <<self; alias load_database_pctb load_database; end
  6998.   def self.load_database
  6999.     load_database_pctb
  7000.     load_notetags_pctb
  7001.   end
  7002.   
  7003.   #--------------------------------------------------------------------------
  7004.   # new method: load_notetags_pctb
  7005.   #--------------------------------------------------------------------------
  7006.   def self.load_notetags_pctb
  7007.     groups = [$data_skills, $data_items]
  7008.     for group in groups
  7009.       for obj in group
  7010.         next if obj.nil?
  7011.         obj.load_notetags_pctb
  7012.       end
  7013.     end
  7014.   end
  7015.   
  7016. end # DataManager

  7017. #==============================================================================
  7018. # ■ RPG::UsableItem
  7019. #==============================================================================

  7020. class RPG::UsableItem < RPG::BaseItem

  7021.   #--------------------------------------------------------------------------
  7022.   # public instance variables
  7023.   #--------------------------------------------------------------------------
  7024.   attr_accessor :charge_rate
  7025.   attr_accessor :ctb_cost
  7026.   attr_accessor :ctb_cost_val
  7027.   attr_accessor :ctb_change
  7028.   attr_accessor :ctb_change_val
  7029.   
  7030.   #--------------------------------------------------------------------------
  7031.   # common cache: load_notetags_pctb
  7032.   #--------------------------------------------------------------------------
  7033.   def load_notetags_pctb
  7034.     @charge_rate = 100
  7035.     @ctb_cost = 100
  7036.     @ctb_cost_val = 0
  7037.     @ctb_change = 0
  7038.     @ctb_change_val = 0
  7039.     #---
  7040.     self.note.split(/[\r\n]+/).each { |line|
  7041.       case line
  7042.       #---
  7043.       when YSA::REGEXP::USABLEITEM::CHARGE_RATE
  7044.         @charge_rate = $1.to_i
  7045.       when YSA::REGEXP::USABLEITEM::CTB_COST_PER
  7046.         @ctb_cost = $1.to_i
  7047.       when YSA::REGEXP::USABLEITEM::CTB_COST_VAL
  7048.         @ctb_cost_val = $1.to_i
  7049.       when YSA::REGEXP::USABLEITEM::CHANGE_CTB_PER
  7050.         @ctb_change = $1.to_i
  7051.       when YSA::REGEXP::USABLEITEM::CHANGE_CTB_VAL
  7052.         @ctb_change_val = $1.to_i
  7053.       #---
  7054.       end
  7055.     } # self.note.split
  7056.     #---
  7057.     @charge_rate = 100 if @charge_rate <= 0
  7058.     @ctb_cost = 100 if @ctb_cost > 100
  7059.   end
  7060.   
  7061. end # RPG::UsableItem

  7062. #==============================================================================
  7063. # ■ BattleManager
  7064. #==============================================================================

  7065. module BattleManager
  7066.   
  7067.   #--------------------------------------------------------------------------
  7068.   # alias method:
  7069.   #     - make_action_orders
  7070.   #     - prior_command
  7071.   #     - next_command
  7072.   #     - in_turn?
  7073.   #     - battle_start
  7074.   #--------------------------------------------------------------------------
  7075.   class <<self
  7076.     alias pctb_make_action_orders make_action_orders
  7077.     alias pctb_prior_command prior_command
  7078.     alias pctb_next_command next_command
  7079.     alias pctb_next_subject next_subject
  7080.     alias pctb_battle_start battle_start
  7081.     alias pctb_input_start input_start
  7082.     alias pctb_turn_start turn_start
  7083.   end
  7084.   
  7085.   #--------------------------------------------------------------------------
  7086.   # battle_start
  7087.   #--------------------------------------------------------------------------
  7088.   def self.battle_start
  7089.     pctb_battle_start
  7090.     if btype?(:pctb)
  7091.       make_pctb_action_orders
  7092.       make_pctb_threshold
  7093.       make_pctb_first_speed
  7094.     end
  7095.   end
  7096.   
  7097.   #--------------------------------------------------------------------------
  7098.   # make_action_orders
  7099.   #--------------------------------------------------------------------------
  7100.   def self.make_action_orders
  7101.     return if btype?(:pctb)
  7102.     pctb_make_action_orders unless btype?(:pctb)
  7103.   end
  7104.   
  7105.   #--------------------------------------------------------------------------
  7106.   # next_command
  7107.   #--------------------------------------------------------------------------
  7108.   def self.next_command
  7109.     return false if btype?(:pctb)
  7110.     pctb_next_command
  7111.   end
  7112.   
  7113.   #--------------------------------------------------------------------------
  7114.   # prior_command
  7115.   #--------------------------------------------------------------------------
  7116.   def self.prior_command
  7117.     return false if btype?(:pctb)
  7118.     pctb_prior_command
  7119.   end
  7120.   
  7121.   #--------------------------------------------------------------------------
  7122.   # new method: make_pctb_action_orders
  7123.   #--------------------------------------------------------------------------
  7124.   def self.make_pctb_action_orders
  7125.     @action_battlers = []
  7126.   end
  7127.   
  7128.   #--------------------------------------------------------------------------
  7129.   # new method: make_pctb_threshold
  7130.   #--------------------------------------------------------------------------
  7131.   def self.make_pctb_threshold
  7132.     @threshold = YSA::PCTB::CTB_MECHANIC[:threshold_offset]
  7133.     return unless YSA::PCTB::CTB_MECHANIC[:dyn_threshold]
  7134.     offset = 0
  7135.     battlers = $game_party.members + $game_troop.members
  7136.     battlers.each { |battler|        
  7137.       offset += battler.agi
  7138.     }
  7139.     @threshold += offset * YSA::PCTB::CTB_MECHANIC[:threshold_rate]
  7140.     @threshold = @threshold >= YSA::PCTB::CTB_MECHANIC[:threshold_min] ? @threshold : YSA::PCTB::CTB_MECHANIC[:threshold_min]
  7141.   end

  7142.   #--------------------------------------------------------------------------
  7143.   # new method: make_pctb_first_speed
  7144.   #--------------------------------------------------------------------------
  7145.   def self.make_pctb_first_speed
  7146.     init_value = YSA::PCTB::BATTLER_RULES[:initial] * pctb_threshold
  7147.     surprise_value = YSA::PCTB::BATTLER_RULES[:surprise] * pctb_threshold
  7148.     battlers = $game_party.members + $game_troop.members
  7149.     battlers.each { |battler|
  7150.       check = (battler.actor? && @preemptive) || (battler.enemy? && @surprise)
  7151.       battler.pctb_speed = init_value
  7152.       battler.pctb_speed = surprise_value if check
  7153.       random = YSA::PCTB::BATTLER_RULES[:random_rate] * battler.agi + 1
  7154.       battler.pctb_speed += rand(random)
  7155.     }
  7156.   end
  7157.   
  7158.   #--------------------------------------------------------------------------
  7159.   # new method: pctb_threshold
  7160.   #--------------------------------------------------------------------------
  7161.   def self.pctb_threshold
  7162.     return @threshold
  7163.   end
  7164.   
  7165.   #--------------------------------------------------------------------------
  7166.   # new method: set_actor
  7167.   #--------------------------------------------------------------------------
  7168.   def self.set_actor(actor_index)
  7169.     @actor_index = actor_index
  7170.   end
  7171.   
  7172.   #--------------------------------------------------------------------------
  7173.   # new method: action_list_ctb
  7174.   #--------------------------------------------------------------------------
  7175.   def self.action_list_ctb
  7176.     return @action_battlers
  7177.   end

  7178.   #--------------------------------------------------------------------------
  7179.   # alias method: next_subject
  7180.   #--------------------------------------------------------------------------
  7181.   def self.next_subject
  7182.     return pctb_next_subject unless btype?(:pctb)
  7183.     loop do
  7184.       battler = @action_battlers[0]
  7185.       return nil unless battler
  7186.       unless battler.index && battler.alive?
  7187.         @action_battlers.shift
  7188.         next
  7189.       end
  7190.       return battler
  7191.     end
  7192.   end
  7193.   
  7194.   #--------------------------------------------------------------------------
  7195.   # alias method: input_start
  7196.   #--------------------------------------------------------------------------
  7197.   def self.input_start
  7198.     return pctb_input_start unless btype?(:pctb)
  7199.     @phase = :input
  7200.     return false
  7201.   end
  7202.   
  7203.   #--------------------------------------------------------------------------
  7204.   # alias method: turn_start
  7205.   #--------------------------------------------------------------------------
  7206.   def self.turn_start
  7207.     return pctb_turn_start unless btype?(:pctb)
  7208.     @phase = :turn
  7209.     clear_actor
  7210.   end
  7211.   
  7212.   #--------------------------------------------------------------------------
  7213.   # alias method: turn_start
  7214.   #--------------------------------------------------------------------------
  7215.   def self.sort_battlers(cache = false)
  7216.     if btype?(:pctb)
  7217.       battlers = []
  7218.       for battler in ($game_party.members + $game_troop.members)
  7219.         next if battler.dead?
  7220.         battlers.push(battler)
  7221.       end
  7222.       battlers.sort! { |a,b|
  7223.         if a.pctb_ctr(cache) != b.pctb_ctr(cache)
  7224.           a.pctb_ctr(cache) <=> b.pctb_ctr(cache)
  7225.         elsif a.pctb_prediction != b.pctb_prediction
  7226.           b.pctb_prediction <=> a.pctb_prediction
  7227.         elsif a.agi != b.agi
  7228.           b.agi <=> a.agi
  7229.         elsif a.screen_x != b.screen_x
  7230.           a.screen_x <=> b.screen_x
  7231.         else
  7232.           a.name <=> b.name
  7233.         end
  7234.       }
  7235.       return battlers
  7236.     end
  7237.   end
  7238.   
  7239.   #--------------------------------------------------------------------------
  7240.   # new method: btype?
  7241.   #--------------------------------------------------------------------------
  7242.   def self.btype?(btype)
  7243.     return true if btype == :pctb
  7244.   end
  7245.   
  7246. end # BattleManager


  7247. #==============================================================================
  7248. # ■ Game_Battler
  7249. #==============================================================================

  7250. class Game_Battler < Game_BattlerBase
  7251.   
  7252.   #--------------------------------------------------------------------------
  7253.   # public instance variables
  7254.   #--------------------------------------------------------------------------
  7255.   attr_accessor :pctb_speed
  7256.   attr_accessor :pctb_prediction
  7257.   attr_accessor :last_obj
  7258.   attr_accessor :pctb_forced
  7259.   attr_accessor :pctb_speed_cache
  7260.   
  7261.   #--------------------------------------------------------------------------
  7262.   # alias method: initialize
  7263.   #--------------------------------------------------------------------------
  7264.   alias pctb_initialize initialize
  7265.   def initialize
  7266.     pctb_initialize
  7267.     @pctb_speed = 0
  7268.     @pctb_prediction = 0
  7269.     @pctb_speed_cache = 0
  7270.   end
  7271.   
  7272.   #--------------------------------------------------------------------------
  7273.   # new method: base_gain_pctb
  7274.   #--------------------------------------------------------------------------
  7275.   def base_gain_pctb
  7276.     return self.agi
  7277.   end
  7278.   
  7279.   #--------------------------------------------------------------------------
  7280.   # new method: real_gain_pctb
  7281.   #--------------------------------------------------------------------------
  7282.   def real_gain_pctb
  7283.     obj = current_action.item if current_action
  7284.     value = base_gain_pctb
  7285.     value = value * obj.charge_rate / 100 if obj && @charging_pctb
  7286.     return value
  7287.   end
  7288.   
  7289.   #--------------------------------------------------------------------------
  7290.   # new method: pctb_ctr
  7291.   #--------------------------------------------------------------------------
  7292.   def pctb_ctr(cache = false)
  7293.     @pctb_prediction = @pctb_speed unless cache
  7294.     @pctb_prediction = @pctb_speed_cache if cache
  7295.     return 0 if @pctb_prediction >= BattleManager.pctb_threshold
  7296.     value = (BattleManager.pctb_threshold.to_f - @pctb_prediction.to_f) / real_gain_pctb.to_f
  7297.     value = value.ceil
  7298.     @pctb_prediction += value * real_gain_pctb
  7299.     return value
  7300.   end
  7301.   
  7302.   #--------------------------------------------------------------------------
  7303.   # new method: reset_pctb_speed
  7304.   #--------------------------------------------------------------------------
  7305.   def reset_pctb_speed(cache = false)
  7306.     return @pctb_forced = false if @pctb_forced
  7307.     if actor?
  7308.       obj = input ? input.item : @last_obj
  7309.     else
  7310.       obj = @last_obj
  7311.     end
  7312.     real_cache = @pctb_speed
  7313.     if obj
  7314.       limit_rate = YSA::PCTB::BATTLER_RULES[:speed_limit]
  7315.       limit = BattleManager.pctb_threshold * limit_rate
  7316.       real_cache -= obj.ctb_cost * BattleManager.pctb_threshold / 100
  7317.       real_cache -= obj.ctb_cost_val
  7318.       value = YSA::PCTB::BATTLER_RULES[:speed_rate] * obj.speed
  7319.       value = [value, 0].max
  7320.       value = [value, limit].min if limit > 0
  7321.       real_cache += value
  7322.     else
  7323.       real_cache -= BattleManager.pctb_threshold
  7324.     end
  7325.     real_cache = [real_cache, 0].max
  7326.     @pctb_speed = real_cache if cache == false
  7327.     @pctb_speed_cache = real_cache if cache
  7328.     @charging_pctb = false unless cache
  7329.     @last_obj = nil unless cache
  7330.   end
  7331.   
  7332.   #--------------------------------------------------------------------------
  7333.   # new method: charging_start
  7334.   #--------------------------------------------------------------------------
  7335.   def charging_start
  7336.     return false unless BattleManager.btype?(:pctb)
  7337.     return false if @charging_pctb
  7338.     return false unless current_action
  7339.     obj = current_action.item
  7340.     return false unless obj
  7341.     return false if obj.speed >= 0
  7342.     value = obj.speed * YSA::PCTB::BATTLER_RULES[:speed_rate]
  7343.     @pctb_speed += value
  7344.     @pctb_speed = [@pctb_speed, 0].max
  7345.     BattleManager.action_list_ctb.shift
  7346.     @charging_pctb = true
  7347.     SceneManager.scene.charging_start(self)
  7348.     SceneManager.scene.update_pctb_speed
  7349.     return true
  7350.   end
  7351.   
  7352.   #--------------------------------------------------------------------------
  7353.   # new method: pctb_active?
  7354.   #--------------------------------------------------------------------------
  7355.   def pctb_active?
  7356.     return @pctb_speed >= BattleManager.pctb_threshold && movable?
  7357.   end
  7358.   
  7359.   #--------------------------------------------------------------------------
  7360.   # new method: storage_speed
  7361.   #--------------------------------------------------------------------------
  7362.   def storage_speed
  7363.     return if @cache_speed
  7364.     @cache_speed = @pctb_speed
  7365.   end
  7366.   
  7367.   #--------------------------------------------------------------------------
  7368.   # new method: restore_speed
  7369.   #--------------------------------------------------------------------------
  7370.   def restore_speed
  7371.     return unless @cache_speed
  7372.     @pctb_speed = @cache_speed
  7373.     @cache_speed = nil
  7374.   end

  7375.   #--------------------------------------------------------------------------
  7376.   # alias method: update_state_turns
  7377.   #--------------------------------------------------------------------------
  7378.   alias pctb_update_state_turns update_state_turns
  7379.   def update_state_turns
  7380.     if BattleManager.btype?(:pctb)
  7381.       states.each do |state|
  7382.         @state_turns[state.id] -= 1 if @state_turns[state.id] > 0 && state.auto_removal_timing == 2
  7383.       end
  7384.     else
  7385.       pctb_update_state_turns
  7386.     end
  7387.   end
  7388.   
  7389.   #--------------------------------------------------------------------------
  7390.   # new method: update_state_actions
  7391.   #--------------------------------------------------------------------------
  7392.   def update_state_actions
  7393.     return unless BattleManager.btype?(:pctb)
  7394.     states.each do |state|
  7395.       @state_turns[state.id] -= 1 if @state_turns[state.id] > 0 && state.auto_removal_timing == 1
  7396.     end
  7397.   end
  7398.   
  7399.   #--------------------------------------------------------------------------
  7400.   # alias method: on_action_end
  7401.   #--------------------------------------------------------------------------
  7402.   alias pctb_on_action_end on_action_end
  7403.   def on_action_end
  7404.     pctb_on_action_end
  7405.     update_state_actions
  7406.   end
  7407.   
  7408.   #--------------------------------------------------------------------------
  7409.   # alias method: force_action
  7410.   #--------------------------------------------------------------------------
  7411.   alias pctb_force_action force_action
  7412.   def force_action(skill_id, target_index)
  7413.     if BattleManager.btype?(:pctb)
  7414.       action = Game_Action.new(self, true)
  7415.       action.set_skill(skill_id)
  7416.       if target_index == -2
  7417.         action.target_index = last_target_index
  7418.       elsif target_index == -1
  7419.         action.decide_random_target
  7420.       else
  7421.         action.target_index = target_index
  7422.       end
  7423.       @actions = [action] + @actions
  7424.       @pctb_forced = true
  7425.     end
  7426.     pctb_force_action(skill_id, target_index) unless BattleManager.btype?(:pctb)
  7427.   end
  7428.   
  7429.   #--------------------------------------------------------------------------
  7430.   # alias method: make_action_times
  7431.   #--------------------------------------------------------------------------
  7432.   alias pctb_make_action_times make_action_times
  7433.   def make_action_times
  7434.     BattleManager.btype?(:pctb) ? 1 : pctb_make_action_times
  7435.   end
  7436.    
  7437. end # Game_Battler

  7438. #==============================================================================
  7439. # ■ Scene_Battle
  7440. #==============================================================================

  7441. class Scene_Battle < Scene_Base
  7442.   
  7443.   #--------------------------------------------------------------------------
  7444.   # new method: battle_start
  7445.   #--------------------------------------------------------------------------
  7446.   alias pctb_battle_start battle_start
  7447.   def battle_start
  7448.     pctb_battle_start
  7449.     update_pctb_speed
  7450.   end
  7451.   
  7452.   #--------------------------------------------------------------------------
  7453.   # new method: charging_start
  7454.   #--------------------------------------------------------------------------
  7455.   def charging_start(battler)
  7456.     @status_window.show
  7457.     @status_window.open
  7458.     if $imported["YEA-BattleEngine"]
  7459.       redraw_current_status
  7460.       @status_aid_window.hide
  7461.     else
  7462.       refresh_status
  7463.     end
  7464.     @actor_command_window.show
  7465.     string = YSA::PCTB::BATTLER_RULES[:charge_text]
  7466.     skill = battler.current_action.item
  7467.     skill_text = sprintf("\\i[%d]%s", skill.icon_index, skill.name)
  7468.     text = sprintf(string, battler.name, skill_text)
  7469.     @log_window.add_text(text)
  7470.     YSA::PCTB::BATTLER_RULES[:charge_text_dur].times do @log_window.wait end
  7471.     @log_window.back_one
  7472.   end

  7473.   #--------------------------------------------------------------------------
  7474.   # new method: update_pctb_speed
  7475.   #--------------------------------------------------------------------------
  7476.   def update_pctb_speed
  7477.     return if scene_changing?
  7478.     @clocktick = 0 if @clocktick.nil?
  7479.     ctr = YSA::PCTB::CTB_MECHANIC[:turn_ctr]
  7480.     #---
  7481.     battlers = BattleManager.sort_battlers
  7482.     first_battler = battlers[0]
  7483.     tick = first_battler.pctb_ctr
  7484.     #---
  7485.     battlers.each { |battler|
  7486.       battler.pctb_speed += tick * battler.real_gain_pctb
  7487.     }
  7488.     #---
  7489.     @clocktick = @clocktick + tick
  7490.     pass_turn = @clocktick / ctr
  7491.     pass_turn = pass_turn.floor.to_i
  7492.     pass_turn.times {
  7493.       $game_temp.reserve_common_event(YSA::PCTB::CTB_COMMON_EVENT[:turn_update]) if YSA::PCTB::CTB_COMMON_EVENT[:turn_update] > 0 && $data_common_events[YSA::PCTB::CTB_COMMON_EVENT[:turn_update]]
  7494.       process_event
  7495.       $game_troop.increase_turn
  7496.       turn_end
  7497.       wait(YSA::PCTB::CTB_MECHANIC[:wait_after_turn])
  7498.     }
  7499.     @clocktick = @clocktick % ctr
  7500.     #---
  7501.     if first_battler.movable?
  7502.       BattleManager.action_list_ctb.push(first_battler)
  7503.     else
  7504.       string = YSA::PCTB::BATTLER_RULES[:cant_text]
  7505.       text = sprintf(string, first_battler.name)
  7506.       @log_window.add_text(text)
  7507.       YSA::PCTB::BATTLER_RULES[:cant_text_dur].times do @log_window.wait end
  7508.       @log_window.back_one
  7509.       first_battler.clear_actions
  7510.       first_battler.reset_pctb_speed
  7511.       return update_pctb_speed && update_order_gauge
  7512.     end
  7513.     #---
  7514.     update_order_gauge
  7515.     #---
  7516.     start_pctb_action
  7517.   end
  7518.   
  7519.   #--------------------------------------------------------------------------
  7520.   # new method: start_pctb_action
  7521.   #--------------------------------------------------------------------------
  7522.   def start_pctb_action
  7523.     battler = BattleManager.action_list_ctb[0]
  7524.     battler.make_actions if battler.actions.size == 0
  7525.     return if battler.charging_start && battler.enemy?
  7526.     if battler.actor? && battler.input && battler.input.item.nil?
  7527.       BattleManager.input_start
  7528.       BattleManager.set_actor(battler.index)
  7529.       start_actor_command_selection
  7530.       if $imported["YEA-BattleEngine"]
  7531.         redraw_current_status
  7532.         @status_aid_window.hide
  7533.       else
  7534.         refresh_status
  7535.       end
  7536.       @status_window.show
  7537.       @status_window.open
  7538.     end
  7539.     turn_start if battler.enemy?
  7540.     turn_start if battler.actor? && battler.input && battler.input.item
  7541.   end
  7542.   
  7543.   #--------------------------------------------------------------------------
  7544.   # new method: update_order_gauge
  7545.   #--------------------------------------------------------------------------
  7546.   def update_order_gauge
  7547.     battler = BattleManager.action_list_ctb[0]
  7548.     return unless $imported["YSA-OrderBattler"]
  7549.     BattleManager.make_ctb_battler_order
  7550.     @active_order_sprite.battler = battler if @active_order_sprite
  7551.     for order in @spriteset_order
  7552.       order.make_destination
  7553.     end
  7554.   end
  7555.   
  7556.   #--------------------------------------------------------------------------
  7557.   # alias method: execute_action
  7558.   #--------------------------------------------------------------------------
  7559.   alias scene_battle_execute_action_pctb execute_action
  7560.   def execute_action
  7561.     scene_battle_execute_action_pctb
  7562.     unless BattleManager.action_forced?
  7563.       unless @subject.current_action.nil?
  7564.         @subject.last_obj = @subject.current_action.item unless @subject.last_obj
  7565.       end
  7566.     end
  7567.   end
  7568.   
  7569.   #--------------------------------------------------------------------------
  7570.   # alias method: execute_action
  7571.   #--------------------------------------------------------------------------
  7572.   alias scene_battle_invoke_item_pctb invoke_item
  7573.   def invoke_item(target, item)
  7574.     scene_battle_invoke_item_pctb(target, item)
  7575.     #---
  7576.     change_per = item.ctb_change * BattleManager.pctb_threshold / 100
  7577.     change_val = item.ctb_change_val
  7578.     target.pctb_speed += change_per
  7579.     target.pctb_speed = 0 if target.pctb_speed < 0
  7580.     target.pctb_speed += change_val
  7581.     target.pctb_speed = 0 if target.pctb_speed < 0
  7582.     #---
  7583.   end
  7584.   
  7585.   #--------------------------------------------------------------------------
  7586.   # alias method: process_action_end
  7587.   #--------------------------------------------------------------------------
  7588.   alias scene_battle_process_action_end_pctb process_action_end
  7589.   def process_action_end
  7590.     scene_battle_process_action_end_pctb
  7591.     unless BattleManager.action_forced?
  7592.       $game_temp.reserve_common_event(YSA::PCTB::CTB_COMMON_EVENT[:end_action]) if YSA::PCTB::CTB_COMMON_EVENT[:end_action] > 0 && $data_common_events[YSA::PCTB::CTB_COMMON_EVENT[:end_action]]
  7593.       process_event
  7594.       @subject.restore_speed
  7595.       @subject.reset_pctb_speed
  7596.       return start_pctb_action if @subject.pctb_active?
  7597.       BattleManager.action_list_ctb.shift
  7598.       update_pctb_speed
  7599.     end
  7600.   end
  7601.   
  7602.   #--------------------------------------------------------------------------
  7603.   # alias method: next_command
  7604.   #--------------------------------------------------------------------------
  7605.   alias pctb_next_command next_command
  7606.   def next_command
  7607.     if BattleManager.actor
  7608.       if BattleManager.actor != BattleManager.action_list_ctb[0]
  7609.         BattleManager.action_list_ctb[0].make_actions
  7610.         start_pctb_action
  7611.         return
  7612.       end
  7613.     end
  7614.     return @subject = nil if BattleManager.actor && BattleManager.actor.charging_start
  7615.     pctb_next_command
  7616.   end
  7617.   
  7618.   #--------------------------------------------------------------------------
  7619.   # alias method: create_actor_command_window
  7620.   #--------------------------------------------------------------------------
  7621.   alias yctb_create_actor_command_window create_actor_command_window
  7622.   def create_actor_command_window
  7623.     yctb_create_actor_command_window
  7624.     @actor_command_window.set_handler(:cancel, method(:ctb_prior_actor))
  7625.     @actor_command_window.set_handler(:dir4, method(:ctb_prior_actor))
  7626.     @actor_command_window.set_handler(:dir6, method(:ctb_next_command))
  7627.   end
  7628.   
  7629.   #--------------------------------------------------------------------------
  7630.   # new method: ctb_prior_actor
  7631.   #--------------------------------------------------------------------------
  7632.   def ctb_prior_actor
  7633.     BattleManager.actor.make_actions
  7634.     last_index = BattleManager.actor.index
  7635.     prior_index = last_index - 1
  7636.     if prior_index < 0
  7637.       @actor_command_window.close
  7638.       @party_command_window.setup
  7639.     else
  7640.       return ctb_prior_actor if !$game_party.members[prior_index].movable?
  7641.       $game_party.members[prior_index].make_actions
  7642.       BattleManager.input_start
  7643.       BattleManager.set_actor(prior_index)
  7644.       start_actor_command_selection
  7645.       if $imported["YEA-BattleEngine"]
  7646.         redraw_current_status
  7647.         @status_aid_window.hide
  7648.       else
  7649.         refresh_status
  7650.       end
  7651.       @status_window.show
  7652.       @status_window.open
  7653.     end
  7654.   end
  7655.   
  7656.   #--------------------------------------------------------------------------
  7657.   # new method: ctb_next_command
  7658.   #--------------------------------------------------------------------------
  7659.   def ctb_next_command
  7660.     BattleManager.actor.make_actions
  7661.     last_index = BattleManager.actor.index
  7662.     next_index = last_index + 1
  7663.     if next_index > ($game_party.members.size - 1)
  7664.       return start_confirm_command_selection if $imported["YEA-BattleCommandList"] && YEA::BATTLE_COMMANDS::USE_CONFIRM_WINDOW
  7665.       BattleManager.action_list_ctb[0].make_actions
  7666.       start_pctb_action
  7667.     else
  7668.       return ctb_next_command if !$game_party.members[next_index].movable?
  7669.       $game_party.members[next_index].make_actions
  7670.       BattleManager.input_start
  7671.       BattleManager.set_actor(next_index)
  7672.       start_actor_command_selection
  7673.       if $imported["YEA-BattleEngine"]
  7674.         redraw_current_status
  7675.         @status_aid_window.hide
  7676.       else
  7677.         refresh_status
  7678.       end
  7679.       @status_window.show
  7680.       @status_window.open
  7681.     end
  7682.   end
  7683.   
  7684.   #--------------------------------------------------------------------------
  7685.   # alias method: command_fight
  7686.   #--------------------------------------------------------------------------
  7687.   alias command_fight_pctb command_fight
  7688.   def command_fight
  7689.     return command_fight_pctb unless BattleManager.btype?(:pctb)
  7690.     if BattleManager.action_list_ctb[0].nil?
  7691.       update_pctb_speed
  7692.     else
  7693.       BattleManager.action_list_ctb[0].make_actions
  7694.       start_pctb_action
  7695.     end
  7696.   end
  7697.   
  7698.   #--------------------------------------------------------------------------
  7699.   # alias method: turn_start
  7700.   #--------------------------------------------------------------------------
  7701.   alias pctb_turn_start turn_start
  7702.   def turn_start
  7703.     last_subject = @subject if BattleManager.btype?(:pctb)
  7704.     pctb_turn_start
  7705.     @subject = last_subject if BattleManager.btype?(:pctb)
  7706.   end
  7707.   
  7708. end # Scene_Battle

  7709. #==============================================================================
  7710. #
  7711. # ▼ End of File
  7712. #
  7713. #==============================================================================
复制代码

12.jpg (23.99 KB, 下载次数: 27)

12.jpg

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2012-7-12
帖子
41
2
 楼主| 发表于 2012-7-12 16:28:41 | 只看该作者
忘说了   我用的是VA
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-27 07:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表