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

Project1

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

[已经解决] 两个脚本的冲突

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2180
在线时间
1011 小时
注册时间
2015-10-17
帖子
1285
跳转到指定楼层
1
发表于 2020-7-20 19:50:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 fjm 于 2020-7-20 19:53 编辑

敌人血条脚本和SideView100 脚本发生了冲突,大佬帮忙看下哪里出了问题


RUBY 代码复制
  1. [code][code]#==============================================================================
  2. # 功能:战斗中显示敌人血和蓝于敌人脚下
  3. # 适用:RMVX Ace
  4. # 作者:殇殃 2012.3.10
  5. # 使用方法:复制整个脚本插入到Main之前
  6. # 注意:由于血条是显示在敌人脚下,所以敌群的位置不能太靠底部,不然会被挡住。
  7. #       可以自行更改坐标修改显示位置、血条的颜色等。
  8. #==============================================================================
  9. # ■ Window_Base
  10. #------------------------------------------------------------------------------
  11. #  游戏中全部窗口的超级类。
  12. #==============================================================================
  13.  
  14. class Window_Base < Window
  15.   #--------------------------------------------------------------------------
  16.   # ● 描绘敌人HP
  17.   #--------------------------------------------------------------------------
  18.   def draw_enemy_hp(enemy, x, y, width = 80)
  19.     draw_gauge(x, y, width, enemy.hp_rate, hp_gauge_color1, hp_gauge_color2)
  20.     self.contents.font.color = system_color
  21.     self.contents.draw_text(x, y, 30, line_height, Vocab::hp_a)
  22.     self.contents.font.color = hp_color(enemy)
  23.     self.contents.draw_text(x + width - 64, y, 64, line_height, enemy.hp, 2)
  24.     #一个数字占16像素
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ● 绘制敌人MP
  28.   #--------------------------------------------------------------------------
  29.   def draw_enemy_mp(enemy, x, y, width = 80)
  30.     draw_gauge(x, y, width, enemy.mp_rate, mp_gauge_color1, mp_gauge_color2)
  31.     self.contents.font.color = system_color
  32.     self.contents.draw_text(x, y, 30, line_height, Vocab::mp_a)
  33.     self.contents.font.color = mp_color(enemy)
  34.     self.contents.draw_text(x + width - 64, y, 64, line_height, enemy.mp, 2)
  35.   end
  36. end
  37. #==============================================================================
  38. # ■ Sprite_Battler
  39. #------------------------------------------------------------------------------
  40. #  战斗显示用活动块。Game_Battler 类的实例监视、
  41. # 活动块的状态的监视、活动块状态自动变化。
  42. #==============================================================================
  43.  
  44. class Sprite_Battler < Sprite_Base
  45.   #--------------------------------------------------------------------------
  46.   # ● 初始化对象
  47.   #     viewport : 视区
  48.   #     battler  : 战斗者 (Game_Battler)
  49.   #--------------------------------------------------------------------------
  50.   def initialize(viewport, battler = nil)
  51.     super(viewport)
  52.     @battler = battler
  53.     @battler_visible = false
  54.     @effect_type = nil      
  55.     @effect_duration = 0   
  56.     if @battler.is_a?(Game_Enemy)
  57.       width = 24 + 80
  58.       height = 24 + 24 * 3
  59.       x = @battler.screen_x - 12 - width * 3 / 2
  60.       y = @battler.screen_y - 12 - height / 2
  61.       @enemy_hpmp_window = Window_Base.new(x, y, width, height)
  62.       @enemy_hpmp_window.opacity = 0
  63.        @enemy_hpmp_window.contents = Bitmap.new(width - 24, height - 48)
  64.       @enemy_hpmp_window.draw_text_ex(-20, 20, @battler.name)
  65.       @enemy_hpmp_window.draw_enemy_hp(@battler, 0, 48)
  66.       @old_hp = -1
  67.       @enemy_hpmp_window.draw_enemy_mp(@battler, 0, 48)
  68.       @old_mp = -1
  69.     end
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 释放
  73.   #--------------------------------------------------------------------------
  74.   def dispose
  75.     if self.bitmap != nil
  76.       self.bitmap.dispose
  77.     @enemy_hpmp_window.dispose
  78.     end
  79.     super
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 更新画面
  83.   #--------------------------------------------------------------------------
  84.   def update
  85.     super
  86.     if @battler == nil
  87.       self.bitmap = nil
  88.     else
  89.       @use_sprite = @battler.use_sprite?
  90.       if @use_sprite
  91.         update_bitmap
  92.         update_origin
  93.         update_position
  94.       end
  95.       setup_new_effect
  96.       setup_new_animation
  97.       update_effect
  98.       if @enemy_hpmp_window != nil and (@old_hp != @battler.hp or @old_mp != @battler.mp)
  99.         if @battler.hp == 0
  100.           @enemy_hpmp_window.hide
  101.         else
  102.           @enemy_hpmp_window.contents.clear
  103.           @enemy_hpmp_window.draw_text_ex(0, 10, @battler.name)
  104.           @enemy_hpmp_window.draw_enemy_hp(@battler, 0, 24)
  105.           @old_hp = @battler.hp
  106.           @enemy_hpmp_window.draw_enemy_mp(@battler, 0, 48)
  107.           @old_mp = @battler.mp
  108.           @enemy_hpmp_window.show #怪物死后再被复活
  109.         end #if battler.hp == 0
  110.       end
  111.     end #if @battler == nil
  112.   end
  113.  
  114. end
  115.  
  116.  
  117. [pre lang="ruby"]#==============================================================================
  118. # ■ Sideview Ver100
  119. #------------------------------------------------------------------------------
  120. #  サイドビューバトラーを管理するクラスです。
  121. #==============================================================================
  122. class SideView
  123.   #--------------------------------------------------------------------------
  124.   # ● 公開インスタンス変数 
  125.   #--------------------------------------------------------------------------
  126.   attr_accessor   :x                    # 画面X座標
  127.   attr_accessor   :y                    # 画面Y座標
  128.   attr_accessor   :z                    # 画面Z座標
  129.   attr_accessor   :h                    # 高さ座標
  130.   attr_accessor   :j                    # ジャンプ座標
  131.   attr_accessor   :c                    # カーブ座標
  132.   attr_accessor   :ox                   # 横原点
  133.   attr_accessor   :oy                   # 縦原点
  134.   attr_accessor   :oy_adjust            # 縦原点補正
  135.   attr_accessor   :angle                # 回転角度
  136.   attr_accessor   :zoom_x               # 横の拡大率
  137.   attr_accessor   :zoom_y               # 縦の拡大率
  138.   attr_accessor   :pattern_w            # セル横位置(矩形内)
  139.   attr_accessor   :pattern_h            # セル縦位置(矩形内)
  140.   attr_accessor   :sx                   # セル横位置(画像全体)
  141.   attr_accessor   :sy                   # セル縦位置(画像全体)
  142.   attr_accessor   :pattern_type         # セル更新タイプ
  143.   attr_accessor   :pattern_time         # セル更新間隔
  144.   attr_accessor   :graphic_name         # バトラー画像ファイル名
  145.   attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  146.   attr_accessor   :graphic_index        # バトラー画像インデックス
  147.   attr_accessor   :cw                   # セル横矩形
  148.   attr_accessor   :ch                   # セル縦矩形
  149.   attr_accessor   :shadow_visible       # 影表示
  150.   attr_accessor   :weapon_visible       # 武器表示
  151.  
  152.   attr_accessor   :wait                 # 次の動作待ち時間
  153.   attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  154.   attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  155.   attr_accessor   :force_action         # 強制アクション
  156.   attr_accessor   :target_battler       # ターゲットバトラー情報
  157.   attr_accessor   :second_targets       # セカンドターゲット情報
  158.   attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  159.   attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  160.   attr_accessor   :effect_data          # エフェクトデータ
  161.   attr_accessor   :anime_id             # アニメID配列
  162.   attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  163.   attr_accessor   :mirror               # 反転フラグ
  164.   attr_accessor   :opacity              # 透明度
  165.   attr_accessor   :opacity_data         # 透明度操作情報
  166.   attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  167.   attr_accessor   :m_a_data             # アニメ飛ばし情報
  168.   attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  169.   attr_accessor   :action_end           # バトルシーンでの行動終了
  170.   attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  171.   attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  172.   attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  173.   attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  174.   attr_accessor   :anime_plus_z         # 戦闘アニメZ座標補正
  175.   attr_accessor   :derivation_skill_id  # スキル派生ID
  176.   attr_accessor   :immortal             # 不死身フラグ
  177.   attr_accessor   :mirage               # 残像データ
  178.   attr_accessor   :balloon_data         # ふきだしデータ
  179.   attr_accessor   :timing               # 別バトラーからのタイミングデータ
  180.   attr_accessor   :timing_targets       # タイミングデータを渡す別バトラー
  181.   attr_accessor   :color_set            # 色調変更データ
  182.   attr_accessor   :color                # 色調データ
  183.   attr_accessor   :change_up            # 画像変更フラグ
  184.   attr_accessor   :hit                  # 被攻撃回数
  185.   attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  186.   attr_accessor   :counter_id           # カウンター時のスキルID
  187.   attr_accessor   :reflection_id        # 魔法反射時のアニメID
  188.   attr_accessor   :result_damage        # ターン終了時のHP変動データ
  189.   attr_accessor   :active               # 行動権
  190.   attr_accessor   :anime_off            # 戦闘アニメ消去
  191.   attr_accessor   :command_action       # コマンドアクションフラグ
  192.  
  193.   attr_accessor   :base_x               # 初期位置 X座標
  194.   attr_accessor   :base_y               # 初期位置 Y座標
  195.   attr_accessor   :base_h               # 初期位置 高さ座標
  196.   attr_accessor   :max_pattern_w        # セルの横分割数
  197.   attr_accessor   :max_pattern_h        # セルの縦分割数
  198.  
  199.   attr_reader     :collapse             # コラプスフラグ
  200.   attr_reader     :picture              # ピクチャ表示フラグ
  201.   #--------------------------------------------------------------------------
  202.   # ● オブジェクト初期化
  203.   #--------------------------------------------------------------------------
  204.   def initialize(battler)
  205.     @battler = battler
  206.     reset
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 初期化
  210.   #--------------------------------------------------------------------------
  211.   def reset
  212.     @x = 0
  213.     @y = 0
  214.     @z = 0
  215.     @h = 0
  216.     @j = 0
  217.     @c = 0
  218.     @jump = []
  219.     @curve = []
  220.     @ox = 0
  221.     @oy = 0
  222.     @oy_adjust = 0
  223.     @z_plus = 0
  224.     @move_time = 0
  225.     @angle = 0
  226.     @angle_time = 0
  227.     @zoom_x = 1
  228.     @zoom_y = 1
  229.     @zoom_time = 0
  230.     @pattern_w = 0
  231.     @pattern_h = 0
  232.     @sx = 0
  233.     @sy = 0
  234.     @pattern_type = 0
  235.     @pattern_time = 0
  236.     @pattern_rest_time = 0
  237.     @graphic_name = ""
  238.     @graphic_file_index = ""
  239.     @graphic_index = 0
  240.     @cw = 0
  241.     @ch = 0
  242.     @shadow_visible = false
  243.     @weapon_visible = true
  244.  
  245.     @wait = 0
  246.     @weapon_index = []
  247.     @weapon_end = true
  248.     @full_action = []
  249.     @action = []
  250.     @force_action = ""
  251.     @target_battler = []
  252.     @second_targets = []
  253.     @individual_targets = []
  254.     @m_a_targets = []
  255.     @effect_data = []
  256.     @anime_id = []
  257.     @anime_move_id = []
  258.     @opacity = 255
  259.     @opacity_data = []
  260.     @set_damage = false
  261.     @m_a_data = []
  262.     @m_a_starter = []
  263.     @action_end = false
  264.     @damage_anime_data = []
  265.     @anime_no_mirror = false
  266.     @anime_horming = false
  267.     @anime_camera_zoom = false
  268.     @anime_plus_z = true
  269.     @derivation_skill_id = 0
  270.     @immortal = false
  271.     @mirage = []
  272.     @play_data = []
  273.     @balloon_data = []
  274.     @picture = false
  275.     @timing = []
  276.     @timing_targets = []
  277.     @color_set = []
  278.     @color = []
  279.     @change_up = false
  280.     @non_motion = false
  281.     @graphics_change = false
  282.     @hit = []
  283.     @add_state = []
  284.     @collapse = false
  285.     @counter_id = 0
  286.     @reflection_id = 0
  287.     @result_damage = [0,0]
  288.     @active = false
  289.     @anime_off = false
  290.     @command_action = false
  291.  
  292.     @base_x = 0
  293.     @base_y = 0
  294.     @base_z = 0
  295.     @base_h = 0
  296.     @max_pattern_w = 0
  297.     @max_pattern_h = 0
  298.     @pattern_kind = 0
  299.     @pattern_count = 0
  300.     @move_time = 0
  301.     @mirror = false
  302.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  303.     @pre_change_data = nil
  304.   end  
  305.   #--------------------------------------------------------------------------
  306.   # ● セットアップ
  307.   #--------------------------------------------------------------------------
  308.   def setup(bitmap_width, bitmap_height, first_action_flag)
  309.     reset if first_action_flag
  310.     set_data
  311.     set_base_position if !@graphics_change
  312.     set_graphics(bitmap_width, bitmap_height)
  313.     set_target
  314.     setup_graphics_change if @graphics_change
  315.     first_battler_anime_set if first_action_flag
  316.   end  
  317.   #--------------------------------------------------------------------------
  318.   # ● バトラーデータ取得
  319.   #--------------------------------------------------------------------------
  320.   def set_data
  321.     return if @battler == nil
  322.     if @battler.actor?
  323.       @graphic_name = @battler.character_name
  324.       @graphic_index = @battler.character_index
  325.     else
  326.       @graphic_name = @battler.battler_name
  327.       @graphic_index = 0
  328.     end
  329.     @max_pattern_w = max_pattern[0]
  330.     @max_pattern_h = max_pattern[1]
  331.   end
  332.   #--------------------------------------------------------------------------
  333.   # ● ベース座標をセット data = [X軸, Y軸, H軸]  moment_set…瞬間配置
  334.   #--------------------------------------------------------------------------
  335.   def set_base_position(moment_set = true)
  336.     mirroring_reset
  337.     if @battler.actor?
  338.       data = N03::ACTOR_POSITION[@battler.index].dup
  339.       @base_x = data[0] * 100 if !@mirror
  340.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  341.     else
  342.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  343.       @base_x = data[0] * 100 if !$sv_camera.mirror
  344.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  345.     end
  346.     @base_y = data[1] * 100
  347.     @base_h = data[2] * 100
  348.     @base_z = @y
  349.     return if !moment_set
  350.     @x = @base_x
  351.     @y = @base_y
  352.     @z = @base_z
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● グラフィックデータ取得
  356.   #--------------------------------------------------------------------------
  357.   def set_graphics(bitmap_width, bitmap_height)
  358.     sign = @graphic_name[/^[\!\$]./]
  359.     if sign && sign.include?('$')
  360.       @cw = bitmap_width / @max_pattern_w
  361.       @ch = bitmap_height / @max_pattern_h
  362.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  363.       @cw = bitmap_width
  364.       @ch = bitmap_height
  365.     else
  366.       @cw = bitmap_width / (@max_pattern_w * 4)
  367.       @ch = bitmap_height / (@max_pattern_h * 2)
  368.     end
  369.     @ox = @cw / 2
  370.     @oy = @ch
  371.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  372.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● ターゲットをセット
  376.   #--------------------------------------------------------------------------
  377.   def set_target(target = nil)
  378.     @target_battler = target
  379.     @target_battler = [@battler] if target == nil
  380.     @second_targets = @target_battler
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 画像変更用のセットアップ
  384.   #--------------------------------------------------------------------------
  385.   def setup_graphics_change
  386.     @graphics_change = false
  387.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  388.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  389.   end  
  390.   #--------------------------------------------------------------------------
  391.   # ● 戦闘開始時の待機アニメ画像データ取得
  392.   #--------------------------------------------------------------------------
  393.   def first_battler_anime_set
  394.     loop do
  395.       update
  396.       break if @action_data == nil
  397.       break if @action_data[0] == "motion"
  398.       break if @action_data[0] == "move" && @action_data[8] != ""
  399.       break if @full_action == []
  400.     end
  401.     start_action(first_action) if @battler.movable?
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● アクション開始
  405.   #--------------------------------------------------------------------------
  406.   def start_action(kind = nil)
  407.     return if @event_fix && $game_troop.interpreter.running?
  408.     # ウェイト中の場合キャンセル
  409.     return @wait -= 1 if @wait > 0 && kind == nil
  410.     action_setup(false) if kind != nil
  411.     set_action(kind)
  412.     @action = kind if @action == nil
  413.     # 行動配列が無い場合は行動終了処理へ移行
  414.     action_terminate if @action == nil
  415.     # 次のアクション決定
  416.     @action_data = N03::ACTION[@action]
  417.     next_action
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   # ● 行動パラメータの初期化
  421.   #--------------------------------------------------------------------------
  422.   def action_setup(reset = true)
  423.     @event_fix = false
  424.     @set_damage = false
  425.     @action_end = false
  426.     @balloon_data = []
  427.     @loop_act = []
  428.     angle_reset if reset
  429.     zoom_reset if reset
  430.     opacity_reset if reset
  431.     @curve = []
  432.     @c = 0
  433.     convert_jump
  434.   end  
  435.   #--------------------------------------------------------------------------
  436.   # ● 行動終了処理
  437.   #--------------------------------------------------------------------------
  438.   def action_terminate
  439.     @mirage = [] if @mirage_end
  440.     mirroring_reset
  441.     @picture = false
  442.     @individual_targets = []
  443.     action_setup if @active
  444.     action_setup(false) if !@active
  445.     # 待機アクションへ移行
  446.     stand_by_action if !@non_motion
  447.     # 戦闘行動のアクティブ権を終了
  448.     next_battler
  449.   end  
  450.   #--------------------------------------------------------------------------
  451.   # ● 新しいアクション内容の決定
  452.   #--------------------------------------------------------------------------
  453.   def set_action(kind = nil)
  454.     full_act = N03::FULLACTION[kind]
  455.     @full_action = full_act.dup if full_act != nil
  456.     @action = @full_action.shift
  457.     # 参照したアクションがフルアクションであれば全体のアクションを統合
  458.     full_act2 = N03::FULLACTION[@action]
  459.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  460.   end
  461.   #--------------------------------------------------------------------------
  462.   # ● 次のアクションへ
  463.   #--------------------------------------------------------------------------
  464.   def next_action
  465.     @wait = 0
  466.     # ショートカット確認
  467.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  468.     # ウエイト設定
  469.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  470.     @wait = rand(@wait.abs + 1) if @wait < 0
  471.     # アクション開始
  472.     action_play
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● 待機アクションへ移行
  476.   #--------------------------------------------------------------------------
  477.   def stand_by_action
  478.     # 通常待機に
  479.     stand_by_act = normal
  480.     # HPが1/4でピンチアクションに
  481.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  482.     # ステートチェック
  483.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  484.     # コマンドチェック
  485.     stand_by_act = command if @command_action && command != nil
  486.     set_action(stand_by_act)
  487.     @action = stand_by_act if @action == nil
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● 強制アクション開始
  491.   #--------------------------------------------------------------------------
  492.   def start_force_action
  493.     return if @active
  494.     start_action(@force_action)
  495.     @force_action = ""
  496.   end  
  497.   #--------------------------------------------------------------------------
  498.   # ● アクション追加
  499.   #--------------------------------------------------------------------------
  500.   def add_action(kind)
  501.     @full_action.push(kind)
  502.   end  
  503.   #--------------------------------------------------------------------------
  504.   # ● アクションの挿入
  505.   #--------------------------------------------------------------------------
  506.   def unshift_action(kind)
  507.     @full_action.unshift(kind)
  508.   end  
  509.   #--------------------------------------------------------------------------
  510.   # ● フレーム更新
  511.   #--------------------------------------------------------------------------
  512.   def update
  513.     # アクション開始
  514.     start_action
  515.     # 強制アクション開始
  516.     start_force_action if @force_action != ""
  517.     # アニメパターン更新
  518.     update_pattern
  519.     # 移動更新
  520.     update_move
  521.     # 回転更新
  522.     update_angle if @angle_time != 0
  523.     # 拡大縮小更新
  524.     update_zoom if @zoom_time != 0
  525.     # 透明度更新
  526.     update_opacity if @opacity_data != []
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # ● アニメパターン更新
  530.   #--------------------------------------------------------------------------
  531.   def update_pattern
  532.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  533.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  534.     @pattern_rest_time = @pattern_time
  535.     # 再生開始・終了セル位置を取得
  536.     if @pattern_kind > 0 # 通常再生中
  537.       @pattern_start = 0
  538.       @pattern_end = @max_pattern_w - 1
  539.     elsif @pattern_kind < 0 # 逆転再生中
  540.       @pattern_start = @max_pattern_w - 1
  541.       @pattern_end = 0
  542.     end
  543.     # 片道の再生が終了
  544.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  545.     # ループ処理
  546.     case @pattern_type.abs
  547.     when  1,3 # 片道
  548.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  549.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  550.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  551.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  552.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  553.       @pattern_count = 0
  554.     when  2,4 # 往復
  555.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  556.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  557.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  558.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  559.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  560.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  561.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  562.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  563.       @pattern_count = 0 if @pattern_count == 2
  564.     end
  565.     # セル更新
  566.     @pattern_w += 1 * @pattern_kind
  567.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 移動の更新
  571.   #--------------------------------------------------------------------------
  572.   def update_move
  573.     @z = @y / 100 + @z_plus
  574.     return if @move_time == 0
  575.     target_position_set if @horming_move
  576.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  577.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  578.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  579.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  580.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  581.     @move_time -= 1
  582.     convert_jump if @move_time == 0
  583.   end
  584.   #--------------------------------------------------------------------------
  585.   # ● 移動目標の更新
  586.   #--------------------------------------------------------------------------
  587.   def target_position_set
  588.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  589.     @target_x = target_position[0] + @move_x
  590.     @target_y = target_position[1] + @move_y
  591.     @target_h = target_position[2] + @move_h if @move_h != nil
  592.   end  
  593.   #--------------------------------------------------------------------------
  594.   # ● 回転更新
  595.   #--------------------------------------------------------------------------
  596.   def update_angle
  597.     @angle += @angling
  598.     @angle_time -= 1
  599.     return if @angle_time != 0
  600.     return angle_reset if @angle_data[4] == 0
  601.     angling(@angle_data) if @angle_data[4] == 2
  602.   end  
  603.   #--------------------------------------------------------------------------
  604.   # ● 拡大縮小更新
  605.   #--------------------------------------------------------------------------
  606.   def update_zoom
  607.     @zoom_x += @zooming_x
  608.     @zoom_y += @zooming_y
  609.     @zoom_time -= 1
  610.     return if @zoom_time != 0
  611.     return zoom_reset if @zoom_data[4] == 0
  612.     zooming(@zoom_data) if @zoom_data[4] == 2
  613.   end
  614.   #--------------------------------------------------------------------------
  615.   # ● 透明度更新
  616.   #--------------------------------------------------------------------------
  617.   def update_opacity
  618.     @opacity += @opacity_data[2]
  619.     @opacity_data[0] -= 1
  620.     return if @opacity_data[0] != 0
  621.     return if !@opacity_data[5]
  622.     @opacity_data[2] *= -1
  623.     @opacity_data[0] = @opacity_data[1]
  624.   end
  625.   #--------------------------------------------------------------------------
  626.   # ● アクション実行
  627.   #--------------------------------------------------------------------------
  628.   def action_play
  629.     return if @action_data == nil
  630.     action = @action_data[0]
  631.     # バトラー反転の場合
  632.     return mirroring                    if action == "mirror"
  633.     # 残像の場合
  634.     return mirage_set                   if action == "mirage"
  635.     # 回転の場合  
  636.     return angling                      if action == "angle"
  637.     # 拡大縮小の場合  
  638.     return zooming                      if action == "zoom"
  639.     # 透明度操作の場合  
  640.     return set_opacity                  if action == "opacity"
  641.     # バトラーアニメの場合
  642.     return battler_anime                if action == "motion"
  643.     # 移動の場合
  644.     return move                         if action == "move"
  645.     # 武器アニメの場合
  646.     return weapon_anime([@action_data]) if action == "wp"
  647.     # アニメ飛ばしの場合
  648.     return move_anime                   if action == "m_a"
  649.     # 戦闘シーン通信の場合(コラプス)
  650.     return set_play_data                if action == "collapse" or action == "no_collapse"
  651.     # データベース戦闘アニメ表示の場合  
  652.     return battle_anime                 if action == "anime"
  653.     # カメラワークの場合
  654.     return camera                       if action == "camera"
  655.     # 画面のシェイクの場合
  656.     return shake                        if action == "shake"
  657.     # 画面色調変更の場合
  658.     return color_effect                 if action == "color"
  659.     # トランジションの場合
  660.     return transition                   if action == "ts"
  661.     # ふきだしアニメ表示の場合  
  662.     return balloon_anime                if action == "balloon"
  663.     # ピクチャ表示の場合
  664.     return picture_set                  if action == "pic"
  665.     # ステート操作の場合
  666.     return state_set                    if action == "sta"
  667.     # FPS変更の場合
  668.     return fps                          if action == "fps"
  669.     # バトラー画像変更の場合  
  670.     return graphics_change              if action == "change"
  671.     # スキル派生の場合  
  672.     return derivating_skill             if action == "der"
  673.     # BGM/BGS/SE演奏の場合  
  674.     return sound                        if action == "sound"
  675.     # ムービー再生の場合  
  676.     return movie                        if action == "movie"
  677.     # ゲームスイッチ操作の場合  
  678.     return switches                     if action == "switch"
  679.     # ゲーム変数操作の場合  
  680.     return variable                     if action == "variable"
  681.     # 条件分岐(ゲームスイッチ)の場合
  682.     return nece_1                       if action == "n_1"
  683.     # 条件分岐(ゲーム変数)の場合
  684.     return nece_2                       if action == "n_2"
  685.     # 条件分岐(ステート)の場合
  686.     return nece_3                       if action == "n_3"
  687.     # 条件分岐(スキル)の場合
  688.     return nece_4                       if action == "n_4"
  689.     # 条件分岐(パラメータ)の場合
  690.     return nece_5                       if action == "n_5"
  691.     # 条件分岐(装備)の場合
  692.     return nece_6                       if action == "n_6"
  693.     # 条件分岐(スクリプト)の場合
  694.     return nece_7                       if action == "n_7"
  695.     # セカンドターゲット操作の場合  
  696.     return second_targets_set           if action == "s_t"
  697.     # コモンイベント呼び出しの場合  
  698.     return call_common_event            if action == "common"
  699.     # 戦闘アニメ消去の場合  
  700.     return @anime_off = true            if action == "anime_off"
  701.     # 強制戦闘終了の場合  
  702.     return BattleManager.process_abort  if action == "battle_end"
  703.     # 画面固定の場合  
  704.     return Graphics.freeze              if action == "graphics_freeze"
  705.     # ダメージアニメの場合  
  706.     return damage_anime                 if action == "damage_anime"
  707.     # 武器消去の場合  
  708.     return @weapon_visible = false      if action == "weapon_off"
  709.     # 武器消去解除の場合  
  710.     return @weapon_visible = true       if action == "weapon_on"
  711.     # 待機キャンセルの場合
  712.     return @non_motion = true           if action == "non_motion"
  713.     # 待機キャンセル解除の場合
  714.     return @non_motion = false          if action == "non_motion_cancel"
  715.     # 初期位置変更の場合
  716.     return change_base_position         if action == "change_base_position"
  717.     # 初期位置変更解除の場合
  718.     return set_base_position(false)     if action == "set_base_position"
  719.     # 強制アクションの場合  
  720.     return force_act                    if action == "force_action"
  721.     # 強制アクションの場合 (セカンドターゲット)
  722.     return force_act2                   if action == "force_action2"
  723.     # 個別開始の場合
  724.     return individual_start             if action == "individual_start"
  725.     # 個別終了の場合
  726.     return individual_end               if action == "individual_end"
  727.     # ループ開始の場合
  728.     return loop_start                   if action == "loop_start"
  729.     # ループ終了の場合
  730.     return loop_end                     if action == "loop_end"
  731.     # 自分のみ更新の場合
  732.     return only_action_on               if action == "only_action_on"
  733.     # 自分のみ更新解除の場合
  734.     return only_action_off              if action == "only_action_off"
  735.     # 次の行動者へ移行の場合
  736.     return next_battler                 if action == "next_battler"
  737.     # 画像変更フラグの場合
  738.     return set_change                   if action == "set_change"
  739.     # スクリプト操作の場合   
  740.     return eval(@action_data[0])
  741.   end
  742.   #--------------------------------------------------------------------------
  743.   # ● バトラー反転実行
  744.   #--------------------------------------------------------------------------
  745.   def mirroring
  746.     @mirror = !@mirror
  747.   end  
  748.   #--------------------------------------------------------------------------
  749.   # ● 反転初期化
  750.   #--------------------------------------------------------------------------
  751.   def mirroring_reset
  752.     @mirror = false
  753.     mirroring if !@battler.actor? && N03::ENEMY_MIRROR
  754.     mirroring if $sv_camera.mirror
  755.   end  
  756.   #--------------------------------------------------------------------------
  757.   # ● 残像実行
  758.   #--------------------------------------------------------------------------
  759.   def mirage_set
  760.     @mirage = @action_data.dup
  761.     @mirage_end = @mirage[3]
  762.     @mirage = [] if @mirage[1] == 0
  763.   end  
  764.   #--------------------------------------------------------------------------
  765.   # ● 回転実行
  766.   #--------------------------------------------------------------------------
  767.   def angling(data = @action_data)
  768.     @angle_data = data.dup
  769.     @oy = @ch / 2
  770.     @oy_adjust = @ch * 50
  771.     @angle_time = data[1]
  772.     start_angle = data[2] * N03.mirror_num(@mirror)
  773.     end_angle = data[3] * N03.mirror_num(@mirror)
  774.     # 時間が0以下なら即座に最終角度へ
  775.     @angle_time = 1 if @angle_time <= 0
  776.     # 回転時間から1フレームあたりの角度を出す
  777.     @angling = (end_angle - start_angle) / @angle_time
  778.     # 割り切れない余りを初期角度に
  779.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● 回転初期化
  783.   #--------------------------------------------------------------------------
  784.   def angle_reset
  785.     @oy = @ch
  786.     @angle = @angle_time = @oy_adjust = 0
  787.   end  
  788.   #--------------------------------------------------------------------------
  789.   # ● 拡大縮小実行
  790.   #--------------------------------------------------------------------------
  791.   def zooming(data = @action_data)
  792.     @zoom_data = data.dup
  793.     @zoom_time = data[1]
  794.     start_zoom_x = data[2][0]
  795.     start_zoom_y = data[2][1]
  796.     end_zoom_x = data[3][0]
  797.     end_zoom_y = data[3][1]
  798.     # 時間が0以下なら即座に最終サイズへ
  799.     @zoom_time = 1 if @zoom_time <= 0
  800.     # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  801.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  802.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  803.     # 開始サイズに
  804.     @zoom_x = start_zoom_x
  805.     @zoom_y = start_zoom_y
  806.   end  
  807.   #--------------------------------------------------------------------------
  808.   # ● 拡大縮小初期化
  809.   #--------------------------------------------------------------------------
  810.   def zoom_reset
  811.     @zoom_x = @zoom_y = 1
  812.     @zoom_time = 0
  813.   end  
  814.   #--------------------------------------------------------------------------
  815.   # ● バトラー透明度操作
  816.   #--------------------------------------------------------------------------
  817.   def set_opacity
  818.     data = @action_data.dup
  819.     @opacity = data[2]
  820.     opacity_move = (data[3] - data[2])/ data[1]
  821.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  822.     @wait = data[1] if data[7]
  823.     @wait *= 2 if data[6] && data[7]
  824.   end
  825.   #--------------------------------------------------------------------------
  826.   # ● 透明度操作初期化
  827.   #--------------------------------------------------------------------------
  828.   def opacity_reset
  829.     @opacity = 255
  830.     @opacity = 0 if @battler.hidden?
  831.     @opacity_data = []
  832.   end
  833.   #--------------------------------------------------------------------------
  834.   # ● バトラーアニメ実行
  835.   #--------------------------------------------------------------------------
  836.   def battler_anime(anime_data = nil)
  837.     anime_data = @action_data.dup if anime_data == nil
  838.     @graphic_file_index = anime_data[1] if !graphic_fix
  839.     @pattern_h = anime_data[2]
  840.     @pattern_w = anime_data[3]
  841.     @pattern_h = 0 if @max_pattern_w == 1
  842.     @pattern_w = 0 if @max_pattern_h == 1
  843.     @pattern_type = anime_data[4]
  844.     @pattern_time = anime_data[5]
  845.     @pattern_rest_time = anime_data[5]
  846.     @pattern_count = 0
  847.     @pattern_kind = 1
  848.     @pattern_kind = -1 if @pattern_type < 0
  849.     @pattern_kind = 0 if @pattern_type == 0
  850.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  851.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  852.     @z_plus = anime_data[6]
  853.     @wait = set_anime_wait if anime_data[7]
  854.     @shadow_visible = anime_data[8]
  855.     weapon_anime(anime_data)
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ● アニメウエイト計算
  859.   #--------------------------------------------------------------------------
  860.   def set_anime_wait
  861.     if @pattern_type > 0
  862.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  863.     elsif @pattern_type < 0
  864.       pattern_time_a = @pattern_w.abs + 1
  865.     else
  866.       return @pattern_time if @pattern_type == 0
  867.     end
  868.     case @pattern_type
  869.     when 1,-1, 3,-3
  870.       return pattern_time_a * @pattern_time
  871.     when 2,-2, 4,-4
  872.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  873.     end
  874.   end  
  875.   #--------------------------------------------------------------------------
  876.   # ● 移動実行
  877.   #--------------------------------------------------------------------------
  878.   def move
  879.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  880.     return if @move_targets == []
  881.     @move_targets = [@battler] if @action_data[1].abs == 7
  882.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  883.     @move_y = @action_data[3] * 100
  884.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  885.     @move_h = nil if @action_data[4] == nil
  886.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  887.     @horming_move = true
  888.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  889.     target_position_set
  890.     target_position = [@target_x, @target_y, @target_z]
  891.     distanse_move = @action_data[5] > 0
  892.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  893.     @wait = @move_time
  894.     curve
  895.     jump
  896.     @move_time = 1 if @move_time == 0
  897.     @horming_move = false if !@move_targets or @move_targets.include?(@battler)
  898.     update_move if @move_time == 1
  899.   end  
  900.   #--------------------------------------------------------------------------
  901.   # ● カーブ実行
  902.   #--------------------------------------------------------------------------
  903.   def curve
  904.     @c = 0
  905.     return if @action_data[6] == 0
  906.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  907.   end  
  908.   #--------------------------------------------------------------------------
  909.   # ● ジャンプ実行
  910.   #--------------------------------------------------------------------------
  911.   def jump
  912.     convert_jump
  913.     return if @action_data[7] == [0,0]
  914.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  915.   end  
  916.   #--------------------------------------------------------------------------
  917.   # ● J座標(ジャンプ高度)をH座標に変換
  918.   #--------------------------------------------------------------------------
  919.   def convert_jump
  920.     @h += @j
  921.     @j = 0
  922.     @jump = []
  923.   end  
  924.   #--------------------------------------------------------------------------
  925.   # ● データベース戦闘アニメ実行
  926.   #--------------------------------------------------------------------------
  927.   def battle_anime
  928.     data = @action_data.dup
  929.     targets = N03.get_targets(data[2], @battler)
  930.     return if targets == []
  931.     data[8] = !data[8] if @mirror
  932.     @set_damage           = data[5]
  933.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  934.     @damage_anime_data[1] = data[8]
  935.     @damage_anime_data[2] = data[7]
  936.     @damage_anime_data[3] = data[6]
  937.     @damage_anime_data[4] = data[9]
  938.     @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  939.     return if @set_damage
  940.     for target in targets do display_anime(targets, target, data) end
  941.   end
  942.   #--------------------------------------------------------------------------
  943.   # ● 武器アニメ開始
  944.   #--------------------------------------------------------------------------
  945.   def weapon_anime(anime_data)
  946.     @weapon_end = true
  947.     for i in 9...anime_data.size
  948.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  949.     end
  950.   end
  951.   #--------------------------------------------------------------------------
  952.   # ● アニメ飛ばし開始
  953.   #--------------------------------------------------------------------------
  954.   def move_anime
  955.     @m_a_starter = []
  956.     @m_a_targets = []
  957.     starters = N03.get_targets(@action_data[2], @battler)
  958.     targets = N03.get_targets(@action_data[3], @battler)
  959.     return if starters == [] or targets == []
  960.     single_start = true if starters != nil && @action_data[2] < 0
  961.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  962.     starters = [starters[0]] if single_start
  963.     single_end = true if targets != nil && @action_data[3] < 0
  964.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  965.     targets = [targets[0]] if single_end
  966.     se_flag = true
  967.     for starter in starters
  968.       for target in targets
  969.         data = @action_data.dup
  970.         data[17] = se_flag
  971.         @effect_data.push(data)
  972.         @m_a_targets.push(target)
  973.         @m_a_starter.push(starter)
  974.         se_flag = false
  975.       end
  976.     end  
  977.   end
  978.   #--------------------------------------------------------------------------
  979.   # ● スプライトセット通信
  980.   #--------------------------------------------------------------------------
  981.   def set_effect_data(data = @action)
  982.     action_data = N03::ACTION[data]
  983.     return if action_data == nil
  984.     @effect_data.push(action_data.dup)
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ● 戦闘シーン通信のデータを格納
  988.   #--------------------------------------------------------------------------
  989.   def set_play_data(data = @action_data)
  990.     @play_data = data.dup
  991.   end
  992.   #--------------------------------------------------------------------------
  993.   # ● 戦闘アニメの表示
  994.   #--------------------------------------------------------------------------
  995.   def display_anime(targets, target, data)
  996.     return if !N03.first_of_all_screen_anime(data[1], target, targets)
  997.     target.animation_id         = N03.get_attack_anime_id(data[1], @battler)
  998.     target.animation_mirror     = data[8]
  999.     target.sv.anime_horming     = data[3]
  1000.     target.sv.anime_camera_zoom = data[6]
  1001.     target.sv.anime_no_mirror   = data[7]
  1002.     target.sv.anime_plus_z      = data[9]
  1003.   end
  1004.   #--------------------------------------------------------------------------
  1005.   # ● 戦闘アニメ拡張データの初期化
  1006.   #--------------------------------------------------------------------------
  1007.   def reset_anime_data
  1008.     @anime_no_mirror = false
  1009.     @anime_horming = false
  1010.     @anime_camera_zoom = false
  1011.     @timing_targets = []
  1012.     @anime_plus_z = true
  1013.   end  
  1014.   #--------------------------------------------------------------------------
  1015.   # ● カメラワーク
  1016.   #--------------------------------------------------------------------------
  1017.   def camera
  1018.     data = @action_data.dup
  1019.     N03.camera(@battler, data)
  1020.     @wait = data[4] if data[5]
  1021.   end  
  1022.   #--------------------------------------------------------------------------
  1023.   # ● 画面のシェイク
  1024.   #--------------------------------------------------------------------------
  1025.   def shake
  1026.     data = @action_data.dup
  1027.     $sv_camera.shake(data[1], data[2], data[3])
  1028.     @wait = data[3] if data[4]
  1029.   end
  1030.   #--------------------------------------------------------------------------
  1031.   # ● 画面色調変更
  1032.   #--------------------------------------------------------------------------
  1033.   def color_effect
  1034.     case @action_data[1]
  1035.     when 0,1,2,3,4,5
  1036.       targets = N03.get_targets(@action_data[1], @battler)
  1037.     when 6
  1038.       screen = true
  1039.     when 7
  1040.       targets = [@battler] + @target_battler
  1041.     when 8
  1042.       screen = true
  1043.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  1044.     when 9
  1045.       screen = true
  1046.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  1047.     when 10
  1048.       screen = true
  1049.       targets = $game_troop.members + $game_party.battle_members
  1050.     end
  1051.     return if screen == nil && targets == []
  1052.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  1053.     @wait = @action_data[2][4] if @action_data[3]
  1054.     return if !screen
  1055.     $sv_camera.color_set[1] = @action_data[2]
  1056.     $sv_camera.color_set[2] = @action_data[2]
  1057.   end  
  1058.   #--------------------------------------------------------------------------
  1059.   # ● トランジション
  1060.   #--------------------------------------------------------------------------
  1061.   def transition
  1062.     $sv_camera.perform_transition(@action_data)
  1063.   end  
  1064.   #--------------------------------------------------------------------------
  1065.   # ● ふきだしアニメ表示
  1066.   #--------------------------------------------------------------------------
  1067.   def balloon_anime
  1068.     @balloon_data = @action_data.dup
  1069.   end  
  1070.   #--------------------------------------------------------------------------
  1071.   # ● ピクチャ表示
  1072.   #--------------------------------------------------------------------------
  1073.   def picture_set
  1074.     @picture = true
  1075.     set_effect_data
  1076.   end
  1077.   #--------------------------------------------------------------------------
  1078.   # ● ステート操作
  1079.   #--------------------------------------------------------------------------
  1080.   def state_set
  1081.     targets = N03.get_targets(@action_data[1], @battler)
  1082.     return if targets == []
  1083.     case @action_data[2]
  1084.     when 1 ; targets = [targets[rand(targets.size)]]
  1085.     when 2 ; targets -= @battler if targets.include?(@battler)
  1086.     end
  1087.     for target in targets
  1088.       for id in @action_data[4]
  1089.         target.add_state(id) if @action_data[3] == "+"
  1090.         target.remove_state(id) if @action_data[3] == "-"
  1091.       end
  1092.     end
  1093.   end
  1094.   #--------------------------------------------------------------------------
  1095.   # ● FPS変更
  1096.   #--------------------------------------------------------------------------
  1097.   def fps
  1098.     Graphics.frame_rate = @action_data[1]
  1099.     start_action
  1100.   end
  1101.   #--------------------------------------------------------------------------
  1102.   # ● バトラー画像変更の場合
  1103.   #--------------------------------------------------------------------------
  1104.   def graphics_change
  1105.     @graphics_change = true
  1106.     return @battler.graphics_change(@action_data[3]) if !@battler.actor?
  1107.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
  1108.     if @action_data[4] == []
  1109.       face_name = @battler.face_name
  1110.       face_index = @battler.face_index
  1111.     else
  1112.       face_name = @action_data[4][1]
  1113.       face_index = @action_data[4][0]
  1114.     end
  1115.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  1116.   end
  1117.   #--------------------------------------------------------------------------
  1118.   # ● スキル派生
  1119.   #--------------------------------------------------------------------------
  1120.   def derivating_skill
  1121.     # 未修得スキルは派生不可なら
  1122.     return if !@action_data[1] && !@battler.skill_learn?($data_skills[@action_data[3]])
  1123.     # コスト不足は派生不可なら
  1124.     return if !@action_data[2] && !@battler.skill_cost_payable?($data_skills[@action_data[3]])
  1125.     # 派生
  1126.     @derivation_skill_id = @action_data[3]
  1127.     # 以降のアクションをキャンセル
  1128.     @full_action = []
  1129.   end
  1130.   #--------------------------------------------------------------------------
  1131.   # ● BGM/BGS/SE演奏
  1132.   #--------------------------------------------------------------------------
  1133.   def sound
  1134.     pitch = @action_data[2]
  1135.     vol   = @action_data[3]
  1136.     name  = @action_data[4]
  1137.     case @action_data[1]
  1138.     when "se"
  1139.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  1140.     when "bgm"
  1141.       # 名前指定のない場合、現在のBGMを変えないように
  1142.       name = RPG::BGM.last.name if @action_data[4] == ""
  1143.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1144.     when "bgs"
  1145.       name = RPG::BGS.last.name if @action_data[4] == ""
  1146.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1147.     end
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● ムービーの再生
  1151.   #--------------------------------------------------------------------------
  1152.   def movie
  1153.     Graphics.play_movie('Movies/' + @action_data[1])
  1154.   end
  1155.   #--------------------------------------------------------------------------
  1156.   # ● ゲームスイッチ操作
  1157.   #--------------------------------------------------------------------------
  1158.   def switches
  1159.     for id in @action_data[1]
  1160.       $game_switches[id] = true if id > 0
  1161.       $sv_camera.switches[id.abs] = true  if id < 0
  1162.     end
  1163.     for id in @action_data[2]
  1164.       $game_switches[id] = false if id > 0
  1165.       $sv_camera.switches[id.abs] = false  if id < 0
  1166.     end
  1167.     $sv_camera.program_check
  1168.   end
  1169.   #--------------------------------------------------------------------------
  1170.   # ● ゲーム変数操作
  1171.   #--------------------------------------------------------------------------
  1172.   def variable
  1173.     # オペランドチェック
  1174.     operand = @action_data[3]
  1175.     operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  1176.     # 変数操作で分岐
  1177.     case @action_data[2]
  1178.     when 0 ; $game_variables[@action_data[1]] = operand  # 代入
  1179.     when 1 ; $game_variables[@action_data[1]] += operand # 加算
  1180.     when 2 ; $game_variables[@action_data[1]] -= operand # 減算
  1181.     when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
  1182.     when 4 ; $game_variables[@action_data[1]] /= operand # 除算
  1183.     when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
  1184.     end
  1185.   end  
  1186.   #--------------------------------------------------------------------------
  1187.   # ● 条件分岐 (ゲームスイッチ)
  1188.   #--------------------------------------------------------------------------
  1189.   def nece_1
  1190.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  1191.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  1192.     action_diverging(judgment, @action_data[3])
  1193.   end  
  1194.   #--------------------------------------------------------------------------
  1195.   # ● 条件分岐 (ゲーム変数)
  1196.   #--------------------------------------------------------------------------
  1197.   def nece_2
  1198.     variable = $game_variables[@action_data[1]]
  1199.     num = @action_data[2]
  1200.     num = $game_variables[@action_data[2].abs] if num < 0
  1201.     case @action_data[3]
  1202.     when 0 ; judgment = variable == num
  1203.     when 1 ; judgment = variable < num
  1204.     when 2 ; judgment = variable > num
  1205.     end  
  1206.     action_diverging(judgment, @action_data[4])
  1207.   end  
  1208.   #--------------------------------------------------------------------------
  1209.   # ● 条件分岐 (ステート)
  1210.   #--------------------------------------------------------------------------
  1211.   def nece_3
  1212.     targets = N03.get_targets(@action_data[1], @battler)
  1213.     return if targets == []
  1214.     member_num = @action_data[4]
  1215.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1216.     hit_count = 0
  1217.     miss_count = 0
  1218.     for target in targets
  1219.       hit_count += 1 if target.state?(@action_data[2])
  1220.       miss_count += 1 if !target.state?(@action_data[2])
  1221.     end
  1222.     case @action_data[3]
  1223.     when 0 ; judgment = hit_count >= member_num
  1224.     when 1 ; judgment = miss_count >= member_num
  1225.     end
  1226.     action_diverging(judgment, @action_data[5])
  1227.   end  
  1228.   #--------------------------------------------------------------------------
  1229.   # ● 条件分岐 (スキル)
  1230.   #--------------------------------------------------------------------------
  1231.   def nece_4
  1232.     targets = N03.get_targets(@action_data[1], @battler)
  1233.     return if targets == []
  1234.     member_num = @action_data[4]
  1235.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1236.     hit_count = 0
  1237.     miss_count = 0
  1238.     for target in targets
  1239.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  1240.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  1241.     end
  1242.     case @action_data[3]
  1243.     when 0 ; judgment = hit_count >= member_num
  1244.     when 1 ; judgment = miss_count >= member_num
  1245.     end
  1246.     action_diverging(judgment, @action_data[5])
  1247.   end  
  1248.   #--------------------------------------------------------------------------
  1249.   # ● 条件分岐 (パラメータ)
  1250.   #--------------------------------------------------------------------------
  1251.   def nece_5
  1252.     targets = N03.get_targets(@action_data[1], @battler)
  1253.     return if targets == []
  1254.     member_num = @action_data[5]
  1255.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1256.     hit_count = 0
  1257.     for target in targets
  1258.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  1259.     end
  1260.     judgment = hit_count >= member_num
  1261.     action_diverging(judgment, @action_data[6])
  1262.   end  
  1263.   #--------------------------------------------------------------------------
  1264.   # ● 条件分岐 (装備)
  1265.   #--------------------------------------------------------------------------
  1266.   def nece_6
  1267.     targets = N03.get_targets(@action_data[1], @battler)
  1268.     return if targets == []
  1269.     member_num = @action_data[5]
  1270.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1271.     hit_count = 0
  1272.     miss_count = 0
  1273.     for target in targets
  1274.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  1275.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  1276.     end
  1277.     case @action_data[4]
  1278.     when 0 ; judgment = hit_count >= member_num
  1279.     when 1 ; judgment = miss_count >= member_num
  1280.     end
  1281.     action_diverging(judgment, @action_data[6])
  1282.   end  
  1283.   #--------------------------------------------------------------------------
  1284.   # ● 条件分岐 (スクリプト)
  1285.   #--------------------------------------------------------------------------
  1286.   def nece_7
  1287.     judgment = eval(@action_data[2])
  1288.     action_diverging(judgment, @action_data[1])
  1289.   end  
  1290.   #--------------------------------------------------------------------------
  1291.   # ● アクション分岐  
  1292.   #--------------------------------------------------------------------------
  1293.   def action_diverging(judgment, kind)
  1294.     result = 0
  1295.     if judgment
  1296.       result = 1 if kind == 1
  1297.       result = 2 if kind == 2
  1298.     else
  1299.       result = 1 if kind == 0
  1300.     end
  1301.     # フルアクション終了
  1302.     return @full_action = []  if result == 2
  1303.     # 次のアクションを除去
  1304.     @full_action.shift if result == 1
  1305.     set_action
  1306.     # 次のアクションを実行
  1307.     @action_data = N03::ACTION[@action]
  1308.     next_action
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # ● セカンドターゲット操作
  1312.   #--------------------------------------------------------------------------
  1313.   def second_targets_set
  1314.     targets = N03.get_targets(@action_data[1], @battler)
  1315.     for target in targets
  1316.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  1317.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  1318.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  1319.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  1320.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  1321.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  1322.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  1323.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  1324.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  1325.       targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  1326.     end
  1327.     return @second_targets = [] if targets.size == 0
  1328.     case @action_data[8]
  1329.     when 1 ; targets = [targets[rand(targets.size)]]
  1330.     when 2 ; targets.delete(@battler)
  1331.     end
  1332.     return @second_targets = [] if targets.size == 0
  1333.     @second_targets = targets
  1334.     case @action_data[9]
  1335.     when 0 ; return
  1336.     when 1 ; set_play_data(["second_targets_set"])
  1337.     when 2 ; set_play_data(["targets_set"])
  1338.     end
  1339.     @wait += 1
  1340.   end
  1341.   #--------------------------------------------------------------------------
  1342.   # ● コモンイベント呼び出し
  1343.   #--------------------------------------------------------------------------
  1344.   def call_common_event
  1345.     $game_temp.reserve_common_event(@action_data[1])
  1346.     $sv_camera.event = true
  1347.     @event_fix = @action_data[2]
  1348.   end
  1349.   #--------------------------------------------------------------------------
  1350.   # ● ダメージアニメ
  1351.   #--------------------------------------------------------------------------
  1352.   def damage_anime(delay_time = 12)
  1353.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  1354.     action_play
  1355.     @wait -= delay_time
  1356.     @full_action.unshift("eval('@damage_anime_data = []
  1357.     @set_damage = true')")
  1358.   end
  1359.   #--------------------------------------------------------------------------
  1360.   # ● 通常コラプス
  1361.   #--------------------------------------------------------------------------
  1362.   def normal_collapse
  1363.     @collapse = true
  1364.     return
  1365.   end
  1366.   #--------------------------------------------------------------------------
  1367.   # ● 初期位置変更
  1368.   #--------------------------------------------------------------------------
  1369.   def change_base_position
  1370.     @base_x = @x
  1371.     @base_y = @y
  1372.     @base_h = @h
  1373.   end  
  1374.   #--------------------------------------------------------------------------
  1375.   # ● 強制アクション実行
  1376.   #--------------------------------------------------------------------------
  1377.   def force_act
  1378.     target(@full_action.shift)
  1379.   end
  1380.   #--------------------------------------------------------------------------
  1381.   # ● 強制アクション実行 (セカンドターゲット)
  1382.   #--------------------------------------------------------------------------
  1383.   def force_act2
  1384.     target2(@full_action.shift)
  1385.   end
  1386.   #--------------------------------------------------------------------------
  1387.   # ● 個別処理開始
  1388.   #--------------------------------------------------------------------------
  1389.   def individual_start
  1390.     @individual_targets = @target_battler.dup
  1391.     @remain_targets = @target_battler.dup
  1392.     @target_battler = [@individual_targets[0]]
  1393.     # リピート部分のアクションを保持
  1394.     @individual_act = @full_action.dup
  1395.   end
  1396.   #--------------------------------------------------------------------------
  1397.   # ● 個別処理終了
  1398.   #--------------------------------------------------------------------------
  1399.   def individual_end
  1400.     @individual_targets.shift
  1401.     for target in @individual_targets
  1402.       @individual_targets.shift if target.dead?
  1403.     end
  1404.     # ターゲットが残っているなら行動リピート
  1405.     return @target_battler = @remain_targets if @individual_targets.size == 0
  1406.     @full_action = @individual_act.dup
  1407.     @target_battler = [@individual_targets[0]]
  1408.   end
  1409.   #--------------------------------------------------------------------------
  1410.   # ● ループ開始
  1411.   #--------------------------------------------------------------------------
  1412.   def loop_start
  1413.     # ループ部分のアクションを保持
  1414.     @loop_act = @full_action.dup
  1415.   end
  1416.   #--------------------------------------------------------------------------
  1417.   # ● ループ終了
  1418.   #--------------------------------------------------------------------------
  1419.   def loop_end
  1420.     # 行動リピート
  1421.     @full_action = @loop_act.dup if @loop_act != []
  1422.   end
  1423.   #--------------------------------------------------------------------------
  1424.   # ● 次の行動者へ移行
  1425.   #--------------------------------------------------------------------------
  1426.   def next_battler
  1427.     @action_end = true
  1428.     @active = false
  1429.   end
  1430.   #--------------------------------------------------------------------------
  1431.   # ● 画像変更フラグ
  1432.   #--------------------------------------------------------------------------
  1433.   def set_change
  1434.     @change_up = true
  1435.   end
  1436.   #--------------------------------------------------------------------------
  1437.   # ● 戦闘シーン通信
  1438.   #--------------------------------------------------------------------------
  1439.   def play_data
  1440.     data = @play_data
  1441.     @play_data = []
  1442.     return data
  1443.   end
  1444.   #--------------------------------------------------------------------------
  1445.   # ● ショートカットコマンド
  1446.   #--------------------------------------------------------------------------
  1447.   def anime(anime_id, wait = true)
  1448.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  1449.   end
  1450.   def anime_me(anime_id, wait = true)
  1451.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  1452.   end
  1453.   def se(file, pitch = 100)
  1454.     @action_data = ["sound",  "se", pitch, 100, file]
  1455.   end
  1456.   def target(act)
  1457.     for target in @target_battler do target.sv.force_action = act end
  1458.   end
  1459.   def target2(act)
  1460.     for target in @second_targets do target.sv.force_action = act end
  1461.   end
  1462.   def delay(time)
  1463.     @wait = @battler.index * time
  1464.   end
  1465.   #--------------------------------------------------------------------------
  1466.   # ● バトラーのIDを取得
  1467.   #--------------------------------------------------------------------------
  1468.   def id
  1469.     return @battler.id if @battler.actor?
  1470.     return -@battler.id
  1471.   end
  1472.   #--------------------------------------------------------------------------
  1473.   # ● 被クリティカルフラグを取得
  1474.   #--------------------------------------------------------------------------
  1475.   def critical?
  1476.     return @battler.result.critical
  1477.   end
  1478.   #--------------------------------------------------------------------------
  1479.   # ● 被回復フラグを取得
  1480.   #--------------------------------------------------------------------------
  1481.   def recovery?
  1482.     recovery = false
  1483.     recovery = true if @battler.result.hp_damage < 0
  1484.     recovery = true if @battler.result.mp_damage < 0
  1485.     recovery = true if @battler.result.tp_damage < 0
  1486.     return recovery
  1487.   end
  1488.   #--------------------------------------------------------------------------
  1489.   # ● 被スキルIDを取得
  1490.   #--------------------------------------------------------------------------
  1491.   def damage_skill_id
  1492.     return @damage_skill_id
  1493.   end
  1494.   #--------------------------------------------------------------------------
  1495.   # ● 被アイテムIDを取得
  1496.   #--------------------------------------------------------------------------
  1497.   def damage_item_id
  1498.     return @damage_item_id
  1499.   end
  1500.   #--------------------------------------------------------------------------
  1501.   # ● 装備武器を取得
  1502.   #--------------------------------------------------------------------------
  1503.   def weapon_id
  1504.     return 0 if !@battler.weapons[0]
  1505.     return @battler.weapons[0].id
  1506.   end
  1507.   #--------------------------------------------------------------------------
  1508.   # ● 装備武器のタイプを取得
  1509.   #--------------------------------------------------------------------------
  1510.   def weapon_type
  1511.     return 0 if !@battler.weapons[0]
  1512.     return @battler.weapons[0].wtype_id
  1513.   end
  1514.   #--------------------------------------------------------------------------
  1515.   # ● 盾を装備しているか
  1516.   #--------------------------------------------------------------------------
  1517.   def shield?
  1518.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  1519.     return false
  1520.   end
  1521.   #--------------------------------------------------------------------------
  1522.   # ● ダメージがあるか
  1523.   #--------------------------------------------------------------------------
  1524.   def damage_zero?
  1525.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  1526.   end
  1527.   #--------------------------------------------------------------------------
  1528.   # ● スキルIDを取得
  1529.   #--------------------------------------------------------------------------
  1530.   def skill_id
  1531.     return @counter_id if @counter_id != 0
  1532.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1533.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  1534.     return @battler.current_action.item.id
  1535.   end
  1536.   #--------------------------------------------------------------------------
  1537.   # ● スキルのタイプを取得
  1538.   #--------------------------------------------------------------------------
  1539.   def skill_type
  1540.     return 0 if skill_id == 0
  1541.     return $data_skills[skill_id].stype_id
  1542.   end
  1543.   #--------------------------------------------------------------------------
  1544.   # ● スキル名を取得
  1545.   #--------------------------------------------------------------------------
  1546.   def skill_name
  1547.     return "" if skill_id == 0
  1548.     return $data_skills[skill_id].name
  1549.   end
  1550.   #--------------------------------------------------------------------------
  1551.   # ● アイテムIDを取得
  1552.   #--------------------------------------------------------------------------
  1553.   def item_id
  1554.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1555.     return @battler.current_action.item.id
  1556.   end
  1557.   #--------------------------------------------------------------------------
  1558.   # ● 攻撃アクション
  1559.   #--------------------------------------------------------------------------
  1560.   def attack_action(item)
  1561.     return skill_action if item.is_a?(RPG::Skill)
  1562.     return item_action
  1563.   end
  1564.   #--------------------------------------------------------------------------
  1565.   # ● ダメージアクションベース
  1566.   #--------------------------------------------------------------------------
  1567.   def damage_action_base(item)
  1568.     @damage_skill_id = 0
  1569.     @damage_item_id = 0
  1570.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  1571.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  1572.   end  
  1573.   #--------------------------------------------------------------------------
  1574.   # ● ダメージアクション
  1575.   #--------------------------------------------------------------------------
  1576.   def damage_action(attacker, item)
  1577.     damage_action_base(item)
  1578.     act = damage(attacker)
  1579.     return if @active
  1580.     start_action(act) if act != nil
  1581.   end
  1582.   #--------------------------------------------------------------------------
  1583.   # ● 回避アクション
  1584.   #--------------------------------------------------------------------------
  1585.   def evasion_action(attacker, item)
  1586.     damage_action_base(item)
  1587.     act = evasion(attacker)
  1588.     return if @active
  1589.     start_action(act) if act != nil
  1590.   end
  1591.   #--------------------------------------------------------------------------
  1592.   # ● ミスアクション
  1593.   #--------------------------------------------------------------------------
  1594.   def miss_action(attacker, item)
  1595.     damage_action_base(item)
  1596.     act = miss(attacker)
  1597.     return if @active
  1598.     start_action(act) if act != nil
  1599.   end
  1600.   #--------------------------------------------------------------------------
  1601.   # ● 閃きスクリプト併用処理
  1602.   #--------------------------------------------------------------------------
  1603.   def flash_action
  1604.     return "閃き"
  1605.   end
  1606.  
  1607. end
  1608.  
  1609.  
  1610. #==============================================================================
  1611. # ■ module N03
  1612. #------------------------------------------------------------------------------
  1613. #  サイドビューバトルのモジュールです。
  1614. #==============================================================================
  1615. module N03
  1616.   #--------------------------------------------------------------------------
  1617.   # ● バトラーの敵グループを取得
  1618.   #--------------------------------------------------------------------------
  1619.   def self.get_enemy_unit(battler)
  1620.     return $game_troop if battler.actor?
  1621.     return $game_party
  1622.   end
  1623.   #--------------------------------------------------------------------------
  1624.   # ● バトラーの味方グループを取得
  1625.   #--------------------------------------------------------------------------
  1626.   def self.get_party_unit(battler)
  1627.     return $game_party if battler.actor?
  1628.     return $game_troop
  1629.   end
  1630.   #--------------------------------------------------------------------------
  1631.   # ● 戦闘アニメ時間の取得
  1632.   #--------------------------------------------------------------------------
  1633.   def self.get_anime_time(anime_id)
  1634.     return 0 if anime_id <= 0
  1635.     return $data_animations[anime_id].frame_max * 4
  1636.   end
  1637.   #--------------------------------------------------------------------------
  1638.   # ● 攻撃アニメの取得
  1639.   #--------------------------------------------------------------------------
  1640.   def self.get_attack_anime_id(kind, battler)
  1641.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  1642.     case kind
  1643.     when -1 ; anime_id = battler.atk_animation_id1
  1644.     when -2 ; anime_id = battler.atk_animation_id2
  1645.     when -3
  1646.       if battler.current_action != nil
  1647.         anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  1648.       end
  1649.     else    ; anime_id = kind
  1650.     end
  1651.     case anime_id
  1652.     when -1 ; anime_id = battler.atk_animation_id1
  1653.     when -2 ; anime_id = battler.atk_animation_id2
  1654.     end
  1655.     return anime_id if anime_id
  1656.     return 0
  1657.   end  
  1658.   #--------------------------------------------------------------------------
  1659.   # ● 戦闘アニメデータをセット
  1660.   #--------------------------------------------------------------------------
  1661.   def self.set_damage_anime_data(targets, target, data)
  1662.     return if !first_of_all_screen_anime(data[0], target, targets)
  1663.     target.animation_id         = data[0]
  1664.     target.animation_mirror     = data[1]
  1665.     target.sv.anime_no_mirror   = data[2]
  1666.     target.sv.anime_camera_zoom = data[3]
  1667.     target.sv.anime_plus_z      = data[4]
  1668.   end   
  1669.   #--------------------------------------------------------------------------
  1670.   # ● ターゲットの取得
  1671.   #--------------------------------------------------------------------------
  1672.   def self.get_targets(kind, battler)
  1673.     case kind.abs
  1674.     when 0 ; return [battler].dup
  1675.     when 1 ; return battler.sv.target_battler.dup
  1676.     when 2 ; return get_enemy_unit(battler).members.dup
  1677.     when 3 ; return get_party_unit(battler).members.dup
  1678.     when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  1679.     when 5 ; return battler.sv.second_targets.dup
  1680.     end
  1681.   end  
  1682.   #--------------------------------------------------------------------------
  1683.   # ● ターゲットの座標を取得
  1684.   #--------------------------------------------------------------------------
  1685.   def self.get_targets_position(targets, horming, m_a = nil)
  1686.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  1687.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  1688.     x = y = h = 0
  1689.     for i in 0...targets.size
  1690.       x += targets[i].sv.base_x if !horming
  1691.       y += targets[i].sv.base_y if !horming
  1692.       h += targets[i].sv.base_h if !horming
  1693.       x += targets[i].sv.x if horming
  1694.       y += targets[i].sv.y if horming
  1695.       h += targets[i].sv.h if horming
  1696.       y -= targets[i].sv.ch * 100 if m_a == 0
  1697.       y -= targets[i].sv.ch * 50 if m_a == 1
  1698.     end
  1699.     return [x / targets.size, y / targets.size, h / targets.size]
  1700.   end
  1701.   #--------------------------------------------------------------------------
  1702.   # ● 速度を時間に変換
  1703.   #--------------------------------------------------------------------------
  1704.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  1705.     return time if !distanse_move
  1706.     distanse_x = self_position[0] - target_position[0]
  1707.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  1708.     distanse_y = self_position[1] - target_position[1]
  1709.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  1710.     if self_position[2] != nil && target_position[2] != nil
  1711.       distanse_h = self_position[2] - target_position[2]
  1712.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  1713.     else
  1714.       distanse_h = 0
  1715.     end
  1716.     distanse = [distanse_x, distanse_y, distanse_h].max
  1717.     return distanse / (time * 100) + 1
  1718.   end
  1719.   #--------------------------------------------------------------------------
  1720.   # ● 放物線移動計算
  1721.   #--------------------------------------------------------------------------
  1722.   def self.parabola(data, time, size, type = 1)
  1723.     move_data = data
  1724.     move_data[0] *= size
  1725.     move_data[1] *= size
  1726.     move = []
  1727.     move_d = []
  1728.     for i in 0...time / 2
  1729.       move[i] = move_data[0]
  1730.       move_d[i] = move_data[1]
  1731.       move_data[0] = move_data[0] * type / (1 + type)
  1732.       move_data[1] = move_data[1] * type / (1 + type)
  1733.     end
  1734.     move = move + move_d.reverse!
  1735.     move.reverse!
  1736.     adjust = move.inject(0) {|result, item| result + item }
  1737.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  1738.     move.unshift(0) if time % 2 != 0
  1739.     return move
  1740.   end
  1741.   #--------------------------------------------------------------------------
  1742.   # ● 反転値
  1743.   #--------------------------------------------------------------------------
  1744.   def self.mirror_num(mirror)
  1745.     return 1 if !mirror
  1746.     return -1
  1747.   end  
  1748.   #--------------------------------------------------------------------------
  1749.   # ● カメラワーク
  1750.   #--------------------------------------------------------------------------
  1751.   def self.camera(battler, data)
  1752.     battler = $game_party.battle_members[0] if !battler
  1753.     cx = data[2][0] * 100
  1754.     cy = data[2][1] * 100
  1755.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  1756.     targets = self.get_targets(data[1], battler)
  1757.     return if targets == nil or targets == []
  1758.     position = self.get_targets_position(targets, true)
  1759.     $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  1760.   end
  1761.   #--------------------------------------------------------------------------
  1762.   # ● コラプス禁止
  1763.   #--------------------------------------------------------------------------
  1764.   def self.immortaling
  1765.     # 全員に不死身付与
  1766.     for member in $game_party.battle_members + $game_troop.members
  1767.       # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  1768.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  1769.       member.add_state(N03::IMMORTAL_ID)
  1770.     end
  1771.     return true
  1772.   end  
  1773.   #--------------------------------------------------------------------------
  1774.   # ● コラプス許可
  1775.   #--------------------------------------------------------------------------
  1776.   def self.unimmortaling
  1777.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  1778.     for member in $game_party.battle_members + $game_troop.members
  1779.       next if member.dead?
  1780.       # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  1781.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  1782.       next member.sv.immortal = false if member.sv.immortal
  1783.       member.remove_state(N03::IMMORTAL_ID)
  1784.       next if member.hp != 0
  1785.       member.add_state(1)
  1786.       member.perform_collapse_effect
  1787.       member.sv.action_terminate
  1788.     end
  1789.     return false
  1790.   end  
  1791.   #--------------------------------------------------------------------------
  1792.   # ● スキル派生
  1793.   #--------------------------------------------------------------------------
  1794.   def self.derived_skill(battler)
  1795.     battler.force_action(battler.sv.derivation_skill_id, -2)
  1796.     BattleManager.unshift_action_battlers(battler)
  1797.   end
  1798.   #--------------------------------------------------------------------------
  1799.   # ● ダメージの作成
  1800.   #--------------------------------------------------------------------------
  1801.   def self.set_damage(battler, hp_damage, mp_damage)
  1802.     battler.result.hp_damage = hp_damage
  1803.     battler.result.mp_damage = mp_damage
  1804.   end
  1805.   #--------------------------------------------------------------------------
  1806.   # ● ターゲット生死確認
  1807.   #--------------------------------------------------------------------------
  1808.   def self.targets_alive?(targets)
  1809.     return false if targets == []
  1810.     for target in targets do return true if !target.dead? end
  1811.     return false
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● ターゲットをセカンドターゲットへ
  1815.   #--------------------------------------------------------------------------
  1816.   def self.s_targets(battler)
  1817.     battler.sv.target_battler = battler.sv.second_targets
  1818.     return battler.sv.second_targets
  1819.   end  
  1820.   #--------------------------------------------------------------------------
  1821.   # ● セカンドターゲットをターゲットへ
  1822.   #--------------------------------------------------------------------------
  1823.   def self.targets_set(battler)
  1824.     battler.sv.second_targets = battler.current_action.make_targets.compact
  1825.     battler.sv.target_battler = battler.sv.second_targets
  1826.   end  
  1827.   #--------------------------------------------------------------------------
  1828.   # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
  1829.   #--------------------------------------------------------------------------
  1830.   def self.first_of_all_screen_anime(anime_id, target, targets)
  1831.     anime = $data_animations[anime_id]
  1832.     return false if !anime
  1833.     return true if anime.position != 3
  1834.     return false if anime.position == 3 && target != targets[0]
  1835.     targets.delete(target)
  1836.     target.sv.timing_targets = targets
  1837.     return true
  1838.   end
  1839.   #--------------------------------------------------------------------------
  1840.   # ● 戦闘不能付加攻撃か
  1841.   #--------------------------------------------------------------------------
  1842.   def self.dead_attack?(battler, item)
  1843.     for state in battler.atk_states
  1844.       return true if state == battler.death_state_id
  1845.     end
  1846.     for effect in item.effects
  1847.       return true if effect.code == 21 && effect.data_id == battler.death_state_id
  1848.     end
  1849.     return false
  1850.   end
  1851. end
  1852.  
  1853. #==============================================================================
  1854. # ■ Sprite_Weapon
  1855. #------------------------------------------------------------------------------
  1856. #  ウエポン表示用のスプライトです。
  1857. #==============================================================================
  1858. class Sprite_Weapon < Sprite_Base
  1859.   #--------------------------------------------------------------------------
  1860.   # ● 公開インスタンス変数 
  1861.   #--------------------------------------------------------------------------
  1862.   attr_reader   :index                       # ウエポン画像配列のインデックス
  1863.   attr_reader   :battler                     # 画像が参照しているバトラー
  1864.   attr_reader   :move_time                   # 画像が目標に到達するまでの時間
  1865.   attr_reader   :through                     # 貫通フラグ
  1866.   attr_reader   :action_end                  # 武器アクション終了フラグ
  1867.   attr_reader   :action_end_cancel                  # 武器アクション終了フラグ
  1868.   attr_reader   :hit_position                # 画像が目標に到達した時の座標
  1869.   attr_accessor :hit_anime_id                # 画像が目標に到達した時のアニメID
  1870.   #--------------------------------------------------------------------------
  1871.   # ● オブジェクト初期化
  1872.   #--------------------------------------------------------------------------
  1873.   def initialize(viewport, index, battler)
  1874.     super(viewport)
  1875.     @index = index
  1876.     @battler = battler
  1877.     @position_x = @position_y = 0
  1878.     @o = 0
  1879.     @real_x = @real_y = 0
  1880.     @mirror = @battler.sv.mirror
  1881.     reset
  1882.     set_action
  1883.   end
  1884.   #--------------------------------------------------------------------------
  1885.   # ● 初期化
  1886.   #--------------------------------------------------------------------------
  1887.   def reset
  1888.     @z_plus = 0
  1889.     @weapon_data = []
  1890.     @move_data = []
  1891.     @move_x = 0
  1892.     @move_y = 0
  1893.     @orbit = []
  1894.     @through = false
  1895.     @distanse_move = false
  1896.     @weapon_width = 0
  1897.     @weapon_height = 0
  1898.     @anime_time = 0
  1899.     @anime_position = 1
  1900.     @move_time = 0
  1901.     @hit_anime_id = 0
  1902.     @move_anime = true
  1903.     @action_end = false
  1904.     @action_end_cancel = false
  1905.     reset_position
  1906.   end  
  1907.   #--------------------------------------------------------------------------
  1908.   # ● アクションをセット
  1909.   #--------------------------------------------------------------------------
  1910.   def set_action
  1911.     return if @battler.sv.effect_data == []
  1912.     weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  1913.     move_anime if @battler.sv.effect_data[0][0] == "m_a"
  1914.     @battler.sv.effect_data.shift
  1915.   end
  1916.   #--------------------------------------------------------------------------
  1917.   # ● 武器アニメ実行
  1918.   #--------------------------------------------------------------------------
  1919.   def weapon_anime
  1920.     @weapon_data = @battler.sv.effect_data[0].dup
  1921.     set_graphics
  1922.     set_ox
  1923.     set_weapon_move
  1924.   end
  1925.   #--------------------------------------------------------------------------
  1926.   # ● アニメ移動実行
  1927.   #--------------------------------------------------------------------------
  1928.   def move_anime
  1929.     @move_data = @battler.sv.effect_data[0].dup
  1930.     # ターゲットを取得
  1931.     @target_battler = [@battler.sv.m_a_targets.shift]
  1932.     @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  1933.     set_move
  1934.     return if @move_data[16] == ""
  1935.     weapon_data = N03::ACTION[@move_data[16]]
  1936.     return if weapon_data == nil
  1937.     @weapon_data = weapon_data.dup
  1938.     set_graphics
  1939.     set_ox
  1940.     set_weapon_move
  1941.   end
  1942.   #--------------------------------------------------------------------------
  1943.   # ● 武器画像を取得
  1944.   #--------------------------------------------------------------------------  
  1945.   def set_graphics
  1946.     # 武器に依存しない画像設定がある場合
  1947.     if @weapon_data[13] != ""
  1948.       self.bitmap = Cache.character(@weapon_data[13]).dup
  1949.       @weapon_width = self.bitmap.width
  1950.       @weapon_height = self.bitmap.height
  1951.       return
  1952.     end
  1953.     # 武器を取得
  1954.     weapon = @battler.weapons[0]
  1955.     # 逆手装備を取得
  1956.     if @weapon_data[10]
  1957.       weapon = nil
  1958.       for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  1959.       weapon = @battler.weapons[1] if !weapon
  1960.     end  
  1961.     # 武器がなければ処理をキャンセル
  1962.     return if weapon == nil
  1963.     # インデックスを取得
  1964.     file_index = @weapon_data[12]
  1965.     # アイコンを利用するなら
  1966.     if @weapon_data[1] == 0
  1967.       icon_index = weapon.icon_index
  1968.       self.bitmap = Cache.system("Iconset" + file_index).dup
  1969.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1970.       @weapon_width = @weapon_height = 24
  1971.     # 独自画像指定
  1972.     else
  1973.       file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  1974.       file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  1975.       self.bitmap = Cache.character(file_name + file_index).dup
  1976.       @weapon_width = self.bitmap.width
  1977.       @weapon_height = self.bitmap.height
  1978.       return if @weapon_data[1] == 1
  1979.       # 2003仕様の武器アニメ
  1980.       @weapon_width /= @battler.sv.max_pattern[0]
  1981.     end
  1982.   end
  1983.   #--------------------------------------------------------------------------
  1984.   # ● 画像の原点を取得
  1985.   #--------------------------------------------------------------------------  
  1986.   def set_ox
  1987.     # 反転時は設定を逆に
  1988.     if @mirror
  1989.       case @weapon_data[6]
  1990.       when 1 ; @weapon_data[6] = 2 # 左上→右上に
  1991.       when 2 ; @weapon_data[6] = 1 # 右上→左上に
  1992.       when 3 ; @weapon_data[6] = 4 # 左下→右下に
  1993.       when 4 ; @weapon_data[6] = 3 # 右下→左下に
  1994.       end
  1995.     end
  1996.     # 原点を設定
  1997.     case @weapon_data[6]
  1998.     when 0 # 中心
  1999.       self.ox = @weapon_width / 2
  2000.       self.oy = @weapon_height / 2
  2001.     when 1 # 左上
  2002.       self.ox = 0
  2003.       self.oy = 0
  2004.     when 2 # 右上
  2005.       self.ox = @weapon_width
  2006.       self.oy = 0
  2007.     when 3 # 左下
  2008.       self.ox = 0
  2009.       self.oy = @weapon_height
  2010.     when 4 # 右下
  2011.       self.ox = @weapon_width
  2012.       self.oy = @weapon_height
  2013.     when 5 # バトラーと同じ
  2014.       self.ox = @weapon_width / 2
  2015.       self.oy = @weapon_height
  2016.     end
  2017.   end  
  2018.   #--------------------------------------------------------------------------
  2019.   # ● バトラーの座標を取得
  2020.   #--------------------------------------------------------------------------  
  2021.   def set_battler_position
  2022.     @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  2023.     @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  2024.     reset_position
  2025.   end
  2026.   #--------------------------------------------------------------------------
  2027.   # ● 座標を初期化
  2028.   #--------------------------------------------------------------------------  
  2029.   def reset_position
  2030.     @real_x = @position_x / 100
  2031.     @real_y = @position_y / 100
  2032.     @real_zoom_x = 1
  2033.     @real_zoom_y = 1
  2034.   end
  2035.   #--------------------------------------------------------------------------
  2036.   # ● 戦闘アニメを表示
  2037.   #--------------------------------------------------------------------------  
  2038.   def set_animation(anime_id)
  2039.     return if $data_animations[anime_id] == nil
  2040.     @anime_position = $data_animations[anime_id].position
  2041.     @horming = true
  2042.     @horming = false if @anime_position == 3
  2043.     @anime_camera_zoom = true
  2044.     @anime_no_mirror = false
  2045.     start_animation($data_animations[anime_id], @mirror)
  2046.     timings = $data_animations[anime_id].timings
  2047.   end
  2048.   #--------------------------------------------------------------------------
  2049.   # ● ヒット時の戦闘アニメ実行
  2050.   #--------------------------------------------------------------------------  
  2051.   def set_hit_animation(position_data, hit_anime_id, target)
  2052.     return if $data_animations[hit_anime_id] == nil
  2053.     @real_x = position_data[0]
  2054.     @real_y = position_data[1]
  2055.     @position_x = position_data[0] * 100
  2056.     @position_y = position_data[1] * 100
  2057.     self.z = position_data[2]
  2058.     @z_plus = 1000
  2059.     @action_end = false
  2060.     @horming = true
  2061.     set_animation(hit_anime_id)
  2062.     @anime_time = $data_animations[hit_anime_id].frame_max * 4
  2063.     @timing_targets = [target]
  2064.     @move_time = @hit_anime_id = 0
  2065.     @weapon_data = []
  2066.   end
  2067.   #--------------------------------------------------------------------------
  2068.   # ● タイミングバトラー追加
  2069.   #--------------------------------------------------------------------------  
  2070.   def timing_battler_set(target)
  2071.     @timing_targets.push(target)
  2072.   end
  2073.   #--------------------------------------------------------------------------
  2074.   # ● 武器の動きを取得
  2075.   #--------------------------------------------------------------------------  
  2076.   def set_weapon_move
  2077.     # 開始位置を取得
  2078.     set_battler_position if @move_time == 0
  2079.     @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  2080.     self.z = @battler.sv.z + @z_plus
  2081.     # 反転処理
  2082.     @mirror = !@mirror if @weapon_data[7]
  2083.     self.mirror = @mirror
  2084.     # 更新パターンをセット
  2085.     set_pattern
  2086.     @max_pattern = 2 if @max_pattern == 1
  2087.     # 動きを計算
  2088.     @weapon_move_data = []
  2089.     @weapon_angle_data = []
  2090.     @weapon_zoom_data = []
  2091.     num = N03.mirror_num(@mirror)
  2092.     for i in 0...@max_pattern
  2093.       move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  2094.       move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  2095.       move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  2096.       move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  2097.       move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  2098.       @weapon_move_data.push([move_data_x, move_data_y])
  2099.       @weapon_angle_data.push(move_angle)
  2100.       @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  2101.     end
  2102.   end  
  2103.   #--------------------------------------------------------------------------
  2104.   # ● 更新パターン
  2105.   #--------------------------------------------------------------------------
  2106.   def set_pattern
  2107.     if @weapon_data[11] == -1
  2108.       return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  2109.       @count = @battler.sv.pattern_time
  2110.       @max_count = @battler.sv.pattern_time
  2111.       @max_pattern = @battler.sv.max_pattern[0]
  2112.       @repeat = false
  2113.     else
  2114.       @count = @weapon_data[11][0]
  2115.       @max_count = @weapon_data[11][0]
  2116.       @max_pattern = @weapon_data[11][1]
  2117.       @repeat = @weapon_data[11][2]
  2118.     end
  2119.     @pattern = 0
  2120.   end
  2121.   #--------------------------------------------------------------------------
  2122.   # ● 移動実行
  2123.   #--------------------------------------------------------------------------
  2124.   def set_move
  2125.     # 戦闘アニメを取得
  2126.     set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  2127.     @anime_camera_zoom = @move_data[13]
  2128.     @loop = @move_data[14]
  2129.     @loop = false if @move_data[1][0] == 0
  2130.     @anime_no_mirror = @move_data[15]
  2131.     @se_flag = @move_data[17]
  2132.     # 開始位置を取得
  2133.     start_position
  2134.     @z_plus = 1000 if @move_data[9]
  2135.     # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
  2136.     @timing_targets = @target_battler
  2137.     # 座標計算
  2138.     @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  2139.     @move_y = @move_data[5][1] * 100
  2140.     # 時間計算か速度計算か
  2141.     @distanse_move = true if @move_data[6] > 0
  2142.     @move_time = @move_data[6].abs
  2143.     # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
  2144.     if @move_time == 0
  2145.       @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  2146.       @move_time = 1 if !$data_animations[@move_data[1][0]]
  2147.       @distanse_move = false
  2148.     end
  2149.     # 貫通タイプの場合
  2150.     @through = true if @move_data[7] == 1
  2151.     @auto_through_flag = false
  2152.     @auto_through_flag = true if @move_data[7] == 0
  2153.     # ターゲット座標計算
  2154.     if @target_battler == nil
  2155.       @target_x = @move_x * 100
  2156.       @target_x = (Graphics.width - @move_x) * 100 if @mirror
  2157.       @target_y = @move_y * 100
  2158.     else
  2159.       move_data_set
  2160.     end
  2161.     # ターゲットに到達するまでの時間を計算
  2162.     @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  2163.     # 円軌道計算
  2164.     orbit
  2165.     # バトラーのウエイト設定
  2166.     @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  2167.     @move_horming = @move_data[12]
  2168.   end  
  2169.   #--------------------------------------------------------------------------
  2170.   # ● 速度を時間に変換
  2171.   #--------------------------------------------------------------------------
  2172.   def distanse_calculation(time, target_x, target_y)
  2173.     return time if !@distanse_move
  2174.     distanse_x = @position_x - @target_x
  2175.     distanse_x = @target_x - @position_x if @target_x > @position_x
  2176.     distanse_y = @position_y - @target_y
  2177.     distanse_y = @target_y - @position_y if @target_y > @position_y
  2178.     distanse = [distanse_x, distanse_y].max
  2179.     return distanse / (time * 100) + 1
  2180.   end
  2181.   #--------------------------------------------------------------------------
  2182.   # ● 移動目標の更新
  2183.   #--------------------------------------------------------------------------
  2184.   def move_data_set
  2185.     return if @target_battler == nil
  2186.     position = N03.get_targets_position(@target_battler, true, @anime_position)
  2187.     @target_x = position[0] + @move_x
  2188.     @target_y = position[1] - position[2] + @move_y
  2189.   end
  2190.   #--------------------------------------------------------------------------
  2191.   # ● 開始位置を計算
  2192.   #--------------------------------------------------------------------------
  2193.   def start_position
  2194.     starter = [@battler.sv.m_a_starter.shift]
  2195.     starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  2196.     position = [0, 0]
  2197.     position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  2198.     @position_x = position[0] + @move_data[4][0] * 100
  2199.     @position_y = position[1] + position[2] + @move_data[4][1] * 100
  2200.     @position_z = @position_y
  2201.   end  
  2202.   #--------------------------------------------------------------------------
  2203.   # ● 円軌道計算
  2204.   #--------------------------------------------------------------------------
  2205.   def orbit
  2206.     orbit_data = @move_data[8].dup
  2207.     orbit_data[0] *= 100
  2208.     orbit_data[1] *= 100
  2209.     orbit_d = []
  2210.     for i in 0...@move_time / 2
  2211.       @orbit[i] = orbit_data[0]
  2212.       orbit_data[0] /= 2
  2213.       orbit_d[i] = orbit_data[1]
  2214.       orbit_data[1] /= 2
  2215.     end
  2216.     @orbit = @orbit + orbit_d.reverse!
  2217.     @orbit.reverse!
  2218.   end  
  2219.   #--------------------------------------------------------------------------
  2220.   # ● フレーム更新
  2221.   #--------------------------------------------------------------------------
  2222.   def update
  2223.     update_hit_anime if @anime_time != 0
  2224.     update_move if @move_time != 0
  2225.     update_weapon_move if @weapon_data != []
  2226.     update_position
  2227.     update_color
  2228.     self.visible = @battler.sv.weapon_visible
  2229.     super
  2230.   end
  2231.   #--------------------------------------------------------------------------
  2232.   # ● ヒット時の戦闘アニメ
  2233.   #--------------------------------------------------------------------------
  2234.   def update_hit_anime
  2235.     @anime_time -= 1
  2236.     @action_end = true if @anime_time == 0
  2237.   end
  2238.   #--------------------------------------------------------------------------
  2239.   # ● 移動の更新
  2240.   #--------------------------------------------------------------------------
  2241.   def update_move
  2242.     move_data_set if @move_horming && !@hit_position
  2243.     through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  2244.     @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  2245.     @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  2246.     @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  2247.     reset_position
  2248.     set_animation(@move_data[1][0]) if @loop && !animation?
  2249.     @move_time -= 1
  2250.     return if @move_time != 0
  2251.     @action_end = true if !@action_end_cancel
  2252.   end
  2253.   #--------------------------------------------------------------------------
  2254.   # ● 武器の動きを更新
  2255.   #--------------------------------------------------------------------------
  2256.   def update_weapon_move
  2257.     pattern = update_pattern
  2258.     set_battler_position if @move_time == 0 && !@action_end_cancel
  2259.     @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  2260.     @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  2261.     @real_zoom_x = @weapon_zoom_data[pattern][0]
  2262.     @real_zoom_y = @weapon_zoom_data[pattern][1]
  2263.     self.angle = @weapon_angle_data[pattern]
  2264.     self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  2265.   end
  2266.   #--------------------------------------------------------------------------
  2267.   # ● パターンを更新
  2268.   #--------------------------------------------------------------------------
  2269.   def update_pattern
  2270.     return @battler.sv.pattern_w if @count == nil
  2271.     @count -= 1
  2272.     return @pattern if @count != 0
  2273.     @count = @max_count
  2274.     @pattern += 1
  2275.     if !@repeat && @pattern == @max_pattern
  2276.       @pattern = @max_pattern - 1
  2277.     elsif @pattern == @max_pattern
  2278.       @pattern = 0
  2279.     end
  2280.     return @pattern
  2281.   end
  2282.   #--------------------------------------------------------------------------
  2283.   # ● 座標を更新
  2284.   #--------------------------------------------------------------------------
  2285.   def update_position
  2286.     self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  2287.     self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  2288.     self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2289.     self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2290.     self.z = @battler.sv.z + @z_plus - 10
  2291.     self.zoom_x = @real_zoom_x * $sv_camera.zoom
  2292.     self.zoom_y = @real_zoom_y * $sv_camera.zoom
  2293.     self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  2294.   end
  2295.   #--------------------------------------------------------------------------
  2296.   # ● 貫通の処理
  2297.   #--------------------------------------------------------------------------
  2298.   def through_set(time, target_x, target_y)
  2299.     @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  2300.     @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  2301.     moving_x = (target_x / 100 - @position_x / 100) / time
  2302.     moving_y = (target_y / 100 - @position_y / 100) / time
  2303.     goal_x = $sv_camera.max_left - 100 if moving_x < 0
  2304.     goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  2305.     goal_y = $sv_camera.max_top - 100 if moving_y < 0
  2306.     goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  2307.     if goal_x == nil &&  goal_y == nil
  2308.       time = 0
  2309.       reset_position
  2310.     else
  2311.       time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  2312.     end
  2313.     target_x = @position_x + moving_x * time * 100
  2314.     target_y = @position_y + moving_y * time * 100
  2315.     @pre_data = [time, target_x, target_y]
  2316.     @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  2317.     @action_end_cancel = true
  2318.     @hit_position = [@real_x, @real_y, self.z]
  2319.   end  
  2320.   #--------------------------------------------------------------------------
  2321.   # ● 到達時間試算
  2322.   #--------------------------------------------------------------------------
  2323.   def move_calculation(moving_x, moving_y, goal_x, goal_y)
  2324.     move_x = @position_x / 100
  2325.     move_y = @position_y / 100
  2326.     time = 0
  2327.     loop do
  2328.       move_x += moving_x
  2329.       move_y += moving_y
  2330.       time += 1
  2331.       return time if moving_x < 0 && move_x < goal_x
  2332.       return time if moving_x > 0 && move_x > goal_x
  2333.       return time if moving_y < 0 && move_y < goal_y
  2334.       return time if moving_y > 0 && move_y > goal_y
  2335.     end
  2336.   end   
  2337.   #--------------------------------------------------------------------------
  2338.   # ● ミス時に消える処理から貫通処理に変換
  2339.   #--------------------------------------------------------------------------
  2340.   def through_change
  2341.     @action_end_cancel = false
  2342.     @through = true
  2343.     @move_time = @pre_data[0]
  2344.     @target_x = @pre_data[1]
  2345.     @target_y = @pre_data[2]
  2346.     @pre_data = nil
  2347.   end  
  2348.   #--------------------------------------------------------------------------
  2349.   # ● SE とフラッシュのタイミング処理
  2350.   #--------------------------------------------------------------------------
  2351.   def animation_process_timing(timing)
  2352.     return if !@timing_targets
  2353.     se_flag = true
  2354.     se_flag = @se_flag if @se_flag != nil
  2355.     for target in @timing_targets
  2356.       target.sv.timing.push([se_flag, timing.dup])
  2357.       se_flag = false if @animation.position == 3
  2358.     end  
  2359.   end
  2360.   #--------------------------------------------------------------------------
  2361.   # ● 色調の更新
  2362.   #--------------------------------------------------------------------------
  2363.   def update_color
  2364.     return if @battler.sv.color == []
  2365.     self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  2366.   end
  2367.   #--------------------------------------------------------------------------
  2368.   # ● 解放
  2369.   #--------------------------------------------------------------------------
  2370.   def dispose
  2371.     super
  2372.     self.bitmap.dispose if self.bitmap != nil
  2373.   end
  2374. end
  2375.  
  2376. #==============================================================================
  2377. # ■ Sprite_Battle_Picture
  2378. #------------------------------------------------------------------------------
  2379. #  ピクチャ表示用のスプライトです。
  2380. #==============================================================================
  2381. class Sprite_Battle_Picture < Sprite
  2382.   #--------------------------------------------------------------------------
  2383.   # ● 公開インスタンス変数 
  2384.   #--------------------------------------------------------------------------
  2385.   attr_accessor   :action_end           # 終了フラグ
  2386.   #--------------------------------------------------------------------------
  2387.   # ● オブジェクト初期化
  2388.   #--------------------------------------------------------------------------
  2389.   def initialize(viewport = nil)
  2390.     super(viewport)
  2391.     @action_end = false
  2392.     self.ox = 0
  2393.   end
  2394.   #--------------------------------------------------------------------------
  2395.   # ● セット
  2396.   #--------------------------------------------------------------------------
  2397.   def set(battler)
  2398.     @battler = battler
  2399.     @data = @battler.sv.effect_data.shift
  2400.     @time = @data[4]
  2401.     @mirror = $sv_camera.mirror
  2402.     @mirror = false if !@data[8]
  2403.     self.opacity = @data[6][0]
  2404.     @s_x = @data[2][0] if @data[2] != []
  2405.     @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
  2406.     @s_y = @data[2][1] if @data[2] != []
  2407.     @e_x = @data[3][0] if @data[3] != []
  2408.     @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  2409.     @e_y = @data[3][1] if @data[3] != []
  2410.     @s_x = self.x if @data[2] == []
  2411.     @s_y = self.y if @data[2] == []
  2412.     @e_x = self.x if @data[3] == []
  2413.     @e_y = self.y if @data[3] == []
  2414.     self.x = @s_x
  2415.     self.y = @s_y
  2416.     return @action_end = true if @time == 0
  2417.     @move_x = (@e_x * 1.0 - @s_x) / @time
  2418.     @move_y = (@e_y * 1.0 - @s_y) / @time
  2419.     self.z = @data[5]
  2420.     return set_plane(battler) if @data[7] != []
  2421.     self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  2422.     return @action_end = true if !bitmap
  2423.     self.mirror = @mirror
  2424.     self.ox = self.bitmap.width if @mirror
  2425.   end
  2426.   #--------------------------------------------------------------------------
  2427.   # ● プレーン移行
  2428.   #--------------------------------------------------------------------------
  2429.   def set_plane(battler)
  2430.     @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  2431.     viewport = @viewport
  2432.     @plane = Plane.new(viewport) if !@plane
  2433.     @plane.bitmap = Cache.picture(@data[9]) if !@plane.bitmap or @data[9] != ""
  2434.     return @action_end = true if !@plane.bitmap
  2435.     @plane.ox = @data[7][0]
  2436.     @plane.oy = @data[7][1]
  2437.     @plane.opacity = @data[6][0]
  2438.     @move_x = @remain_move[0] if @data[2] == @data[3]
  2439.     @move_y = @remain_move[1] if @data[2] == @data[3]
  2440.     @remain_move = [@move_x, @move_y]
  2441.   end
  2442.   #--------------------------------------------------------------------------
  2443.   # ● フレーム更新
  2444.   #--------------------------------------------------------------------------
  2445.   def update
  2446.     @action_end = true if !@battler.sv.picture
  2447.     return if @time == 0
  2448.     return if @action_end
  2449.     @time -= 1
  2450.     return plane_update if @plane
  2451.     super
  2452.     self.x += @move_x
  2453.     self.y += @move_y
  2454.     self.opacity += @data[6][1]
  2455.     return if @time != 1
  2456.     self.x = @e_x
  2457.     self.y = @e_y
  2458.     @time = 0
  2459.   end
  2460.   #--------------------------------------------------------------------------
  2461.   # ● フレーム更新
  2462.   #--------------------------------------------------------------------------
  2463.   def plane_update
  2464.     @plane.ox += @move_x
  2465.     @plane.oy += @move_y
  2466.     @plane.opacity += @data[6][1]
  2467.     @time = @data[4] if @time == 0
  2468.   end
  2469.   #--------------------------------------------------------------------------
  2470.   # ● 解放
  2471.   #--------------------------------------------------------------------------
  2472.   def dispose
  2473.     bitmap.dispose if bitmap
  2474.     @plane.dispose if @plane
  2475.     @viewport.dispose if @viewport
  2476.     super
  2477.   end
  2478. end
  2479.  
  2480. #==============================================================================
  2481. # ■ Sprite_Back_Picture
  2482. #------------------------------------------------------------------------------
  2483. #  周期ピクチャ用のスプライトです。
  2484. #==============================================================================
  2485. class Sprite_Back_Picture < Plane
  2486.   #--------------------------------------------------------------------------
  2487.   # ● 公開インスタンス変数 
  2488.   #--------------------------------------------------------------------------
  2489.   attr_accessor   :action_end           # 終了フラグ
  2490.   #--------------------------------------------------------------------------
  2491.   # ● オブジェクト初期化
  2492.   #--------------------------------------------------------------------------
  2493.   def initialize(viewport = nil, index)
  2494.     super(viewport)
  2495.     @index = index
  2496.     @real_x = 0
  2497.     @real_y = 0
  2498.     @real_opacity = 0
  2499.     @move_x = 0
  2500.     @move_y = 0
  2501.     @move_opacity = 0
  2502.     @time = 0
  2503.     @switche = 0
  2504.     @action_end = false
  2505.   end
  2506.   #--------------------------------------------------------------------------
  2507.   # ● セットアップ
  2508.   #--------------------------------------------------------------------------
  2509.   def setup(data)
  2510.     self.bitmap = Cache.picture(data[9])
  2511.     self.z = data[6]
  2512.     @switche = data[1]
  2513.     mirror = $sv_camera.mirror
  2514.     mirror = false if !data[8]
  2515.     @move_x = data[3][0]
  2516.     @move_x *= -1 if mirror
  2517.     @move_y = data[3][1]
  2518.     @time = data[4]
  2519.     @time = -1 if @time == 0
  2520.     @real_opacity = (data[5][0] + 1) * 100
  2521.     @move_opacity = data[5][1]
  2522.     @start_opacity = data[5][0]
  2523.     @shake_ok = data[7]
  2524.   end
  2525.   #--------------------------------------------------------------------------
  2526.   # ● フレーム更新
  2527.   #--------------------------------------------------------------------------
  2528.   def update
  2529.     update_picture if @time != 0
  2530.     self.ox = $sv_camera.x - @real_x
  2531.     self.oy = $sv_camera.y - @real_y
  2532.     if @shake_ok
  2533.       self.ox -= $sv_camera.sx / 100
  2534.       self.oy -= $sv_camera.sy / 100
  2535.     end
  2536.     self.ox *= $sv_camera.zoom
  2537.     self.oy *= $sv_camera.zoom
  2538.     self.zoom_x = @zoom_x * $sv_camera.zoom
  2539.     self.zoom_y = @zoom_y * $sv_camera.zoom
  2540.     self.opacity = @real_opacity / 100
  2541.     @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  2542.     @switche
  2543.     @action_end = true if @switche > 0 && !$game_switches[@switche]
  2544.     @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  2545.   end
  2546.   #--------------------------------------------------------------------------
  2547.   # ● ピクチャの更新
  2548.   #--------------------------------------------------------------------------
  2549.   def update_picture
  2550.     @real_x += @move_x / 100
  2551.     @real_y += @move_y / 100
  2552.     @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  2553.     @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  2554.     @zoom_x = 1
  2555.     @zoom_y = 1
  2556.     @real_opacity += @move_opacity
  2557.     @time -= 1
  2558.     @time = -1 if @time < -100
  2559.   end
  2560. end
  2561.  
  2562. #==============================================================================
  2563. # ■ Sprite_Back_Picture
  2564. #------------------------------------------------------------------------------
  2565. #  ダメージ表示のスプライトです。
  2566. #==============================================================================
  2567. class Sprite_Damage < Sprite
  2568.   #--------------------------------------------------------------------------
  2569.   # ● 公開インスタンス変数 
  2570.   #--------------------------------------------------------------------------
  2571.   attr_reader   :action_end                  # POP終了フラグ
  2572.   #--------------------------------------------------------------------------
  2573.   # ● オブジェクト初期化
  2574.   #--------------------------------------------------------------------------
  2575.   def initialize(viewport = nil, battler)
  2576.     super(viewport)
  2577.     @battler = battler
  2578.     @time = 0
  2579.     return @action_end = true if !@battler
  2580.     @direction = -1
  2581.     @direction *= -1 if @battler.actor?
  2582.     @direction *= -1 if $sv_camera.mirror
  2583.     set_state
  2584.     set_damage
  2585.     update
  2586.   end
  2587.   #--------------------------------------------------------------------------
  2588.   # ● ステート表示
  2589.   #--------------------------------------------------------------------------
  2590.   def set_state
  2591.     return if !N03::STATE_POP
  2592.     states = @battler.result.added_state_objects
  2593.     states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  2594.     return if states == []
  2595.     return if @battler.sv.add_state == @battler.result.added_state_objects
  2596.     @battler.sv.add_state = states.dup
  2597.     @st = []
  2598.     @st_base = []
  2599.     for i in 0...states.size
  2600.       @st[i] = Sprite.new
  2601.       bitmap_state(@st[i], states[i])
  2602.       @st_base[i] = []
  2603.       @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  2604.       @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  2605.       @st[i].z = 1000 + i
  2606.       @st[i].opacity = 0
  2607.     end
  2608.     @time = @pop_time = 80
  2609.   end   
  2610.   #--------------------------------------------------------------------------
  2611.   # ● ステート画像
  2612.   #--------------------------------------------------------------------------
  2613.   def bitmap_state(state, state_object)
  2614.     name = state_object.name
  2615.     state.bitmap = Cache.system("Iconset").dup
  2616.     state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  2617.     @state_height = 24
  2618.   end
  2619.   #--------------------------------------------------------------------------
  2620.   # ● ダメージ表示
  2621.   #--------------------------------------------------------------------------
  2622.   def hit_count
  2623.     for i in 0...@battler.sv.hit.size
  2624.       if @battler.sv.hit[i] == nil
  2625.         @hit = i
  2626.         return @battler.sv.hit[i] = @hit
  2627.       end
  2628.     end
  2629.     @hit = @battler.sv.hit.size
  2630.     @battler.sv.hit.push(@hit)
  2631.   end  
  2632.   #--------------------------------------------------------------------------
  2633.   # ● ダメージ表示
  2634.   #--------------------------------------------------------------------------
  2635.   def set_damage
  2636.     return @action_end = true if !N03::DAMAGE_POP
  2637.     damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  2638.     damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
  2639.     damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  2640.     damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
  2641.     damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  2642.     if !damage or damage == 0
  2643.       @action_end = true if @st == nil
  2644.       return # ステートだけPOPする設定を考慮して@action_endは返さない
  2645.     end
  2646.     hit_count
  2647.     #@hit = @battler.sv.hit
  2648.     #@battler.sv.hit += 1 if damage != 0
  2649.     file = N03::DAMAGE_PLUS if damage > 0
  2650.     file = N03::DAMAGE_MINUS if damage < 0
  2651.     add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  2652.     add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  2653.     adjust_x = N03::DAMAGE_ADJUST
  2654.     @num = []
  2655.     @num_base = []
  2656.     damage = damage.abs
  2657.     max_num = damage.to_s.size
  2658.     max_num += 1 if add_file != nil
  2659.     for i in 0...max_num
  2660.       @num[i] = Sprite.new
  2661.       if add_file != nil && i == max_num - 1
  2662.         @num[i].bitmap = Cache.system(add_file)
  2663.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2664.         sw = 0 if sw == nil
  2665.       else
  2666.         @num[i].bitmap = Cache.system(file)
  2667.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2668.         sw = @num[i].bitmap.width / 10
  2669.         @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  2670.       end
  2671.       @num_base[i] = []
  2672.       @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  2673.       @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
  2674.       @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  2675.       @num[i].z = 1000 + i + @hit * 10
  2676.     end
  2677.     @time = @pop_time = 80
  2678.   end
  2679.   #--------------------------------------------------------------------------
  2680.   # ● フレーム更新
  2681.   #--------------------------------------------------------------------------
  2682.   def update
  2683.     return if @time == 0
  2684.     for i in 0...@st.size do update_state_move(@st[i], i) end if @st != nil
  2685.     for i in 0...@num.size do update_num_move(@num[i], i) end if @num != nil
  2686.     @time -= 1
  2687.     @action_end = true if @time == 0
  2688.   end
  2689.   #--------------------------------------------------------------------------
  2690.   # ● ステート画像の更新
  2691.   #--------------------------------------------------------------------------
  2692.   def update_state_move(state, index)
  2693.     min = @pop_time - index * 2
  2694.     case @time
  2695.     when min-15..min
  2696.       @st_base[index][0] += @direction
  2697.       state.opacity += 25
  2698.     when min-80..min-50
  2699.       @st_base[index][0] += @direction
  2700.       state.opacity -= 25
  2701.     end
  2702.     state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2703.     state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2704.   end
  2705.   #--------------------------------------------------------------------------
  2706.   # ● 数値の更新
  2707.   #--------------------------------------------------------------------------
  2708.   def update_num_move(num, index)
  2709.     min = @pop_time - index * 2
  2710.     case @time
  2711.     when min-1..min
  2712.       @num_base[index][0] += @direction * @hit
  2713.       @num_base[index][1] -= 5 + @hit * 2
  2714.     when min-3..min-2
  2715.       @num_base[index][0] += @direction * @hit
  2716.       @num_base[index][1] -= 4 + @hit * 2
  2717.     when min-6..min-4
  2718.       @num_base[index][0] += @direction
  2719.       @num_base[index][1] -= 3 + @hit * 2
  2720.     when min-14..min-7
  2721.       @num_base[index][0] += @direction
  2722.       @num_base[index][1] += 2
  2723.     when min-17..min-15
  2724.       @num_base[index][1] -= 2 + @hit * 2
  2725.     when min-23..min-18
  2726.       @num_base[index][1] += 1
  2727.     when min-27..min-24
  2728.       @num_base[index][1] -= 1
  2729.     when min-30..min-28
  2730.       @num_base[index][1] += 1
  2731.     when min-33..min-31
  2732.       @num_base[index][1] -= 1
  2733.     when min-36..min-34
  2734.       @num_base[index][1] += 1
  2735.     end
  2736.     num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2737.     num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2738.     num.opacity = 256 - (12 - @time) * 32
  2739.     num.visible = false if @time == 0
  2740.   end
  2741.   #--------------------------------------------------------------------------
  2742.   # ● 解放
  2743.   #--------------------------------------------------------------------------
  2744.   def dispose
  2745.     @battler.sv.hit[@hit] = nil if @hit
  2746.     bitmap.dispose if bitmap
  2747.     for i in 0...@num.size do @num[i].dispose end if @num != nil
  2748.     for i in 0...@st.size do @st[i].dispose end if @st != nil
  2749.     super
  2750.   end
  2751. end
  2752.  
  2753. #==============================================================================
  2754. # ■ Window_Skill_name
  2755. #------------------------------------------------------------------------------
  2756. #  スキル名を表示するウィンドウです。
  2757. #==============================================================================
  2758. class Window_Skill_name < Window_Base
  2759.   #--------------------------------------------------------------------------
  2760.   # ● オブジェクト初期化
  2761.   #--------------------------------------------------------------------------
  2762.   def initialize(text)
  2763.     super(0, 0, Graphics.width, line_height + standard_padding * 2)
  2764.     draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  2765.   end
  2766. end
  2767.  
  2768. #==============================================================================
  2769. # ■ Spriteset_Sideview
  2770. #------------------------------------------------------------------------------
  2771. #  サイドビュー独自のスプライトをまとめたクラスです。
  2772. #==============================================================================
  2773. class Spriteset_Sideview
  2774.   #--------------------------------------------------------------------------
  2775.   # ● オブジェクト初期化
  2776.   #--------------------------------------------------------------------------
  2777.   def initialize(viewport)
  2778.     @viewport = viewport
  2779.     @weapons = []
  2780.     @pictures = []
  2781.     @back_pic = []
  2782.     @damage = []
  2783.     $sv_camera.setup
  2784.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  2785.   end
  2786.   #--------------------------------------------------------------------------
  2787.   # ● フレーム更新
  2788.   #--------------------------------------------------------------------------
  2789.   def update
  2790.     update_battler_data
  2791.     update_damage
  2792.     update_pictures
  2793.     update_back_pic
  2794.     update_weapons
  2795.   end  
  2796.   #--------------------------------------------------------------------------
  2797.   # ● バトラーデータの更新
  2798.   #--------------------------------------------------------------------------
  2799.   def update_battler_data
  2800.     for battler in $game_party.battle_members + $game_troop.members
  2801.       weapon_end(battler) if battler.sv.weapon_end
  2802.       next if battler.sv.effect_data == []
  2803.       for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  2804.     end
  2805.   end
  2806.   #--------------------------------------------------------------------------
  2807.   # ● ダメージ画像の更新
  2808.   #--------------------------------------------------------------------------
  2809.   def update_damage
  2810.     for i in 0...@damage.size
  2811.       next if @damage[i] == nil
  2812.       @damage[i].update if @damage[i] != nil
  2813.       next if !@damage[i].action_end
  2814.       @damage[i].dispose
  2815.       @damage[i] = nil
  2816.     end
  2817.   end
  2818.   #--------------------------------------------------------------------------
  2819.   # ● ピクチャアクションの更新
  2820.   #--------------------------------------------------------------------------
  2821.   def update_pictures
  2822.     for i in 0...@pictures.size
  2823.       next if @pictures[i] == nil
  2824.       @pictures[i].update if @pictures[i] != nil
  2825.       next if !@pictures[i].action_end
  2826.       @pictures[i].dispose
  2827.       @pictures[i] = nil
  2828.     end
  2829.   end
  2830.   #--------------------------------------------------------------------------
  2831.   # ● 周期ピクチャの更新
  2832.   #--------------------------------------------------------------------------
  2833.   def update_back_pic
  2834.     set_back_pic if $sv_camera.program_picture != []
  2835.     for i in 0...@back_pic.size
  2836.       next if @back_pic[i] == nil
  2837.       @back_pic[i].update if @back_pic[i] != nil
  2838.       next if !@back_pic[i].action_end
  2839.       @back_pic[i].dispose
  2840.       @back_pic[i] = nil
  2841.     end
  2842.   end
  2843.   #--------------------------------------------------------------------------
  2844.   # ● 武器アクションの更新
  2845.   #--------------------------------------------------------------------------
  2846.   def update_weapons
  2847.     for i in 0...@weapons.size
  2848.       next if @weapons[i] == nil
  2849.       @weapons[i].update if @weapons[i] != nil
  2850.       next if !@weapons[i].action_end
  2851.       @weapons[i].dispose
  2852.       @weapons[i] = nil
  2853.     end
  2854.   end
  2855.   #--------------------------------------------------------------------------
  2856.   # ● ダメージ実行
  2857.   #--------------------------------------------------------------------------
  2858.   def set_damage_pop(target)
  2859.     for i in 0...@damage.size
  2860.       next if @damage[i] != nil
  2861.       return @damage[i] = Sprite_Damage.new(@viewport, target)
  2862.     end
  2863.     @damage.push(Sprite_Damage.new(@viewport, target))
  2864.   end
  2865.   #--------------------------------------------------------------------------
  2866.   # ● 周期ピクチャ実行
  2867.   #--------------------------------------------------------------------------
  2868.   def set_back_pic
  2869.     for data in $sv_camera.program_picture
  2870.       if @back_pic[data[2]] != nil
  2871.         @back_pic[data[2]].dispose
  2872.         @back_pic[data[2]] = nil
  2873.       end
  2874.       @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  2875.       @back_pic[data[2]].setup(data)
  2876.     end
  2877.     $sv_camera.program_picture = []
  2878.   end
  2879.   #--------------------------------------------------------------------------
  2880.   # ● エフェクト開始
  2881.   #--------------------------------------------------------------------------
  2882.   def set_effects(battler, effect_data)
  2883.     case effect_data[0]
  2884.     when "pic" ; set_pictures(battler, effect_data)
  2885.     when  "wp" ; set_weapons(battler,  true)
  2886.     when "m_a" ; set_weapons(battler, false)
  2887.     end
  2888.   end
  2889.   #--------------------------------------------------------------------------
  2890.   # ● ピクチャアクション実行
  2891.   #--------------------------------------------------------------------------
  2892.   def set_pictures(battler, effect_data)
  2893.     @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  2894.     @pictures[effect_data[1]].set(battler)
  2895.   end
  2896.   #--------------------------------------------------------------------------
  2897.   # ● 武器アクション実行
  2898.   #--------------------------------------------------------------------------
  2899.   def set_weapons(battler, weapon_flag, test = true)
  2900.     for i in 0...@weapons.size
  2901.       next if @weapons[i] != nil
  2902.       @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  2903.       battler.sv.weapon_index.push(i) if weapon_flag
  2904.       return i
  2905.     end
  2906.     @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  2907.     battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  2908.     return @weapons.size - 1
  2909.   end
  2910.   #--------------------------------------------------------------------------
  2911.   # ● バトラーの武器アクション終了
  2912.   #--------------------------------------------------------------------------
  2913.   def weapon_end(battler)
  2914.     battler.sv.weapon_end = false
  2915.     for index in battler.sv.weapon_index
  2916.       weapon_index = battler.sv.weapon_index.shift
  2917.       @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  2918.       @weapons[weapon_index] = nil
  2919.     end
  2920.     battler.sv.weapon_index.compact!
  2921.   end  
  2922.   #--------------------------------------------------------------------------
  2923.   # ● ヒット時の戦闘アニメ実行
  2924.   #--------------------------------------------------------------------------
  2925.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  2926.     weapon = @weapons[weapon_index]
  2927.     for target in hit_targets
  2928.       next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  2929.       @hit_index = set_weapons(battler, false, false)
  2930.       @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  2931.     end
  2932.     @hit_index = nil
  2933.     if !weapon.through && !miss
  2934.       @weapons[weapon_index].dispose
  2935.       @weapons[weapon_index] = nil
  2936.     else
  2937.       @weapons[weapon_index].through_change
  2938.     end
  2939.   end
  2940.   #--------------------------------------------------------------------------
  2941.   # ● サイドビューデータの初期化
  2942.   #--------------------------------------------------------------------------
  2943.   def reset_sideview
  2944.     $sv_camera.reset
  2945.     for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  2946.   end  
  2947.   #--------------------------------------------------------------------------
  2948.   # ● 解放
  2949.   #--------------------------------------------------------------------------
  2950.   def dispose
  2951.     dispose_effects(@weapons)
  2952.     dispose_effects(@pictures)
  2953.     dispose_effects(@back_pic)
  2954.     dispose_effects(@damage)
  2955.     reset_sideview
  2956.   end
  2957.   #--------------------------------------------------------------------------
  2958.   # ● エフェクト画像の解放
  2959.   #--------------------------------------------------------------------------
  2960.   def dispose_effects(effects)
  2961.     for i in 0...effects.size
  2962.       effects[i].dispose if effects[i] != nil
  2963.       effects[i] = nil
  2964.     end
  2965.   end
  2966. end
  2967.  
  2968.  
  2969. #==============================================================================
  2970. # ■ Sprite_Battle_Back
  2971. #------------------------------------------------------------------------------
  2972. #  戦闘背景用のスプライトです。
  2973. #==============================================================================
  2974. class Sprite_Battle_Back < Plane
  2975.   #--------------------------------------------------------------------------
  2976.   # ● オブジェクト初期化
  2977.   #--------------------------------------------------------------------------
  2978.   def initialize(viewport = nil, index, battleback_name)
  2979.     super(viewport)
  2980.     @index = index
  2981.     if @index == 1
  2982.       data = N03::FLOOR1_DATA[battleback_name]
  2983.       data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  2984.     elsif @index == 2
  2985.       data = N03::FLOOR2_DATA[battleback_name]
  2986.       data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  2987.     end   
  2988.     data = data.dup
  2989.     @adjust_position = data[0]
  2990.     @zoom_x = data[1][0] / 100.0
  2991.     @zoom_y = data[1][1] / 100.0
  2992.     @shake_on = data[2]
  2993.     $game_switches[data[3]] = true if data[3] > 0
  2994.     $sv_camera.switches[data[3].abs] = true if data[3] < 0
  2995.     reset_scroll
  2996.     reset_back_data(battleback_name)
  2997.   end
  2998.   #--------------------------------------------------------------------------
  2999.   # ● 背景スクロールを初期化
  3000.   #--------------------------------------------------------------------------
  3001.   def reset_scroll
  3002.     @scroll_x = 0
  3003.     @scroll_y = 0
  3004.     @move_x = 0
  3005.     @move_y = 0
  3006.   end
  3007.   #--------------------------------------------------------------------------
  3008.   # ● 背景データを初期化
  3009.   #--------------------------------------------------------------------------
  3010.   def reset_back_data(battleback_name)
  3011.     @back_data = []
  3012.     @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  3013.     start_back_data(@active_data)
  3014.   end  
  3015.   #--------------------------------------------------------------------------
  3016.   # ● 背景画像のセッティング
  3017.   #--------------------------------------------------------------------------
  3018.   def set_graphics(new_bitmap)
  3019.     self.bitmap = new_bitmap
  3020.     @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  3021.     @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  3022.     # 限界座標を取得
  3023.     max_top =  0
  3024.     max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  3025.     max_left = 0
  3026.     max_right = self.bitmap.width * @zoom_x - Graphics.width
  3027.     exist = true
  3028.     exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  3029.     $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  3030.   end
  3031.   #--------------------------------------------------------------------------
  3032.   # ● フレーム更新
  3033.   #--------------------------------------------------------------------------
  3034.   def update
  3035.     return if !bitmap
  3036.     update_back_data
  3037.     update_scroll unless @move_x == 0 && @move_y == 0
  3038.     update_color
  3039.     update_position
  3040.     update_back_adjust if @bt_back != nil
  3041.     create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  3042.   end
  3043.   #--------------------------------------------------------------------------
  3044.   # ● 背景データを更新
  3045.   #--------------------------------------------------------------------------
  3046.   def update_back_data
  3047.     delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  3048.     delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  3049.     return if !delete
  3050.     for i in 0...@back_data.size
  3051.       @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  3052.       @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  3053.     end
  3054.     @back_data.compact!
  3055.     next_back_data
  3056.   end
  3057.   #--------------------------------------------------------------------------
  3058.   # ● 次の背景データをセット
  3059.   #--------------------------------------------------------------------------
  3060.   def next_back_data
  3061.     @back_data.delete(@active_data[11]) if @active_data[11] != nil
  3062.     @back_data.push(@active_data[11]) if @active_data[11] != nil
  3063.     @active_data = nil
  3064.     data = @back_data.pop
  3065.     @back_data = [@active_data] if @back_data.size == 0
  3066.     start_back_data(data)
  3067.   end  
  3068.   #--------------------------------------------------------------------------
  3069.   # ● 背景データを実行
  3070.   #--------------------------------------------------------------------------
  3071.   def start_back_data(data)
  3072.     return if back_data_remain(data)
  3073.     bt_back_dispose
  3074.     pre_active_data = @active_data
  3075.     @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  3076.     @back_data.push(@active_data)     if @active_data != nil
  3077.     @active_data = data.dup
  3078.     @active_data[5] = @back_name      if @active_data[5] == ""
  3079.     @active_data[9] = set_back_adjust if @active_data[9] == nil
  3080.     back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
  3081.     set_remain_back_data              if @active_data[8] != nil
  3082.     create_back(@active_data[5])      if @active_data[9][0] == false
  3083.     create_back_adjust                if @active_data[10]
  3084.     @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  3085.   end  
  3086.   #--------------------------------------------------------------------------
  3087.   # ● 背景データの保留
  3088.   #--------------------------------------------------------------------------
  3089.   def back_data_remain(data)
  3090.     remain = false
  3091.     remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  3092.     remain = true if @active_data != nil && @active_data[7] == false
  3093.     return remain if !remain
  3094.     @remain = true
  3095.     @back_data.push(data)
  3096.     return remain
  3097.   end  
  3098.   #--------------------------------------------------------------------------
  3099.   # ● 背景変更補正データをセット
  3100.   #--------------------------------------------------------------------------
  3101.   def set_back_adjust
  3102.     bt_adjust = []
  3103.     sign = -1
  3104.     if @active_data[6] == ""
  3105.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  3106.       bt_adjust = [false,false,0,0]
  3107.       return bt_adjust
  3108.     elsif @move_x != 0 or @active_data[3][0] != 0
  3109.       sign = 1 if @move_x < 0
  3110.       bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  3111.       bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  3112.     elsif @move_y != 0 or @active_data[3][1] != 0
  3113.       sign = 1 if @move_y < 0
  3114.       bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  3115.       bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  3116.     else
  3117.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  3118.       bt_adjust = [false,false,0,0]
  3119.       return bt_adjust
  3120.     end
  3121.     bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  3122.     return bt_adjust
  3123.   end
  3124.   #--------------------------------------------------------------------------
  3125.   # ● 背景スクロールデータを実行
  3126.   #--------------------------------------------------------------------------
  3127.   def back_data_scroll_on
  3128.     mirror = $sv_camera.mirror
  3129.     mirror = false if !@active_data[4]
  3130.     @move_x = @active_data[3][0]
  3131.     @move_x *= -1 if mirror
  3132.     @move_y = @active_data[3][1]
  3133.   end
  3134.   #--------------------------------------------------------------------------
  3135.   # ● 保持している背景データを実行
  3136.   #--------------------------------------------------------------------------
  3137.   def set_remain_back_data
  3138.     return back_data_scroll_on if @move_x != 0 or @move_y != 0
  3139.     create_back(@active_data[8][0])
  3140.     @move_x    = @active_data[8][1]
  3141.     @move_y    = @active_data[8][2]
  3142.     @scroll_x  = @active_data[8][3]
  3143.     @scroll_y  = @active_data[8][4]
  3144.   end  
  3145.   #--------------------------------------------------------------------------
  3146.   # ● 背景画像の作成
  3147.   #--------------------------------------------------------------------------
  3148.   def create_back(back_name)
  3149.     return if back_name == @back_name or back_name == ""
  3150.     self.bitmap = Cache.battleback1(back_name) if @index == 1
  3151.     self.bitmap = Cache.battleback2(back_name) if @index == 2
  3152.     @back_name = back_name
  3153.   end  
  3154.   #--------------------------------------------------------------------------
  3155.   # ● 背景変更補正画像の作成
  3156.   #--------------------------------------------------------------------------
  3157.   def create_back_adjust
  3158.     return if @active_data[9][0] == false
  3159.     @active_data[10] = true
  3160.     mirror = $sv_camera.mirror
  3161.     mirror = false if !@active_data[4]
  3162.     @bt_back = []
  3163.     @bt_back[0] = Sprite.new(viewport)
  3164.     @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  3165.     @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  3166.     @bt_back[0].mirror = mirror
  3167.     @bt_back[1] = Sprite.new(viewport)
  3168.     @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  3169.     @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  3170.     @bt_back[1].mirror = mirror
  3171.   end
  3172.   #--------------------------------------------------------------------------
  3173.   # ● 背景スクロールの更新
  3174.   #--------------------------------------------------------------------------
  3175.   def update_scroll
  3176.     @scroll_x += @move_x
  3177.     @scroll_y += @move_y
  3178.     @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  3179.     @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  3180.   end
  3181.   #--------------------------------------------------------------------------
  3182.   # ● 色調変更の更新
  3183.   #--------------------------------------------------------------------------
  3184.   def update_color
  3185.     color_set if $sv_camera.color_set[@index] != nil
  3186.     return if @color_data == nil
  3187.     @color_data[4] -= 1
  3188.     if @color_data[4] == 0 && @color_data[5] != 0
  3189.       @color_data[4] = @color_data[5]
  3190.       @color_data[5] = 0
  3191.       @color_data[6] = [0,0,0,0]
  3192.     elsif @color_data[4] == 0
  3193.       @remain_color_data = @color_data
  3194.       return @color_data = nil
  3195.     end  
  3196.     for i in 0..3
  3197.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  3198.     end  
  3199.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  3200.   end
  3201.   #--------------------------------------------------------------------------
  3202.   # ● 座標の更新
  3203.   #--------------------------------------------------------------------------
  3204.   def update_position
  3205.     self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  3206.     self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  3207.     self.ox -= $sv_camera.sx / 100 if @shake_on
  3208.     self.oy -= $sv_camera.sy / 100 if @shake_on
  3209.     self.zoom_x = @zoom_x * $sv_camera.zoom
  3210.     self.zoom_y = @zoom_y * $sv_camera.zoom
  3211.     self.ox *= $sv_camera.zoom
  3212.     self.oy *= $sv_camera.zoom
  3213.     self.z = @index * 10
  3214.   end
  3215.   #--------------------------------------------------------------------------
  3216.   # ● 背景変更補正画像を更新
  3217.   #--------------------------------------------------------------------------
  3218.   def update_back_adjust
  3219.     @active_data[9][0][0] = 0 if @scroll_x == 0
  3220.     @active_data[9][0][1] = 0 if @scroll_y == 0
  3221.     @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  3222.     @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  3223.     for i in 0...@bt_back.size
  3224.       @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  3225.       @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  3226.       @bt_back[i].zoom_x = self.zoom_x
  3227.       @bt_back[i].zoom_y = self.zoom_y
  3228.       @bt_back[i].z = self.z + 1
  3229.       @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  3230.     end
  3231.     back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  3232.     return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  3233.     bt_back_dispose
  3234.     create_back(@active_data[5])
  3235.     @active_data[9][0] = false
  3236.     next_back_data if @remain && @back_data.size != 1
  3237.     @remain = false
  3238.   end
  3239.   #--------------------------------------------------------------------------
  3240.   # ● 色調変更
  3241.   #--------------------------------------------------------------------------
  3242.   def color_set
  3243.     set = $sv_camera.color_set[@index]
  3244.     $sv_camera.color_set[@index] = nil
  3245.     set[4] = 1 if set[4] == 0
  3246.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  3247.     @color_data = @remain_color_data
  3248.     @color_data[4] = set[4]
  3249.     @color_data[5] = set[5]
  3250.     @color_data[6] = set
  3251.   end
  3252.   #--------------------------------------------------------------------------
  3253.   # ● 背景変更補正画像の解放
  3254.   #--------------------------------------------------------------------------
  3255.   def bt_back_dispose
  3256.     for i in 0...@bt_back.size do @bt_back[i].dispose end if @bt_back != nil
  3257.     @bt_back = nil
  3258.   end  
  3259.   #--------------------------------------------------------------------------
  3260.   # ● 解放
  3261.   #--------------------------------------------------------------------------
  3262.   def dispose
  3263.     bitmap.dispose if bitmap
  3264.     bt_back_dispose
  3265.     super
  3266.   end
  3267. end  
  3268.  
  3269. #==============================================================================
  3270. # ■ Battle_Camera
  3271. #------------------------------------------------------------------------------
  3272. #  戦闘カメラやバトルプログラムを扱うクラスです。
  3273. #==============================================================================
  3274. class Battle_Camera
  3275.   #--------------------------------------------------------------------------
  3276.   # ● 公開インスタンス変数 
  3277.   #--------------------------------------------------------------------------
  3278.   attr_reader   :sx                 # シェイクX座標
  3279.   attr_reader   :sy                 # シェイクY座標
  3280.   attr_reader   :max_top            # 上限界座標
  3281.   attr_reader   :max_bottom         # 下限界座標
  3282.   attr_reader   :max_left           # 左限界座標
  3283.   attr_reader   :max_right          # 右限界座標
  3284.   attr_accessor :switches           # サイドビュー専用スイッチ
  3285.   attr_accessor :color_set          # 色調変更データ
  3286.   attr_accessor :wait               # 戦闘シーンの強制ウエイト
  3287.   attr_accessor :win_wait           # 戦闘勝利前のウエイト
  3288.   attr_accessor :mirror             # 画面反転フラグ
  3289.   attr_accessor :program_scroll     # バトルプログラム 背景の自動スクロール
  3290.   attr_accessor :program_picture    # バトルプログラム 周期ピクチャ
  3291.   attr_accessor :event              # コモンイベント呼び出し
  3292.   #--------------------------------------------------------------------------
  3293.   # ● オブジェクト初期化
  3294.   #--------------------------------------------------------------------------
  3295.   def initialize
  3296.     @switches = []
  3297.     @max_data = []
  3298.     @color_set = []
  3299.     @wait = 0
  3300.     @win_wait = false
  3301.     @mirror = false
  3302.     @event = false
  3303.     setup
  3304.   end
  3305.   #--------------------------------------------------------------------------
  3306.   # ● カメラX座標
  3307.   #--------------------------------------------------------------------------
  3308.   def x
  3309.     return @x / 100
  3310.   end
  3311.   #--------------------------------------------------------------------------
  3312.   # ● カメラY座標
  3313.   #--------------------------------------------------------------------------
  3314.   def y
  3315.     return @y / 100
  3316.   end
  3317.   #--------------------------------------------------------------------------
  3318.   # ● ズーム率
  3319.   #--------------------------------------------------------------------------
  3320.   def zoom
  3321.     return @zoom * 0.001
  3322.   end
  3323.   #--------------------------------------------------------------------------
  3324.   # ● ズーム率による座標変換
  3325.   #--------------------------------------------------------------------------
  3326.   def convert
  3327.     return @zoom
  3328.   end
  3329.   #--------------------------------------------------------------------------
  3330.   # ● カメラセットアップ
  3331.   #--------------------------------------------------------------------------
  3332.   def setup
  3333.     @x = 0
  3334.     @y = 0
  3335.     @sx = 0
  3336.     @sy = 0
  3337.     @zoom = 1000
  3338.     @time = 0
  3339.     @shake_time = 0
  3340.     program_setup
  3341.   end
  3342.   #--------------------------------------------------------------------------
  3343.   # ● カメラ初期化
  3344.   #--------------------------------------------------------------------------
  3345.   def reset
  3346.     @switches = []
  3347.     @max_data = []
  3348.     @color_set = []
  3349.     @wait = 0
  3350.     @win_wait = false
  3351.     @mirror = false
  3352.     program_setup(false)
  3353.   end  
  3354.   #--------------------------------------------------------------------------
  3355.   # ● バトルプログラムのセットアップ
  3356.   #--------------------------------------------------------------------------
  3357.   def program_setup(check = true)
  3358.     @played_program  = []
  3359.     @program_switch  = []
  3360.     @program_sound   = []
  3361.     @program_scroll  = []
  3362.     @program_se      = []
  3363.     @program_shake   = []
  3364.     @program_color   = []
  3365.     @program_picture = []
  3366.     @program_base = N03::BATTLE_PROGRAM.values.dup
  3367.     program_check if check
  3368.   end  
  3369.   #--------------------------------------------------------------------------
  3370.   # ● バトルプログラムのチェック
  3371.   #--------------------------------------------------------------------------
  3372.   def program_check
  3373.     for data in @program_base
  3374.       if program_start?(data) && !@played_program.include?(data)
  3375.         @played_program.push(data.dup)
  3376.         @program_scroll.push(data.dup)  if data[0] == "scroll"
  3377.         @program_picture.push(data.dup) if data[0] == "kpic"
  3378.         start_sound(data.dup)           if data[0] == "sound"
  3379.         start_program_switch(data.dup)  if data[0] == "switch"
  3380.         start_program_se(data.dup)      if data[0] == "keep_se"
  3381.         start_program_shake(data.dup)   if data[0] == "keep_sk"
  3382.         start_program_color(data.dup)   if data[0] == "keep_c"
  3383.       else
  3384.         @played_program.delete(data)  if !program_start?(data)
  3385.         @program_scroll.delete(data)  if data[0] == "scroll"
  3386.         @program_picture.delete(data) if data[0] == "kpic"
  3387.         @program_switch.delete(data)  if data[0] == "switch"
  3388.         @program_sound.delete(data)   if data[0] == "sound"
  3389.         @program_se.delete(data)      if data[0] == "keep_se"
  3390.         @program_shake.delete(data)   if data[0] == "keep_sk"
  3391.         @program_color.delete(data)   if data[0] == "keep_c"
  3392.       end
  3393.     end
  3394.   end
  3395.   #--------------------------------------------------------------------------
  3396.   # ● バトルプログラムの開始
  3397.   #--------------------------------------------------------------------------
  3398.   def program_start?(data)
  3399.     start = false
  3400.     start = true if $game_switches[data[1].abs] && data[1] > 0
  3401.     start = true if @switches[data[1].abs] && data[1] < 0
  3402.     return start
  3403.   end  
  3404.   #--------------------------------------------------------------------------
  3405.   # ● バトルプログラム スイッチ操作の開始
  3406.   #--------------------------------------------------------------------------
  3407.   def start_program_switch(data)
  3408.     data[4] = data[4] + rand(data[5] + 1)
  3409.     data[4] = 1 if data[4] <= 0
  3410.     @program_switch.push(data)
  3411.   end
  3412.   #--------------------------------------------------------------------------
  3413.   # ● スイッチ操作の更新
  3414.   #--------------------------------------------------------------------------
  3415.   def update_program_switch
  3416.     for data in @program_switch
  3417.       data[4] -= 1
  3418.       next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3419.       next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3420.       next if data[4] != 0
  3421.       for id in data[2]
  3422.         $game_switches[id] = true if id > 0
  3423.         @switches[id.abs] = true  if id < 0
  3424.       end
  3425.       for id in data[3]
  3426.         $game_switches[id] = false if id > 0
  3427.         @switches[id.abs] = false  if id < 0
  3428.       end
  3429.       @program_switch.delete(data)
  3430.       program_check
  3431.     end  
  3432.   end
  3433.   #--------------------------------------------------------------------------
  3434.   # ● バトルプログラム BGM/BGSの開始
  3435.   #--------------------------------------------------------------------------
  3436.   def start_sound(data)
  3437.     @program_sound.push(data)
  3438.     name = data[5]
  3439.     case data[2]
  3440.     when "se"
  3441.       Audio.se_play("Audio/SE/" + name, data[4], data[3])
  3442.     when "bgm"
  3443.       name = RPG::BGM.last.name if data[5] == ""
  3444.       Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  3445.     when "bgs"
  3446.       name = RPG::BGS.last.name if data[5] == ""
  3447.       Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  3448.     end
  3449.   end
  3450.   #--------------------------------------------------------------------------
  3451.   # ● バトルプログラム 周期SEの開始
  3452.   #--------------------------------------------------------------------------
  3453.   def start_program_se(data)
  3454.     data[3] = [data[2], data[3]]
  3455.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3456.     @program_se.push(data)
  3457.     Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  3458.   end
  3459.   #--------------------------------------------------------------------------
  3460.   # ● 周期SEの更新
  3461.   #--------------------------------------------------------------------------
  3462.   def update_program_se
  3463.     for data in @program_se
  3464.       data[2] -= 1
  3465.       next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3466.       next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3467.       next if data[2] != 0
  3468.       Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  3469.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3470.     end  
  3471.   end
  3472.   #--------------------------------------------------------------------------
  3473.   # ● バトルプログラム 周期シェイクの開始
  3474.   #--------------------------------------------------------------------------
  3475.   def start_program_shake(data)
  3476.     data[3] = [data[2], data[3]]
  3477.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3478.     @program_shake.push(data)
  3479.     shake(data[4], data[5], data[6]) if data[7]
  3480.   end
  3481.   #--------------------------------------------------------------------------
  3482.   # ● 周期シェイクの更新
  3483.   #--------------------------------------------------------------------------
  3484.   def update_program_shake
  3485.     for data in @program_shake
  3486.       data[2] -= 1
  3487.       next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3488.       next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3489.       next if data[2] != 0
  3490.       shake(data[4], data[5], data[6])
  3491.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3492.     end  
  3493.   end
  3494.   #--------------------------------------------------------------------------
  3495.   # ● バトルプログラム 周期色調変更の開始
  3496.   #--------------------------------------------------------------------------
  3497.   def start_program_color(data)
  3498.     data[3] = [data[2], data[3]]
  3499.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3500.     data[7] = true if data[4] == 0 or data[4] == 4
  3501.     case data[4]
  3502.     when 1   ;data[4] = $game_troop.members
  3503.     when 2   ;data[4] = $game_party.battle_members
  3504.     when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  3505.     else ;data[4] = []
  3506.     end
  3507.     @program_color.push(data)
  3508.     return if !data[6]
  3509.     for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3510.     @color_set[1] = data[5] if data[7]
  3511.     @color_set[2] = data[5] if data[7]
  3512.   end
  3513.   #--------------------------------------------------------------------------
  3514.   # ● 周期色調変更の更新
  3515.   #--------------------------------------------------------------------------
  3516.   def update_program_color
  3517.     for data in @program_color
  3518.       data[2] -= 1
  3519.       next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3520.       next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3521.       next if data[2] != 0
  3522.       for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3523.       @color_set[1] = data[5] if data[7]
  3524.       @color_set[2] = data[5] if data[7]
  3525.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3526.     end
  3527.   end
  3528.   #--------------------------------------------------------------------------
  3529.   # ● トランジション実行
  3530.   #--------------------------------------------------------------------------
  3531.   def perform_transition(data)
  3532.     Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  3533.   end  
  3534.   #--------------------------------------------------------------------------
  3535.   # ● 背景からカメラの限界値を取得  data = [max_top, max_bottom, max_left, max_right]
  3536.   #--------------------------------------------------------------------------
  3537.   def setting(index, data)
  3538.     @max_data[index - 1] = data
  3539.     return if index != 2
  3540.     setup
  3541.     # カメラの中心座標
  3542.     @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  3543.     @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  3544.     # 上下左右の移動限界距離
  3545.     @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
  3546.     @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  3547.     @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
  3548.     @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
  3549.     exist_data = @max_data[0] if !@max_data[1][6]
  3550.     exist_data = @max_data[1] if !@max_data[0][6]
  3551.     @max_top    = exist_data[5] * -1        if exist_data != nil
  3552.     @max_bottom = exist_data[1] + @max_top  if exist_data != nil
  3553.     @max_left   = exist_data[4] * -1        if exist_data != nil
  3554.     @max_right  = exist_data[3] + @max_left if exist_data != nil
  3555.     @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  3556.     @max_width    = @max_right - @max_left + Graphics.width
  3557.     @max_height   = @max_bottom - @max_top + Graphics.height
  3558.     # ズームアウト限界値
  3559.     max_zoom_x    = 100 * Graphics.width / @max_width
  3560.     max_zoom_y    = 100 * Graphics.height / @max_height
  3561.     @max_zoom_out = [max_zoom_x, max_zoom_y].max
  3562.   end
  3563.   #--------------------------------------------------------------------------
  3564.   # ● カメラ移動
  3565.   #--------------------------------------------------------------------------
  3566.   def move(target_x, target_y, zoom, time, screen = true)
  3567.     # 戦闘背景以上のサイズまでズームアウトしないよう調整
  3568.     @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  3569.     target_x *= -1 if screen && @mirror
  3570.     # ズーム分の中心座標補正
  3571.     if screen && @target_zoom != 1
  3572.       target_x = target_x + @center_x
  3573.       target_y = target_y + @center_y
  3574.     end
  3575.     adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3576.     adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3577.     adjust_x = 0 if adjust_x.nan?
  3578.     adjust_y = 0 if adjust_y.nan?
  3579.     adjust_x = @center_x if !screen && adjust_x == 0
  3580.     adjust_y = @center_y if !screen && adjust_y == 0
  3581.     @target_x = target_x - adjust_x.to_i
  3582.     @target_y = target_y - adjust_y.to_i
  3583.     @target_zoom = (@target_zoom * 1000).to_i
  3584.     @zoom = @zoom.to_i
  3585.     limit_test
  3586.     # 時間0の場合は即実行
  3587.     return @time = time.abs if time != 0
  3588.     @time = 1
  3589.     update
  3590.   end
  3591.   #--------------------------------------------------------------------------
  3592.   # ● 限界座標の試算
  3593.   #--------------------------------------------------------------------------
  3594.   def limit_test
  3595.     new_width = @max_width * @target_zoom / 1000
  3596.     new_height = @max_height * @target_zoom / 1000
  3597.     new_max_right = @max_right - (@max_width - new_width)
  3598.     new_max_bottom = @max_bottom - (@max_height - new_height)
  3599.     # 画面の移動先が限界の場合、限界座標をセット
  3600.     if @target_x < @max_left * 100
  3601.       @target_x = @max_left * 100
  3602.     end
  3603.     if @target_x > new_max_right * 100
  3604.       @target_x = new_max_right * 100
  3605.     end
  3606.     if @target_y < @max_top * 100
  3607.       @target_y = @max_top * 100
  3608.     end
  3609.     if @target_y > new_max_bottom * 100
  3610.       @target_y = new_max_bottom * 100
  3611.     end
  3612.   end
  3613.   #--------------------------------------------------------------------------
  3614.   # ● 画面のシェイク
  3615.   #--------------------------------------------------------------------------
  3616.   def shake(power, speed, time)
  3617.     @shake_x = power[0] * 100
  3618.     @shake_y = power[1] * 100
  3619.     @power_time_base = @power_time = speed
  3620.     @shake_time = time
  3621.     update_shake
  3622.   end
  3623.   #--------------------------------------------------------------------------
  3624.   # ● シェイクの更新
  3625.   #--------------------------------------------------------------------------
  3626.   def update_shake
  3627.     @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  3628.     @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  3629.     @power_time -= 1
  3630.     @shake_time -= 1
  3631.     return @sx = @sy = 0 if @shake_time == 0
  3632.     return if @power_time != 0
  3633.     @power_time = @power_time_base
  3634.     @shake_x = @shake_x * -4 / 5
  3635.     @shake_y = @shake_y * -4 / 5
  3636.   end
  3637.   #--------------------------------------------------------------------------
  3638.   # ● フレーム更新
  3639.   #--------------------------------------------------------------------------
  3640.   def update
  3641.     update_shake if @shake_time != 0
  3642.     update_program
  3643.     return if @time == 0
  3644.     @x = (@x * (@time - 1) + @target_x) / @time
  3645.     @y = (@y * (@time - 1) + @target_y) / @time
  3646.     @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  3647.     @time -= 1
  3648.   end
  3649.   #--------------------------------------------------------------------------
  3650.   # ● フレーム更新
  3651.   #--------------------------------------------------------------------------
  3652.   def update_program
  3653.     update_program_switch if @program_switch != []
  3654.     update_program_se     if @program_se != []
  3655.     update_program_shake  if @program_shake != []
  3656.     update_program_color  if @program_color != []
  3657.   end
  3658. end
  3659.  
  3660. #==============================================================================
  3661. # ■ Scene_Battle
  3662. #------------------------------------------------------------------------------
  3663. #  バトル画面の処理を行うクラスです。
  3664. #==============================================================================
  3665. class Scene_Battle < Scene_Base
  3666.   #--------------------------------------------------------------------------
  3667.   # ● フレーム更新(基本)
  3668.   #--------------------------------------------------------------------------
  3669.   alias update_basic_scene_battle_n03 update_basic
  3670.   def update_basic
  3671.     update_basic_scene_battle_n03
  3672.     $sv_camera.update
  3673.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  3674.     camera_wait
  3675.   end
  3676.   #--------------------------------------------------------------------------
  3677.   # ● カメラウェイト
  3678.   #--------------------------------------------------------------------------
  3679.   def camera_wait
  3680.     process_event if $sv_camera.event
  3681.     $sv_camera.event = false if $sv_camera.event
  3682.     while $sv_camera.wait != 0
  3683.       Graphics.update
  3684.       Input.update
  3685.       update_all_windows
  3686.       $game_timer.update
  3687.       $game_troop.update
  3688.       $sv_camera.update
  3689.       @spriteset.update
  3690.       update_info_viewport
  3691.       update_message_open
  3692.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  3693.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  3694.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  3695.     end
  3696.   end
  3697.   #--------------------------------------------------------------------------
  3698.   # ● カメラウェイトのセット
  3699.   #--------------------------------------------------------------------------
  3700.   def set_camera_wait(time)
  3701.     $sv_camera.wait = time
  3702.     camera_wait
  3703.   end  
  3704.   #--------------------------------------------------------------------------
  3705.   # ● エフェクト実行が終わるまでウェイト ★再定義
  3706.   #--------------------------------------------------------------------------
  3707.   def wait_for_effect
  3708.   end
  3709.   #--------------------------------------------------------------------------
  3710.   # ● ターン開始
  3711.   #--------------------------------------------------------------------------
  3712.   alias turn_start_scene_battle_n03 turn_start
  3713.   def turn_start
  3714.     turn_start_scene_battle_n03
  3715.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  3716.   end
  3717.   #--------------------------------------------------------------------------
  3718.   # ● ターン終了
  3719.   #--------------------------------------------------------------------------
  3720.   alias turn_end_scene_battle_n03 turn_end
  3721.   def turn_end
  3722.     turn_end_scene_battle_n03
  3723.     for member in $game_troop.members + $game_party.members
  3724.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  3725.       member.sv.result_damage = [0,0]
  3726.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  3727.     end
  3728.     set_camera_wait(N03::TURN_END_WAIT)
  3729.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  3730.     @log_window.clear
  3731.   end
  3732.   #--------------------------------------------------------------------------
  3733.   # ● スキル/アイテムの使用 ★再定義
  3734.   #--------------------------------------------------------------------------
  3735.   def use_item
  3736.     item = @subject.current_action.item
  3737.     display_item(item)
  3738.     @subject.use_item(item)
  3739.     refresh_status
  3740.     @targets = @subject.current_action.make_targets.compact
  3741.     @targets = [@subject] if @targets.size == 0
  3742.     set_substitute(item)
  3743.     for time in item.repeats.times do play_sideview(@targets, item) end
  3744.     end_reaction(item)
  3745.     display_end_item
  3746.   end
  3747.   #--------------------------------------------------------------------------
  3748.   # ● スキル/アイテム名の表示
  3749.   #--------------------------------------------------------------------------
  3750.   def display_item(item)
  3751.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  3752.     @log_window.off
  3753.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  3754.   end  
  3755.   #--------------------------------------------------------------------------
  3756.   # ● スキル/アイテム名の表示終了
  3757.   #--------------------------------------------------------------------------
  3758.   def display_end_item
  3759.     @skill_name_window.dispose if @skill_name_window != nil
  3760.     @skill_name_window = nil
  3761.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  3762.     @log_window.clear if N03::BATTLE_LOG
  3763.   end  
  3764.   #--------------------------------------------------------------------------
  3765.   # ● 反撃/魔法反射/身代わり処理
  3766.   #--------------------------------------------------------------------------
  3767.   def end_reaction(item)
  3768.     end_substitute if @substitute != nil
  3769.     set_reflection(item) if @reflection_data != nil
  3770.     set_counter_attack if @counter_attacker != nil
  3771.   end  
  3772.   #--------------------------------------------------------------------------
  3773.   # ● 反撃の発動 ★再定義
  3774.   #--------------------------------------------------------------------------
  3775.   def invoke_counter_attack(target, item)
  3776.     return if @subject.sv.counter_id != 0
  3777.     @counter_attacker = [] if @counter_attacker == nil
  3778.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  3779.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  3780.     target.sv.counter_id = target.sv.counter_skill_id
  3781.     @counter_attacker.push(target)
  3782.   end
  3783.   #--------------------------------------------------------------------------
  3784.   # ● 魔法反射の発動 ★再定義
  3785.   #--------------------------------------------------------------------------
  3786.   def invoke_magic_reflection(target, item)
  3787.     return if @subject.sv.reflection_id != 0
  3788.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  3789.     target.sv.reflection_id = target.sv.reflection_anime_id
  3790.   end
  3791.   #--------------------------------------------------------------------------
  3792.   # ● 身代わりの適用 ★再定義
  3793.   #--------------------------------------------------------------------------
  3794.   def apply_substitute(target, item)
  3795.     return target if @substitute == nil
  3796.     return target if !check_substitute(target, item)
  3797.     return @substitute
  3798.   end
  3799.   #--------------------------------------------------------------------------
  3800.   # ● 身代わりセット
  3801.   #--------------------------------------------------------------------------
  3802.   def set_substitute(item)
  3803.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  3804.     return if @substitute == nil
  3805.     s_targets = []
  3806.     for i in 0...@targets.size
  3807.       next if @targets[i] == @substitute
  3808.       next if !check_substitute(@targets[i], item)
  3809.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  3810.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  3811.       s_targets.push(@targets[i])
  3812.       @targets[i] = @substitute
  3813.     end
  3814.     return @substitute = nil if s_targets == []
  3815.     @substitute.sv.set_target(s_targets)
  3816.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  3817.   end  
  3818.   #--------------------------------------------------------------------------
  3819.   # ● 身代わり終了
  3820.   #--------------------------------------------------------------------------
  3821.   def end_substitute
  3822.     for member in @substitute.sv.target_battler
  3823.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  3824.     end  
  3825.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  3826.     @substitute = nil
  3827.   end
  3828.   #--------------------------------------------------------------------------
  3829.   # ● 反撃
  3830.   #--------------------------------------------------------------------------
  3831.   def set_counter_attack
  3832.     pre_subject = @subject
  3833.     for attacker in @counter_attacker
  3834.       @subject = attacker
  3835.       item = $data_skills[attacker.sv.counter_skill_id]
  3836.       play_sideview([pre_subject], item)
  3837.     end
  3838.     # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  3839.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  3840.     @subject = pre_subject
  3841.     @counter_attacker = nil
  3842.   end
  3843.   #--------------------------------------------------------------------------
  3844.   # ● 魔法反射
  3845.   #--------------------------------------------------------------------------
  3846.   def set_reflection(item)
  3847.     @log_window.back_to(1)
  3848.     for data in @reflection_data
  3849.       @subject.sv.damage_action(@subject, item)
  3850.       N03.set_damage_anime_data([@subject], @subject, data)
  3851.       apply_item_effects(@subject, item)
  3852.       @spriteset.set_damage_pop(@subject)
  3853.     end
  3854.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  3855.     @reflection_data = nil
  3856.   end
  3857.   #--------------------------------------------------------------------------
  3858.   # ● サイドビューアクション実行
  3859.   #--------------------------------------------------------------------------
  3860.   def play_sideview(targets, item)
  3861.     @subject.sv.set_target(targets)
  3862.     return if @subject.sv.attack_action(item) == nil
  3863.     return if !@subject.movable?
  3864.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  3865.     @subject.sv.start_action(@subject.sv.attack_action(item))
  3866.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  3867.     @subject.sv.active = true
  3868.     @subject.sv.command_action = false
  3869.     loop do
  3870.       update_basic
  3871.       data = @subject.sv.play_data
  3872.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  3873.       N03.targets_set(@subject)          if data[0] == "targets_set"
  3874.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  3875.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  3876.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  3877.       set_damage(item)                   if @subject.sv.set_damage
  3878.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  3879.       break                              if @subject.sv.action_end or @subject.hidden?
  3880.     end
  3881.     @immortal = N03.unimmortaling        if @immortal
  3882.   end
  3883.   #--------------------------------------------------------------------------
  3884.   # ● ダメージの実行
  3885.   #--------------------------------------------------------------------------
  3886.   def set_damage(item)
  3887.     targets = @targets
  3888.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  3889.     for target in targets do damage_anime(targets.dup, target, item) end
  3890.     @subject.sv.set_damage = false
  3891.     @subject.sv.damage_anime_data = []
  3892.   end
  3893.   #--------------------------------------------------------------------------
  3894.   # ● ダメージ戦闘アニメ処理
  3895.   #--------------------------------------------------------------------------
  3896.   def damage_anime(targets, target, item)
  3897.     @log_window.back_to(1) if @log_window.line_number == 5
  3898.     return if item.scope != 9 && item.scope != 10 && target.dead?
  3899.     @miss = false
  3900.     invoke_item(target,item)
  3901.     if target.result.missed
  3902.       target.sv.miss_action(@subject, item)
  3903.       return @miss = true
  3904.     elsif target.result.evaded or target.sv.counter_id != 0
  3905.       target.sv.evasion_action(@subject, item)
  3906.       return @miss = true
  3907.     elsif target.sv.reflection_id != 0
  3908.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  3909.       target.sv.reflection_id = 0
  3910.       @reflection_data = [] if @reflection_data == nil
  3911.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  3912.     end
  3913.     target.sv.damage_action(@subject, item)
  3914.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  3915.     @spriteset.set_damage_pop(target)
  3916.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  3917.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  3918.   end
  3919.   #--------------------------------------------------------------------------
  3920.   # ● 飛ばしアニメ処理
  3921.   #--------------------------------------------------------------------------
  3922.   def set_move_anime(item)
  3923.     for data in @subject.sv.m_a_data
  3924.       @subject.sv.damage_anime_data = data[4]
  3925.       hit_targets = []
  3926.       for target in data[1]
  3927.         damage_anime(data[1], target, item) if data[0]
  3928.         hit_targets.push(target) if !@miss
  3929.       end
  3930.       @miss = false if !data[3]
  3931.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  3932.     end
  3933.     @subject.sv.set_damage = false
  3934.     @subject.sv.m_a_data = []
  3935.   end
  3936. end
  3937.  
  3938. #==============================================================================
  3939. # ■ DataManager
  3940. #------------------------------------------------------------------------------
  3941. #  データベースとゲームオブジェクトを管理するモジュールです。
  3942. #==============================================================================
  3943. module DataManager
  3944.   #--------------------------------------------------------------------------
  3945.   # ● 各種ゲームオブジェクトの作成 ★再定義
  3946.   #--------------------------------------------------------------------------
  3947.   def self.create_game_objects
  3948.     $game_temp          = Game_Temp.new
  3949.     $game_system        = Game_System.new
  3950.     $game_timer         = Game_Timer.new
  3951.     $game_message       = Game_Message.new
  3952.     $game_switches      = Game_Switches.new
  3953.     $game_variables     = Game_Variables.new
  3954.     $game_self_switches = Game_SelfSwitches.new
  3955.     $game_actors        = Game_Actors.new
  3956.     $game_party         = Game_Party.new
  3957.     $game_troop         = Game_Troop.new
  3958.     $game_map           = Game_Map.new
  3959.     $game_player        = Game_Player.new
  3960.     $sv_camera          = Battle_Camera.new
  3961.   end
  3962. end
  3963.  
  3964. #==============================================================================
  3965. # ■ BattleManager
  3966. #------------------------------------------------------------------------------
  3967. #  戦闘の進行を管理するモジュールです。
  3968. #==============================================================================
  3969. module BattleManager
  3970.   #--------------------------------------------------------------------------
  3971.   # ● エンカウント時の処理 ★再定義
  3972.   #--------------------------------------------------------------------------
  3973.   def self.on_encounter
  3974.     @preemptive = (rand < rate_preemptive)
  3975.     @surprise = (rand < rate_surprise && !@preemptive)
  3976.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  3977.   end
  3978.   #--------------------------------------------------------------------------
  3979.   # ● 勝利の処理 ★再定義
  3980.   #--------------------------------------------------------------------------
  3981.   def self.process_victory
  3982.     $sv_camera.win_wait = true
  3983.   end  
  3984.   #--------------------------------------------------------------------------
  3985.   # ● 勝利
  3986.   #--------------------------------------------------------------------------
  3987.   def self.victory
  3988.     $sv_camera.win_wait = false
  3989.     N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  3990.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  3991.     play_battle_end_me
  3992.     replay_bgm_and_bgs
  3993.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  3994.     display_exp
  3995.     gain_gold
  3996.     gain_drop_items
  3997.     gain_exp
  3998.     SceneManager.return
  3999.     battle_end(0)
  4000.     return true
  4001.   end
  4002.   #--------------------------------------------------------------------------
  4003.   # ● 逃走の処理 ★再定義
  4004.   #--------------------------------------------------------------------------
  4005.   def self.process_escape
  4006.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  4007.     success = @preemptive ? true : (rand < @escape_ratio)
  4008.     Sound.play_escape
  4009.     if success
  4010.       process_abort
  4011.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  4012.     else
  4013.       @escape_ratio += 0.1
  4014.       $game_message.add('\.' + Vocab::EscapeFailure)
  4015.       $game_party.clear_actions
  4016.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  4017.     end
  4018.     wait_for_message
  4019.     return success
  4020.   end
  4021.   #--------------------------------------------------------------------------
  4022.   # ● 次のコマンド入力へ ★再定義
  4023.   #--------------------------------------------------------------------------
  4024.   def self.next_command
  4025.     begin
  4026.       if !actor || !actor.next_command
  4027.         $game_party.battle_members[@actor_index].sv.command_action = true
  4028.         @actor_index += 1
  4029.         if @actor_index >= $game_party.members.size
  4030.           for member in $game_party.battle_members.reverse
  4031.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  4032.           end
  4033.           return false
  4034.         end
  4035.       end
  4036.     end until actor.inputable?
  4037.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  4038.     if pre_actor
  4039.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  4040.     end
  4041.     return true
  4042.   end
  4043.   #--------------------------------------------------------------------------
  4044.   # ● 前のコマンド入力へ ★再定義
  4045.   #--------------------------------------------------------------------------
  4046.   def self.prior_command
  4047.     begin
  4048.       if !actor || !actor.prior_command
  4049.         $game_party.battle_members[@actor_index].sv.command_action = false
  4050.         @actor_index -= 1
  4051.         if @actor_index < 0
  4052.           for member in $game_party.battle_members
  4053.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  4054.           end
  4055.           return false
  4056.         end
  4057.       end
  4058.     end until actor.inputable?
  4059.     actor.make_actions if actor.inputable?
  4060.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  4061.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  4062.     return true
  4063.   end
  4064.   #--------------------------------------------------------------------------
  4065.   # ● コマンド入力前のアクターを取得
  4066.   #--------------------------------------------------------------------------
  4067.   def self.pre_actor
  4068.     return if @actor_index == 0
  4069.     $game_party.members[@actor_index - 1]
  4070.   end
  4071.   #--------------------------------------------------------------------------
  4072.   # ● コマンド入力後のアクターを取得
  4073.   #--------------------------------------------------------------------------
  4074.   def self.after_actor
  4075.     $game_party.members[@actor_index + 1]
  4076.   end
  4077.   #--------------------------------------------------------------------------
  4078.   # ● 戦闘行動者を前に追加
  4079.   #--------------------------------------------------------------------------
  4080.   def self.unshift_action_battlers(battler)
  4081.     @action_battlers.unshift(battler)
  4082.   end
  4083. end  
  4084.  
  4085. #==============================================================================
  4086. # ■ Game_Battler
  4087. #------------------------------------------------------------------------------
  4088. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  4089. #==============================================================================
  4090. class Game_Battler < Game_BattlerBase
  4091.   #--------------------------------------------------------------------------
  4092.   # ● 公開インスタンス変数
  4093.   #--------------------------------------------------------------------------
  4094.   attr_reader   :sv                     # サイドビューデータ
  4095.   attr_accessor :flash_flg              # 閃きフラグ
  4096.   #--------------------------------------------------------------------------
  4097.   # ● オブジェクト初期化
  4098.   #--------------------------------------------------------------------------
  4099.   alias initialize_game_battler_n03 initialize
  4100.   def initialize
  4101.     initialize_game_battler_n03
  4102.     @sv = SideView.new(self)
  4103.   end
  4104.   #--------------------------------------------------------------------------
  4105.   # ● 現在の戦闘行動を除去
  4106.   #--------------------------------------------------------------------------
  4107.   alias remove_current_action_game_battler_n03 remove_current_action
  4108.   def remove_current_action
  4109.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  4110.     remove_current_action_game_battler_n03
  4111.   end
  4112.   #--------------------------------------------------------------------------
  4113.   # ● ターン終了処理
  4114.   #--------------------------------------------------------------------------
  4115.   alias on_turn_end_game_battler_n03 on_turn_end
  4116.   def on_turn_end
  4117.     on_turn_end_game_battler_n03
  4118.     @sv.add_state = []
  4119.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  4120.   end
  4121.   #--------------------------------------------------------------------------
  4122.   # ● パラメータ条件比較 data = [種別, 数値, 判別]
  4123.   #--------------------------------------------------------------------------
  4124.   def comparison_parameter(data)
  4125.     return true if data[0][0] == 0
  4126.     kind = data[0]
  4127.     num = data[1]
  4128.     select = data[2]
  4129.     case kind
  4130.     when  1 ; par = level
  4131.     when  2 ; par = mhp
  4132.     when  3 ; par = mmp
  4133.     when  4 ; par = hp
  4134.     when  5 ; par = mp
  4135.     when  6 ; par = tp
  4136.     when  7 ; par = atk
  4137.     when  8 ; par = self.def
  4138.     when  9 ; par = mat
  4139.     when 10 ; par = mdf
  4140.     when 11 ; par = agi
  4141.     when 12 ; par = luk
  4142.     end
  4143.     if num < 0
  4144.       case kind
  4145.       when  4 ; num = mhp * num / 100
  4146.       when  5 ; num = mmp * num / 100
  4147.       when  6 ; num = max_tp * num / 100
  4148.       end
  4149.       num = num.abs
  4150.     end  
  4151.     case select
  4152.     when  0 ; return par == num
  4153.     when  1 ; return par < num
  4154.     when  2 ; return par > num
  4155.     end
  4156.   end
  4157.   #--------------------------------------------------------------------------
  4158.   # ● 装備条件比較 data = [装備種別, タイプID]
  4159.   #--------------------------------------------------------------------------
  4160.   def comparison_equip(data)
  4161.     kind = data[0]
  4162.     items = weapons if kind == 0
  4163.     items = armors  if kind == 1
  4164.     for item in items
  4165.       for id in data[1]
  4166.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  4167.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  4168.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  4169.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  4170.       end
  4171.     end
  4172.     return false
  4173.   end
  4174.  
  4175. end  
  4176. #==============================================================================
  4177. # ■ Game_Actor
  4178. #------------------------------------------------------------------------------
  4179. #  アクターを扱うクラスです。
  4180. #==============================================================================
  4181. class Game_Actor < Game_Battler
  4182.   #--------------------------------------------------------------------------
  4183.   # ● 公開インスタンス変数
  4184.   #--------------------------------------------------------------------------
  4185.   attr_reader :actor_id                    # ID
  4186.   #--------------------------------------------------------------------------
  4187.   # ● ID
  4188.   #--------------------------------------------------------------------------
  4189.   def id
  4190.     return @actor_id
  4191.   end
  4192.   #--------------------------------------------------------------------------
  4193.   # ● スプライトを使うか? ★再定義
  4194.   #--------------------------------------------------------------------------
  4195.   def use_sprite?
  4196.     return true
  4197.   end
  4198.   #--------------------------------------------------------------------------
  4199.   # ● ダメージ効果の実行 ★再定義
  4200.   #--------------------------------------------------------------------------
  4201.   def perform_damage_effect
  4202.     return if !N03::ACTOR_DAMAGE
  4203.     $game_troop.screen.start_shake(5, 5, 10)
  4204.     @sprite_effect_type = :blink
  4205.     Sound.play_actor_damage
  4206.   end
  4207.  
  4208. end
  4209.  
  4210. #==============================================================================
  4211. # ■ Game_Enemy
  4212. #------------------------------------------------------------------------------
  4213. #  敵キャラを扱うクラスです。
  4214. #==============================================================================
  4215. class Game_Enemy < Game_Battler
  4216.   #--------------------------------------------------------------------------
  4217.   # ● 公開インスタンス変数
  4218.   #--------------------------------------------------------------------------
  4219.   attr_reader :enemy_id                    # ID
  4220.   #--------------------------------------------------------------------------
  4221.   # ● ID
  4222.   #--------------------------------------------------------------------------
  4223.   def id
  4224.     return @enemy_id
  4225.   end
  4226.   #--------------------------------------------------------------------------
  4227.   # ● レベル
  4228.   #--------------------------------------------------------------------------
  4229.   def level
  4230.     return @sv.level
  4231.   end
  4232.   #--------------------------------------------------------------------------
  4233.   # ● ダメージ効果の実行 ★再定義
  4234.   #--------------------------------------------------------------------------
  4235.   def perform_damage_effect
  4236.     return if !N03::ENEMY_DAMAGE
  4237.     @sprite_effect_type = :blink
  4238.     Sound.play_enemy_damage
  4239.   end
  4240.   #--------------------------------------------------------------------------
  4241.   # ● 武器
  4242.   #--------------------------------------------------------------------------
  4243.   def weapons
  4244.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  4245.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  4246.     return [weapon1, weapon2]
  4247.   end
  4248.   #--------------------------------------------------------------------------
  4249.   # ● 防具
  4250.   #--------------------------------------------------------------------------
  4251.   def armors
  4252.     return [$data_armors[@sv.enemy_shield_id]]
  4253.   end
  4254.   #--------------------------------------------------------------------------
  4255.   # ● 二刀流の判定
  4256.   #--------------------------------------------------------------------------
  4257.   def dual_wield?
  4258.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  4259.   end
  4260.   #--------------------------------------------------------------------------
  4261.   # ● バトラー画像変更
  4262.   #--------------------------------------------------------------------------
  4263.   def graphics_change(battler_name)
  4264.     @battler_name = battler_name
  4265.   end
  4266.   #--------------------------------------------------------------------------
  4267.   # ● 通常攻撃 アニメーション ID の取得
  4268.   #--------------------------------------------------------------------------
  4269.   def atk_animation_id1
  4270.     return weapons[0].animation_id if weapons[0]
  4271.     return weapons[1] ? 0 : 1
  4272.   end
  4273.   #--------------------------------------------------------------------------
  4274.   # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  4275.   #--------------------------------------------------------------------------
  4276.   def atk_animation_id2
  4277.     return weapons[1] ? weapons[1].animation_id : 0
  4278.   end
  4279. end
  4280.  
  4281. #==============================================================================
  4282. # ■ Sprite_Base
  4283. #------------------------------------------------------------------------------
  4284. #  アニメーションの表示処理を追加したスプライトのクラスです。
  4285. #==============================================================================
  4286. class Sprite_Base < Sprite
  4287.   #--------------------------------------------------------------------------
  4288.   # ● アニメーションの座標更新 (ホーミングあり)
  4289.   #--------------------------------------------------------------------------
  4290.   def update_animation_position_horming
  4291.     return if @action_end_cancel
  4292.     ani_ox_set if @horming
  4293.     camera_zoom = $sv_camera.zoom
  4294.     camera_zoom = 1 if @move_anime
  4295.     kind = 1
  4296.     kind = -1 if @ani_mirror && !@anime_no_mirror
  4297.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  4298.     for i in 0..15
  4299.       @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
  4300.       @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
  4301.     end
  4302.   end
  4303.   #--------------------------------------------------------------------------
  4304.   # ● アニメーション元の座標をセット
  4305.   #--------------------------------------------------------------------------
  4306.   def ani_ox_set
  4307.     if !SceneManager.scene_is?(Scene_Battle)
  4308.       @real_x = x
  4309.       @real_y = y
  4310.     end
  4311.     @ani_ox = @real_x - ox + width / 2
  4312.     @ani_oy = @real_y - oy + height / 2
  4313.     @ani_oy -= height / 2 if @animation.position == 0
  4314.     @ani_oy += height / 2 if @animation.position == 2
  4315.   end
  4316.   #--------------------------------------------------------------------------
  4317.   # ● アニメーションの更新
  4318.   #--------------------------------------------------------------------------
  4319.   alias update_animation_sprite_base_n03 update_animation
  4320.   def update_animation
  4321.     update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  4322.     update_animation_sprite_base_n03
  4323.   end
  4324.   #--------------------------------------------------------------------------
  4325.   # ● アニメーションの原点設定 ★再定義
  4326.   #--------------------------------------------------------------------------
  4327.   def set_animation_origin
  4328.     return ani_ox_set if @animation.position != 3
  4329.     if viewport == nil
  4330.       @ani_ox = Graphics.width / 2
  4331.       @ani_oy = Graphics.height / 2
  4332.     else
  4333.       @ani_ox = viewport.rect.width / 2
  4334.       @ani_oy = viewport.rect.height / 2
  4335.     end
  4336.   end
  4337.   #--------------------------------------------------------------------------
  4338.   # ● アニメーションスプライトの設定 ★再定義
  4339.   #--------------------------------------------------------------------------
  4340.   def animation_set_sprites(frame)
  4341.     camera_zoom = 1
  4342.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  4343.     camera_x = $sv_camera.x
  4344.     camera_y = $sv_camera.y
  4345.     camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  4346.     plus_z = 5
  4347.     plus_z = 1000 if @animation.position == 3
  4348.     plus_z = -17 if @plus_z != nil && @plus_z == false
  4349.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  4350.     cell_data = frame.cell_data
  4351.     @ani_sprites.each_with_index do |sprite, i|
  4352.       next unless sprite
  4353.       pattern = cell_data[i, 0]
  4354.       if !pattern || pattern < 0
  4355.         sprite.visible = false
  4356.         next
  4357.       end
  4358.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  4359.       sprite.visible = true
  4360.       sprite.src_rect.set(pattern % 5 * 192,
  4361.         pattern % 100 / 5 * 192, 192, 192)
  4362.       if @ani_mirror && !@anime_no_mirror
  4363.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  4364.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4365.         sprite.angle = (360 - cell_data[i, 4])
  4366.         sprite.mirror = (cell_data[i, 5] == 0)
  4367.       else
  4368.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  4369.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4370.         sprite.angle = cell_data[i, 4]
  4371.         sprite.mirror = (cell_data[i, 5] == 1)
  4372.       end
  4373.       sprite.z = self.z + plus_z + i
  4374.       sprite.ox = 96
  4375.       sprite.oy = 96
  4376.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  4377.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  4378.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  4379.       sprite.blend_type = cell_data[i, 7]
  4380.     end
  4381.   end
  4382.   #--------------------------------------------------------------------------
  4383.   # ● 子スプライトフラグ
  4384.   #--------------------------------------------------------------------------
  4385.   def set(battler, horming, camera_zoom, no_mirror)
  4386.     @battler = battler
  4387.     @next = true
  4388.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  4389.     self.ox = bitmap.width / 2
  4390.     self.oy = bitmap.height
  4391.     @horming = horming
  4392.     @anime_camera_zoom = camera_zoom
  4393.     @anime_no_mirror = no_mirror
  4394.     @battler.sv.reset_anime_data
  4395.   end  
  4396.   #--------------------------------------------------------------------------
  4397.   # ● 子スプライト座標セット
  4398.   #--------------------------------------------------------------------------
  4399.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  4400.     self.z = z
  4401.     self.zoom_x = zoom_x
  4402.     self.zoom_y = zoom_y
  4403.     @real_x = real_x
  4404.     @real_y = real_y
  4405.   end
  4406.   #--------------------------------------------------------------------------
  4407.   # ● 他スプライトへのタイミング処理
  4408.   #--------------------------------------------------------------------------
  4409.   def other_process_timing(timing)
  4410.     se_flag = true
  4411.     se_flag = @se_flag if @se_flag != nil
  4412.     @battler.sv.timing.push([se_flag, timing.dup])
  4413.   end
  4414.   #--------------------------------------------------------------------------
  4415.   # ● 他バトラーへのタイミング処理
  4416.   #--------------------------------------------------------------------------
  4417.   def target_battler_process_timing(timing)
  4418.     for target in @timing_targets
  4419.       target.sv.timing.push([false, timing.dup])
  4420.     end  
  4421.   end
  4422.   #--------------------------------------------------------------------------
  4423.   # ● SE とフラッシュのタイミング処理
  4424.   #--------------------------------------------------------------------------
  4425.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  4426.   def animation_process_timing(timing)
  4427.     target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  4428.     return other_process_timing(timing) if @next != nil
  4429.     animation_process_timing_sprite_base_n03(timing)
  4430.   end
  4431.   #--------------------------------------------------------------------------
  4432.   # ● アニメーションの解放
  4433.   #--------------------------------------------------------------------------
  4434.   alias dispose_animation_sprite_base_n03 dispose_animation
  4435.   def dispose_animation
  4436.     dispose_animation_sprite_base_n03
  4437.   end
  4438. end
  4439.  
  4440.  
  4441. #==============================================================================
  4442. # ■ Sprite_Battler
  4443. #------------------------------------------------------------------------------
  4444. #  バトラー表示用のスプライトです。
  4445. #==============================================================================
  4446. class Sprite_Battler < Sprite_Base
  4447.   #--------------------------------------------------------------------------
  4448.   # ● 公開インスタンス変数 
  4449.   #--------------------------------------------------------------------------
  4450.   attr_accessor   :removing             # パーティ離脱中
  4451.   #--------------------------------------------------------------------------
  4452.   # ● オブジェクト初期化
  4453.   #--------------------------------------------------------------------------
  4454.   alias initialize_sprite_battler_n03 initialize
  4455.   def initialize(viewport, battler = nil)
  4456.     initialize_sprite_battler_n03(viewport, battler)
  4457.     @real_x = @real_y = 0
  4458.     update_bitmap if @battler != nil
  4459.   end
  4460.   #--------------------------------------------------------------------------
  4461.   # ● アニメーションの開始 ★再定義
  4462.   #--------------------------------------------------------------------------
  4463.   def start_animation(animation, mirror = false)
  4464.     return next_animation(animation, mirror) if animation?
  4465.     @animation = animation
  4466.     if @animation
  4467.       @horming = @battler.sv.anime_horming
  4468.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  4469.       @anime_no_mirror = @battler.sv.anime_no_mirror
  4470.       @timing_targets = @battler.sv.timing_targets
  4471.       @plus_z = @battler.sv.anime_plus_z
  4472.       @battler.sv.reset_anime_data
  4473.       @ani_mirror = mirror
  4474.       set_animation_rate
  4475.       @ani_duration = @animation.frame_max * @ani_rate + 1
  4476.       load_animation_bitmap
  4477.       make_animation_sprites
  4478.       set_animation_origin
  4479.     end
  4480.   end
  4481.   #--------------------------------------------------------------------------
  4482.   # ● 次のアニメを開始
  4483.   #--------------------------------------------------------------------------
  4484.   def next_animation(animation, mirror)
  4485.     @next_anime = [] if @next_anime == nil
  4486.     @next_anime.push(Sprite_Base.new(viewport))
  4487.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  4488.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  4489.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  4490.   end
  4491.   #--------------------------------------------------------------------------
  4492.   # ● 影グラフィック作成
  4493.   #--------------------------------------------------------------------------
  4494.   def create_shadow
  4495.     reset_shadow
  4496.     return if @battler.sv.shadow == false
  4497.     @shadow = Sprite.new(viewport) if @shadow == nil
  4498.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  4499.     @shadow.ox = @shadow.bitmap.width / 2
  4500.     @shadow.oy = @shadow.bitmap.height / 2
  4501.   end
  4502.   #--------------------------------------------------------------------------
  4503.   # ● 影グラフィック初期化
  4504.   #--------------------------------------------------------------------------
  4505.   def reset_shadow
  4506.     return if @shadow == nil
  4507.     @shadow.dispose
  4508.     @shadow = nil
  4509.   end  
  4510.   #--------------------------------------------------------------------------
  4511.   # ● 転送元ビットマップの更新 ★再定義
  4512.   #--------------------------------------------------------------------------
  4513.   def update_bitmap
  4514.     update_bitmap_enemy if !@battler.actor?
  4515.     update_bitmap_actor if @battler.actor?
  4516.     update_src_rect if @battler != nil
  4517.     update_color if @battler != nil
  4518.   end
  4519.   #--------------------------------------------------------------------------
  4520.   # ● 転送元ビットマップ:エネミー
  4521.   #--------------------------------------------------------------------------
  4522.   def update_bitmap_enemy
  4523.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  4524.       @battler_name = @battler.battler_name
  4525.       @battler_hue = @battler.battler_hue
  4526.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4527.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4528.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  4529.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  4530.       create_shadow
  4531.       init_visibility
  4532.       @battler_id = @battler.id
  4533.     end
  4534.   end  
  4535.   #--------------------------------------------------------------------------
  4536.   # ● 転送元ビットマップ:アクター
  4537.   #--------------------------------------------------------------------------
  4538.   def update_bitmap_actor
  4539.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  4540.       @battler_name = @battler.character_name
  4541.       @battler_index = @battler.character_index
  4542.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4543.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4544.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  4545.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  4546.       create_shadow
  4547.       init_visibility
  4548.       @battler_id = @battler.id
  4549.     end
  4550.   end
  4551.   #--------------------------------------------------------------------------
  4552.   # ● 可視状態の初期化 ★再定義
  4553.   #--------------------------------------------------------------------------
  4554.   def init_visibility
  4555.     @battler_visible = @battler.alive?
  4556.     @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
  4557.     @battler_visible = false if @battler.hidden?
  4558.     @battler.sv.opacity = 0 unless @battler_visible
  4559.     self.opacity = 0 unless @battler_visible
  4560.     self.opacity = 255 if @battler_visible
  4561.     @battler.sv.weapon_visible = @battler_visible
  4562.   end
  4563.   #--------------------------------------------------------------------------
  4564.   # ● 転送元矩形の更新
  4565.   #--------------------------------------------------------------------------
  4566.   def update_src_rect
  4567.     return if @battler.sv.collapse
  4568.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  4569.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4570.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  4571.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if !@battler.actor?
  4572.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  4573.     end
  4574.     anime_off if @battler.sv.anime_off
  4575.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4576.     self.opacity = @battler.sv.opacity if @battler_visible
  4577.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  4578.   end
  4579.   #--------------------------------------------------------------------------
  4580.   # ● 位置の更新 ★再定義
  4581.   #--------------------------------------------------------------------------
  4582.   def update_position
  4583.     @real_x = @battler.sv.x / 100
  4584.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  4585.     self.x = @real_x - $sv_camera.x
  4586.     self.y = @real_y - $sv_camera.y
  4587.     self.z = @battler.sv.z - @battler.sv.c / 100
  4588.     if @battler.sv.h <= 0
  4589.       self.x += $sv_camera.sx / 100
  4590.       self.y += $sv_camera.sy / 100
  4591.     end  
  4592.     self.x *= $sv_camera.zoom
  4593.     self.y *= $sv_camera.zoom
  4594.   end
  4595.   #--------------------------------------------------------------------------
  4596.   # ● 原点の更新 ★再定義
  4597.   #--------------------------------------------------------------------------
  4598.   def update_origin
  4599.     return if !bitmap or @battler.sv.collapse
  4600.     self.ox = @battler.sv.ox
  4601.     self.oy = @battler.sv.oy
  4602.     self.angle = @battler.sv.angle
  4603.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  4604.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  4605.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  4606.     self.mirror = !@battler.sv.mirror if @graphic_mirror_flag
  4607.   end
  4608.   #--------------------------------------------------------------------------
  4609.   # ● 影グラフィックの更新
  4610.   #--------------------------------------------------------------------------
  4611.   def update_shadow
  4612.     @shadow.visible = @battler.sv.shadow_visible
  4613.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  4614.     @shadow.opacity = self.opacity if !@battler.sv.opacity_data[3]
  4615.     @shadow.x = @real_x - $sv_camera.x
  4616.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  4617.     @shadow.z = @battler.sv.z - 10
  4618.     @shadow.zoom_x = $sv_camera.zoom
  4619.     @shadow.zoom_y = $sv_camera.zoom
  4620.     @shadow.x += $sv_camera.sx / 100
  4621.     @shadow.y += $sv_camera.sy / 100
  4622.     @shadow.x *= $sv_camera.zoom
  4623.     @shadow.y *= $sv_camera.zoom
  4624.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4625.   end
  4626.   #--------------------------------------------------------------------------
  4627.   # ● ふきだしの更新
  4628.   #--------------------------------------------------------------------------
  4629.   def update_balloon
  4630.     if @battler.sv.balloon_data == [] && @balloon
  4631.       @balloon_data = []
  4632.       @balloon.dispose
  4633.       return @balloon = nil
  4634.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  4635.       @balloon_data = @battler.sv.balloon_data
  4636.       @balloon = Sprite.new(self.viewport)
  4637.       @balloon.bitmap = Cache.system("Balloon")
  4638.       @balloon.zoom_x = @balloon_data[3]
  4639.       @balloon.zoom_y = @balloon_data[3]
  4640.       @balloon.ox = 32 if @battler.sv.mirror
  4641.       @balloon.oy = 16
  4642.       @balloon_count = 0
  4643.     end
  4644.     return if !@balloon
  4645.     @balloon.opacity = self.opacity
  4646.     @balloon.x = self.x
  4647.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  4648.     @balloon.z = self.z + 20
  4649.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  4650.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4651.     @balloon_count += 1
  4652.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  4653.   end
  4654.   #--------------------------------------------------------------------------
  4655.   # ● 色調変更の更新
  4656.   #--------------------------------------------------------------------------
  4657.   def update_color
  4658.     color_set if @battler.sv.color_set != []
  4659.     return if @color_data == nil
  4660.     @color_data[4] -= 1
  4661.     if @color_data[4] == 0 && @color_data[5] != 0
  4662.       @color_data[4] = @color_data[5]
  4663.       @color_data[5] = 0
  4664.       @color_data[6] = [0,0,0,0]
  4665.     elsif @color_data[4] == 0
  4666.       @remain_color_data = @color_data
  4667.       @battler.sv.color = @color_data.dup
  4668.       return @color_data = nil
  4669.     end  
  4670.     for i in 0..3
  4671.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  4672.     end  
  4673.     @battler.sv.color = @color_data.dup
  4674.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  4675.   end
  4676.   #--------------------------------------------------------------------------
  4677.   # ● 残像の更新
  4678.   #--------------------------------------------------------------------------
  4679.   def update_mirage
  4680.     if @battler.sv.mirage == [] && @mirages
  4681.       @mirage_data = []
  4682.       for mirage in @mirages do mirage.dispose end
  4683.       return @mirages = nil
  4684.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  4685.       @mirage_data = @battler.sv.mirage
  4686.       @mirages = []
  4687.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  4688.       @mirage_count = 0
  4689.     end
  4690.     return if !@mirages
  4691.     @mirage_count += 1
  4692.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  4693.     for i in 0...@mirages.size
  4694.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  4695.     end
  4696.   end
  4697.   #--------------------------------------------------------------------------
  4698.   # ● 残像本体
  4699.   #--------------------------------------------------------------------------
  4700.   def mirage_body(body, opacity)
  4701.     body.bitmap = self.bitmap.dup
  4702.     body.x = self.x
  4703.     body.y = self.y
  4704.     body.ox = self.ox
  4705.     body.oy = self.oy
  4706.     body.z = self.z - 20
  4707.     body.mirror = self.mirror
  4708.     body.angle = self.angle
  4709.     body.opacity = opacity * self.opacity / 255
  4710.     body.zoom_x = self.zoom_x
  4711.     body.zoom_y = self.zoom_y   
  4712.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4713.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4714.   end   
  4715.   #--------------------------------------------------------------------------
  4716.   # ● 次のアニメを更新
  4717.   #--------------------------------------------------------------------------
  4718.   def update_next_anime
  4719.     return if !@next_anime
  4720.     for anime in @next_anime
  4721.       anime.update
  4722.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  4723.       anime.dispose if !anime.animation?
  4724.       @next_anime.delete(anime) if !anime.animation?
  4725.     end  
  4726.   end
  4727.   #--------------------------------------------------------------------------
  4728.   # ● フレーム更新
  4729.   #--------------------------------------------------------------------------
  4730.   alias update_sprite_battler_n03 update
  4731.   def update
  4732.     @battler.sv.update if @battler
  4733.     update_sprite_battler_n03
  4734.     update_next_anime
  4735.     update_shadow  if @battler && @shadow
  4736.     update_mirage  if @battler
  4737.     update_balloon if @battler
  4738.     update_remove if @battler && @removing && @battler.sv.change_up
  4739.   end
  4740.   #--------------------------------------------------------------------------
  4741.   # ● 戦闘アニメ消去
  4742.   #--------------------------------------------------------------------------
  4743.   def anime_off
  4744.     @battler.sv.anime_off = false
  4745.     dispose_animation
  4746.     for anime in @next_anime do anime.dispose_animation end if @next_anime
  4747.   end
  4748.   #--------------------------------------------------------------------------
  4749.   # ● バトラー入れ替え
  4750.   #--------------------------------------------------------------------------
  4751.   def remove
  4752.     @battler.sv.start_action(@battler.sv.remove_action)
  4753.     $sv_camera.wait = 40
  4754.     @battler.sv.add_action("eval('set_change')")
  4755.     @removing = true
  4756.   end
  4757.   #--------------------------------------------------------------------------
  4758.   # ● バトラー入れ替えの更新
  4759.   #--------------------------------------------------------------------------
  4760.   def update_remove
  4761.     @battler.sv.change_up = false
  4762.     @removing = false
  4763.     @battler = nil
  4764.   end  
  4765.   #--------------------------------------------------------------------------
  4766.   # ● バトラー加入
  4767.   #--------------------------------------------------------------------------
  4768.   def join(join_battler)
  4769.     $sv_camera.wait = 30
  4770.     @battler = join_battler
  4771.     @battler_name = @battler.character_name
  4772.     @battler_index = @battler.character_index
  4773.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  4774.     self.bitmap = Cache.character(@battler_name)
  4775.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  4776.     create_shadow
  4777.     init_visibility
  4778.   end
  4779.   #--------------------------------------------------------------------------
  4780.   # ● 通常の設定に戻す ★再定義
  4781.   #--------------------------------------------------------------------------
  4782.   def revert_to_normal
  4783.     self.blend_type = 0
  4784.     self.opacity = 255
  4785.   end
  4786.   #--------------------------------------------------------------------------
  4787.   # ● 崩壊エフェクトの更新
  4788.   #--------------------------------------------------------------------------
  4789.   alias update_collapse_sprite_battler_n03 update_collapse
  4790.   def update_collapse
  4791.     return if @battler.sv.state(1) != "敵コラプス"
  4792.     update_collapse_sprite_battler_n03
  4793.     @battler.sv.weapon_visible = false
  4794.   end
  4795.   #--------------------------------------------------------------------------
  4796.   # ● ボス崩壊エフェクトの更新 ★再定義
  4797.   #--------------------------------------------------------------------------
  4798.   def update_boss_collapse
  4799.     @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  4800.     alpha = @effect_duration * 120 / @battler.sv.ch
  4801.     self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  4802.     self.blend_type = 1
  4803.     self.color.set(255, 255, 255, 255 - alpha)
  4804.     self.opacity = alpha
  4805.     self.src_rect.y -= 1
  4806.     Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  4807.   end
  4808.   #--------------------------------------------------------------------------
  4809.   # ● 別スプライトからのタイミング処理
  4810.   #--------------------------------------------------------------------------
  4811.   def set_process_timing(timing_data)
  4812.     for data in timing_data
  4813.       set_timing(data[0],data[1])
  4814.     end
  4815.     @battler.sv.timing = []
  4816.   end
  4817.   #--------------------------------------------------------------------------
  4818.   # ● タイミング処理
  4819.   #--------------------------------------------------------------------------
  4820.   def set_timing(se_flag, data)
  4821.     @ani_rate = 4
  4822.     data.se.play if se_flag
  4823.     case data.flash_scope
  4824.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  4825.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  4826.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  4827.     end
  4828.   end
  4829.   #--------------------------------------------------------------------------
  4830.   # ● 色調変更
  4831.   #--------------------------------------------------------------------------
  4832.   def color_set
  4833.     set = @battler.sv.color_set
  4834.     @battler.sv.color_set= []
  4835.     set[4] = 1 if set[4] == 0
  4836.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  4837.     @color_data = @remain_color_data
  4838.     @color_data[4] = set[4]
  4839.     @color_data[5] = set[5]
  4840.     @color_data[6] = set
  4841.   end
  4842.   #--------------------------------------------------------------------------
  4843.   # ● 解放
  4844.   #--------------------------------------------------------------------------
  4845.   alias dispose_sprite_battler_n03 dispose
  4846.   def dispose
  4847.     dispose_sprite_battler_n03
  4848.     @shadow.dispose if @shadow != nil
  4849.     @balloon.dispose if @balloon != nil
  4850.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  4851.     for anime in @next_anime do anime.dispose end if @next_anime
  4852.   end
  4853. end
  4854.  
  4855.  
  4856. #==============================================================================
  4857. # ■ Spriteset_Battle
  4858. #------------------------------------------------------------------------------
  4859. #  バトル画面のスプライトをまとめたクラスです。
  4860. #==============================================================================
  4861. class Spriteset_Battle
  4862.   #--------------------------------------------------------------------------
  4863.   # ● 戦闘背景(床)スプライトの作成 ★再定義
  4864.   #--------------------------------------------------------------------------
  4865.   def create_battleback1
  4866.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  4867.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  4868.     @back1_sprite.z = 0
  4869.   end
  4870.   #--------------------------------------------------------------------------
  4871.   # ● 戦闘背景(壁)スプライトの作成 ★再定義
  4872.   #--------------------------------------------------------------------------
  4873.   def create_battleback2
  4874.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  4875.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  4876.     @back2_sprite.z = 1
  4877.   end
  4878.   #--------------------------------------------------------------------------
  4879.   # ● アクタースプライトの作成 ★再定義
  4880.   #--------------------------------------------------------------------------
  4881.   def create_actors
  4882.     @actor_sprites = []
  4883.     for i in 0...$game_party.max_battle_members
  4884.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  4885.     end
  4886.     @effect_sprites = Spriteset_Sideview.new(@viewport1)
  4887.   end
  4888.   #--------------------------------------------------------------------------
  4889.   # ● アクタースプライトの更新 ★再定義
  4890.   #--------------------------------------------------------------------------
  4891.   def update_actors
  4892.     @actor_sprites.each_with_index do |sprite, i|
  4893.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  4894.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  4895.       sprite.update
  4896.     end
  4897.     @effect_sprites.update
  4898.     update_program
  4899.   end
  4900.   #--------------------------------------------------------------------------
  4901.   # ● メンバーを加える
  4902.   #--------------------------------------------------------------------------
  4903.   def sprite_join(member, sprite)
  4904.     for sp in @actor_sprites
  4905.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  4906.     end
  4907.     sprite.join(member)
  4908.   end
  4909.   #--------------------------------------------------------------------------
  4910.   # ● バトルプログラムの更新
  4911.   #--------------------------------------------------------------------------
  4912.   def update_program
  4913.     return if $sv_camera.program_scroll == []
  4914.     for data in  $sv_camera.program_scroll
  4915.       @back1_sprite.start_back_data(data) if data[2] == 1
  4916.       @back2_sprite.start_back_data(data) if data[2] == 2
  4917.     end
  4918.     $sv_camera.program_scroll = []
  4919.   end
  4920.   #--------------------------------------------------------------------------
  4921.   # ● ヒット時の戦闘アニメ実行
  4922.   #--------------------------------------------------------------------------
  4923.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  4924.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  4925.   end
  4926.   #--------------------------------------------------------------------------
  4927.   # ● ダメージPOP
  4928.   #--------------------------------------------------------------------------
  4929.   def set_damage_pop(target)
  4930.     @effect_sprites.set_damage_pop(target)
  4931.   end
  4932.   #--------------------------------------------------------------------------
  4933.   # ● 解放
  4934.   #--------------------------------------------------------------------------
  4935.   alias dispose_spriteset_battle_n03 dispose
  4936.   def dispose
  4937.     dispose_spriteset_battle_n03
  4938.     @effect_sprites.dispose
  4939.   end
  4940.  
  4941.  
  4942.  
  4943. end
  4944.  
  4945.  
  4946. #==============================================================================
  4947. # ■ Window_BattleLog
  4948. #------------------------------------------------------------------------------
  4949. #  戦闘の進行を実況表示するウィンドウです。
  4950. #==============================================================================
  4951. class Window_BattleLog < Window_Selectable
  4952.   #--------------------------------------------------------------------------
  4953.   # ● ウェイト ★再定義
  4954.   #--------------------------------------------------------------------------
  4955.   def wait
  4956.   end
  4957.   #--------------------------------------------------------------------------
  4958.   # ● ウェイトとクリア ★再定義
  4959.   #--------------------------------------------------------------------------
  4960.   def wait_and_clear
  4961.     $sv_camera.wait = 10
  4962.   end
  4963.   #--------------------------------------------------------------------------
  4964.   # ● 行動結果の表示 ★再定義
  4965.   #--------------------------------------------------------------------------
  4966.   def display_action_results(target, item)
  4967.     if target.result.used
  4968.       last_line_number = line_number
  4969.       display_critical(target, item)
  4970.       display_damage(target, item)
  4971.       display_affected_status(target, item)
  4972.       display_failure(target, item)
  4973.     end
  4974.     off if !N03::BATTLE_LOG
  4975.   end
  4976.   #--------------------------------------------------------------------------
  4977.   # ● ウインドウ非表示
  4978.   #--------------------------------------------------------------------------
  4979.   def off
  4980.     @back_sprite.visible = self.visible = false
  4981.   end
  4982. end
  4983. #==============================================================================
  4984. # ■ Game_Interpreter
  4985. #------------------------------------------------------------------------------
  4986. #  イベントコマンドを実行するインタプリタです。
  4987. #==============================================================================
  4988. class Game_Interpreter
  4989.   #--------------------------------------------------------------------------
  4990.   # ● スイッチの操作
  4991.   #--------------------------------------------------------------------------
  4992.   alias command_121_game_interpreter_n03 command_121
  4993.   def command_121
  4994.     command_121_game_interpreter_n03
  4995.     $sv_camera.program_check
  4996.   end
  4997. end

QQ图片122222.png (10.7 KB, 下载次数: 0)

QQ图片122222.png

Lv6.析梦学徒

老鹰

梦石
40
星屑
34720
在线时间
6739 小时
注册时间
2012-5-26
帖子
3259

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

2
发表于 2020-7-20 22:51:09 | 只看该作者
74到80行改成
  1.   #--------------------------------------------------------------------------
  2.   # ● 释放
  3.   #--------------------------------------------------------------------------
  4.   alias enemy_hp_dispose dispose
  5.   def dispose
  6.     enemy_hp_dispose
  7.     @enemy_hpmp_window.dispose if @enemy_hpmp_window
  8.   end
复制代码

并且确保这个粗糙的敌人血条脚本,放置于 Sideview 之上……

点评

fjm
非常感谢,问题解决了  发表于 2020-7-20 23:20

评分

参与人数 1+1 收起 理由
fjm + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 04:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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