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

Project1

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

[已经过期] Sideview横版系统攻击时间问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
179 小时
注册时间
2012-11-14
帖子
94
跳转到指定楼层
1
发表于 2013-1-7 17:30:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
  1. #==============================================================================
  2. # ■ Sideview
  3. #------------------------------------------------------------------------------
  4. #  サイドビューバトラーを管理するクラスです。
  5. #==============================================================================
  6. class SideView
  7.   #--------------------------------------------------------------------------
  8.   # ● 公開インスタンス変数 
  9.   #--------------------------------------------------------------------------
  10.   attr_accessor   :x                    # 画面X座標
  11.   attr_accessor   :y                    # 画面Y座標
  12.   attr_accessor   :z                    # 画面Z座標
  13.   attr_accessor   :h                    # 高さ座標
  14.   attr_accessor   :j                    # ジャンプ座標
  15.   attr_accessor   :c                    # カーブ座標
  16.   attr_accessor   :ox                   # 横原点
  17.   attr_accessor   :oy                   # 縦原点
  18.   attr_accessor   :oy_adjust            # 縦原点補正
  19.   attr_accessor   :angle                # 回転角度
  20.   attr_accessor   :zoom_x               # 横の拡大率
  21.   attr_accessor   :zoom_y               # 縦の拡大率
  22.   attr_accessor   :pattern_w            # セル横位置(矩形内)
  23.   attr_accessor   :pattern_h            # セル縦位置(矩形内)
  24.   attr_accessor   :sx                   # セル横位置(画像全体)
  25.   attr_accessor   :sy                   # セル縦位置(画像全体)
  26.   attr_accessor   :pattern_type         # セル更新タイプ
  27.   attr_accessor   :pattern_time         # セル更新間隔
  28.   attr_accessor   :graphic_name         # バトラー画像ファイル名
  29.   attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  30.   attr_accessor   :graphic_index        # バトラー画像インデックス
  31.   attr_accessor   :cw                   # セル横矩形
  32.   attr_accessor   :ch                   # セル縦矩形
  33.   attr_accessor   :shadow_visible       # 影表示
  34.   attr_accessor   :weapon_visible       # 武器表示
  35.   
  36.   attr_accessor   :wait                 # 次の動作待ち時間
  37.   attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  38.   attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  39.   attr_accessor   :force_action         # 強制アクション
  40.   attr_accessor   :target_battler       # ターゲットバトラー情報
  41.   attr_accessor   :second_targets       # セカンドターゲット情報
  42.   attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  43.   attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  44.   attr_accessor   :effect_data          # エフェクトデータ
  45.   attr_accessor   :anime_id             # アニメID配列
  46.   attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  47.   attr_accessor   :mirror               # 反転フラグ
  48.   attr_accessor   :opacity              # 透明度
  49.   attr_accessor   :opacity_data         # 透明度操作情報
  50.   attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  51.   attr_accessor   :m_a_data             # アニメ飛ばし情報
  52.   attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  53.   attr_accessor   :action_end           # バトルシーンでの行動終了
  54.   attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  55.   attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  56.   attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  57.   attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  58.   attr_accessor   :derivation_skill_id  # スキル派生ID
  59.   attr_accessor   :immortal             # 不死身フラグ
  60.   attr_accessor   :mirage               # 残像データ
  61.   attr_accessor   :balloon_data         # ふきだしデータ
  62.   attr_accessor   :timing               # 別バトラーからのタイミングデータ
  63.   attr_accessor   :color_set            # 色調変更データ
  64.   attr_accessor   :color                # 色調データ
  65.   attr_accessor   :change_up            # 画像変更フラグ
  66.   attr_accessor   :hit                  # 被攻撃回数
  67.   attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  68.   attr_accessor   :counter_id           # カウンター時のスキルID
  69.   attr_accessor   :reflection_id        # 魔法反射時のアニメID
  70.   attr_accessor   :result_damage        # ターン終了時のHP変動データ
  71.    
  72.   attr_accessor   :base_x               # 初期位置 X座標
  73.   attr_accessor   :base_y               # 初期位置 Y座標
  74.   attr_accessor   :base_h               # 初期位置 高さ座標
  75.   attr_accessor   :max_pattern_w        # セルの横分割数
  76.   attr_accessor   :max_pattern_h        # セルの縦分割数
  77.   
  78.   attr_reader     :collapse             # コラプスフラグ
  79.   attr_reader     :picture              # ピクチャ表示フラグ
  80.   #--------------------------------------------------------------------------
  81.   # ● オブジェクト初期化
  82.   #--------------------------------------------------------------------------
  83.   def initialize(battler)
  84.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  85.     reset
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 初期化
  89.   #--------------------------------------------------------------------------
  90.   def reset
  91.     @x = 0
  92.     @y = 0
  93.     @z = 0
  94.     @h = 0
  95.     @j = 0
  96.     @c = 0
  97.     [url=home.php?mod=space&uid=271873]@jump[/url] = []
  98.     @curve = []
  99.     @ox = 0
  100.     @oy = 0
  101.     @oy_adjust = 0
  102.     @z_plus = 0
  103.     @move_time = 0
  104.     [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  105.     @angle_time = 0
  106.     @zoom_x = 1
  107.     @zoom_y = 1
  108.     @zoom_time = 0
  109.     @pattern_w = 0
  110.     @pattern_h = 0
  111.     @sx = 0
  112.     @sy = 0
  113.     @pattern_type = 0
  114.     @pattern_time = 0
  115.     @pattern_rest_time = 0
  116.     @graphic_name = ""
  117.     @graphic_file_index = ""
  118.     @graphic_index = 0
  119.     @cw = 0
  120.     @ch = 0
  121.     @shadow_visible = false
  122.     @weapon_visible = true
  123.    
  124.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  125.     @weapon_index = []
  126.     @weapon_end = true
  127.     @full_action = []
  128.     @action = []
  129.     @force_action = ""
  130.     @target_battler = []
  131.     @second_targets = []
  132.     @individual_targets = []
  133.     @m_a_targets = []
  134.     @effect_data = []
  135.     @anime_id = []
  136.     @anime_move_id = []
  137.     [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
  138.     @opacity_data = []
  139.     @set_damage = false
  140.     @m_a_data = []
  141.     @m_a_starter = []
  142.     @action_end = false
  143.     @damage_anime_data = []
  144.     @anime_no_mirror = false
  145.     @anime_horming = false
  146.     @anime_camera_zoom = false
  147.     @derivation_skill_id = 0
  148.     @immortal = false
  149.     @mirage = []
  150.     @play_data = []
  151.     @balloon_data = []
  152.     @picture = false
  153.     @timing = []
  154.     @color_set = []
  155.     [url=home.php?mod=space&uid=10453]@color[/url] = []
  156.     @change_up = false
  157.     @non_motion = false
  158.     @graphics_change = false
  159.     @hit = 0
  160.     @add_state = []
  161.     @collapse = false
  162.     @counter_id = 0
  163.     @reflection_id = 0
  164.     @result_damage = [0,0]
  165.    
  166.     @base_x = 0
  167.     @base_y = 0
  168.     @base_z = 0
  169.     @base_h = 0
  170.     @max_pattern_w = 0
  171.     @max_pattern_h = 0
  172.     @pattern_kind = 0
  173.     @pattern_count = 0
  174.     @move_time = 0
  175.     [url=home.php?mod=space&uid=111303]@mirror[/url] = false
  176.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  177.     @pre_change_data = nil
  178.   end  
  179.   #--------------------------------------------------------------------------
  180.   # ● セットアップ
  181.   #--------------------------------------------------------------------------
  182.   def setup(bitmap_width, bitmap_height, first_action_flug)
  183.     reset if first_action_flug
  184.     set_data
  185.     set_base_position if !@graphics_change
  186.     set_graphics(bitmap_width, bitmap_height)
  187.     set_target
  188.     setup_graphics_change if @graphics_change
  189.     start_action(first_action) if first_action_flug && @battler.movable?
  190.     stand_by_action            if first_action_flug && [email protected]?
  191.   end  
  192.   #--------------------------------------------------------------------------
  193.   # ● 画像変更用のセットアップ
  194.   #--------------------------------------------------------------------------
  195.   def setup_graphics_change
  196.     @graphics_change = false
  197.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  198.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  199.   end  
  200.   #--------------------------------------------------------------------------
  201.   # ● バトラーデータ取得
  202.   #--------------------------------------------------------------------------
  203.   def set_data
  204.     return if @battler == nil
  205.     if @battler.actor?
  206.       @graphic_name = @battler.character_name
  207.       @graphic_index = @battler.character_index
  208.     else
  209.       @graphic_name = @battler.battler_name
  210.       @graphic_index = 0
  211.     end
  212.     @max_pattern_w = max_pattern[0]
  213.     @max_pattern_h = max_pattern[1]
  214.   end
  215.   #--------------------------------------------------------------------------
  216.   # ● グラフィックデータ取得
  217.   #--------------------------------------------------------------------------
  218.   def set_graphics(bitmap_width, bitmap_height)
  219.     sign = @graphic_name[/^[\!\$]./]
  220.     if sign && sign.include?('$')
  221.       @cw = bitmap_width / @max_pattern_w
  222.       @ch = bitmap_height / @max_pattern_h
  223.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  224.       @cw = bitmap_width
  225.       @ch = bitmap_height
  226.     else
  227.       @cw = bitmap_width / (@max_pattern_w * 4)
  228.       @ch = bitmap_height / (@max_pattern_h * 2)
  229.     end
  230.     @ox = @cw / 2
  231.     @oy = @ch
  232.   end
  233.   #--------------------------------------------------------------------------
  234.   # ● ベース座標をセット data = [X軸, Y軸, H軸]  moment_set…瞬間配置
  235.   #--------------------------------------------------------------------------
  236.   def set_base_position(moment_set = true)
  237.     mirroring_reset
  238.     if @battler.actor?
  239.       data = N03::ACTOR_POSITION[@battler.index].dup
  240.       @base_x = data[0] * 100 if !@mirror
  241.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  242.     else
  243.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  244.       @base_x = data[0] * 100 if !$sv_camera.mirror
  245.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  246.     end
  247.     @base_y = data[1] * 100
  248.     @base_h = data[2] * 100
  249.     @base_z = @y
  250.     return if !moment_set
  251.     @x = @base_x
  252.     @y = @base_y
  253.     @z = @base_z
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● ターゲットをセット
  257.   #--------------------------------------------------------------------------
  258.   def set_target(target = nil)
  259.     @target_battler = target
  260.     @target_battler = [@battler] if target == nil
  261.     @second_targets = @target_battler.dup
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● アクション開始
  265.   #--------------------------------------------------------------------------
  266.   def start_action(kind = nil)
  267.     # ウェイト中の場合キャンセル
  268.     return @wait -= 1 if @wait > 0 && kind == nil
  269.     action_setup if kind != nil
  270.     set_action(kind)
  271.     @action = kind if @action == nil
  272.     # 行動配列が無い場合は行動終了処理へ移行
  273.     action_terminate if @action == nil
  274.     # 次のアクション決定
  275.     @action_data = N03::ACTION[@action]
  276.     next_action
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 行動パラメータの初期化
  280.   #--------------------------------------------------------------------------
  281.   def action_setup
  282.     @set_damage = false
  283.     @action_end = false
  284.     @balloon_data = []
  285.     @loop_act = []
  286.     angle_reset
  287.     zoom_reset
  288.     opacity_reset
  289.     @curve = []
  290.     @c = 0
  291.     convert_jump
  292.   end  
  293.   #--------------------------------------------------------------------------
  294.   # ● 行動終了処理
  295.   #--------------------------------------------------------------------------
  296.   def action_terminate
  297.     @mirage = [] if @mirage_end
  298.     mirroring_reset
  299.     @picture = false
  300.     # 待機アクションへ移行
  301.     stand_by_action if !@non_motion
  302.     # 戦闘行動のアクティブ権を終了
  303.     next_battler
  304.   end  
  305.   #--------------------------------------------------------------------------
  306.   # ● 新しいアクション内容の決定
  307.   #--------------------------------------------------------------------------
  308.   def set_action(kind = nil)
  309.     full_act = N03::FULLACTION[kind]
  310.     @full_action = full_act.dup if full_act != nil
  311.     @action = @full_action.shift
  312.     # 参照したアクションがフルアクションであれば全体のアクションを統合
  313.     full_act2 = N03::FULLACTION[@action]
  314.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  315.   end
  316.   #--------------------------------------------------------------------------
  317.   # ● 次のアクションへ
  318.   #--------------------------------------------------------------------------
  319.   def next_action
  320.     @wait = 0
  321.     # ショートカット確認
  322.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  323.     # ウエイト設定
  324.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  325.     @wait = rand(@wait.abs + 1) if @wait < 0
  326.     # アクション開始
  327.     action_play
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● 待機アクションへ移行
  331.   #--------------------------------------------------------------------------
  332.   def stand_by_action
  333.     # 通常待機に
  334.     stand_by_act = normal
  335.     # HPが1/4でピンチアクションに
  336.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  337.     # ステートチェック
  338.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  339.     set_action(stand_by_act)
  340.     @action = stand_by_act if @action == nil
  341.   end
  342.   #--------------------------------------------------------------------------
  343.   # ● 強制アクション開始
  344.   #--------------------------------------------------------------------------
  345.   def start_force_action
  346.     @full_action= []
  347.     start_action(@force_action)
  348.     @force_action = ""
  349.   end  
  350.   #--------------------------------------------------------------------------
  351.   # ● 複数のアクションを繋げて開始
  352.   #--------------------------------------------------------------------------
  353.   def start_plural_action(kinds)
  354.     full_act = []
  355.     for kind in kinds
  356.       act = N03::FULLACTION[kind]
  357.       act = [kind] if act == nil
  358.       full_act += act
  359.     end
  360.     @full_action = full_act.dup
  361.     @action = @full_action.shift
  362.     full_act = N03::FULLACTION[@action]
  363.     @full_action = full_act.dup + @full_action if full_act != nil
  364.     @action_data = N03::ACTION[@action]
  365.     next_action
  366.   end  
  367.   #--------------------------------------------------------------------------
  368.   # ● アクション追加
  369.   #--------------------------------------------------------------------------
  370.   def add_action(kind)
  371.     @full_action.push(kind)
  372.   end  
  373.   #--------------------------------------------------------------------------
  374.   # ● フレーム更新
  375.   #--------------------------------------------------------------------------
  376.   def update
  377.     # アクション開始
  378.     start_action
  379.     # 強制アクション開始
  380.     start_force_action if @force_action != ""
  381.     # アニメパターン更新
  382.     update_pattern
  383.     # 移動更新
  384.     update_move
  385.     # 回転更新
  386.     update_angle if @angle_time != 0
  387.     # 拡大縮小更新
  388.     update_zoom if @zoom_time != 0
  389.     # 透明度更新
  390.     update_opacity if @opacity_data != []
  391.   end
  392.   #--------------------------------------------------------------------------
  393.   # ● アニメパターン更新
  394.   #--------------------------------------------------------------------------
  395.   def update_pattern
  396.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  397.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  398.     @pattern_rest_time = @pattern_time
  399.     # 再生開始・終了セル位置を取得
  400.     if @pattern_kind > 0 # 通常再生中
  401.       @pattern_start = 0
  402.       @pattern_end = @max_pattern_w - 1
  403.     elsif @pattern_kind < 0 # 逆転再生中
  404.       @pattern_start = @max_pattern_w - 1
  405.       @pattern_end = 0
  406.     end
  407.     # 片道の再生が終了
  408.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  409.     # ループ処理
  410.     case @pattern_type.abs
  411.     when  1,3 # 片道
  412.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  413.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  414.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  415.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  416.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  417.       @pattern_count = 0
  418.     when  2,4 # 往復
  419.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  420.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  421.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  422.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  423.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  424.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  425.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  426.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  427.       @pattern_count = 0 if @pattern_count == 2
  428.     end
  429.     # セル更新
  430.     @pattern_w += 1 * @pattern_kind
  431.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  432.   end
  433.   #--------------------------------------------------------------------------
  434.   # ● 移動の更新
  435.   #--------------------------------------------------------------------------
  436.   def update_move
  437.     @z = @y + @z_plus
  438.     return if @move_time == 0
  439.     target_position_set if @horming_move
  440.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  441.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  442.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  443.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  444.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  445.     @move_time -= 1
  446.     convert_jump if @move_time == 0
  447.   end
  448.   #--------------------------------------------------------------------------
  449.   # ● 移動目標の更新
  450.   #--------------------------------------------------------------------------
  451.   def target_position_set
  452.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  453.     @target_x = target_position[0] + @move_x
  454.     @target_y = target_position[1] + @move_y
  455.     @target_h = target_position[2] + @move_h if @move_h != nil
  456.   end  
  457.   #--------------------------------------------------------------------------
  458.   # ● 回転更新
  459.   #--------------------------------------------------------------------------
  460.   def update_angle
  461.     @angle += @angling
  462.     @angle_time -= 1
  463.     return if @angle_time != 0
  464.     return angle_reset if @angle_data[4] == 0
  465.     angling(@angle_data) if @angle_data[4] == 2
  466.   end  
  467.   #--------------------------------------------------------------------------
  468.   # ● 拡大縮小更新
  469.   #--------------------------------------------------------------------------
  470.   def update_zoom
  471.     @zoom_x += @zooming_x
  472.     @zoom_y += @zooming_y
  473.     @zoom_time -= 1
  474.     return if @zoom_time != 0
  475.     return zoom_reset if @zoom_data[4] == 0
  476.     zooming(@zoom_data) if @zoom_data[4] == 2
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # ● 透明度更新
  480.   #--------------------------------------------------------------------------
  481.   def update_opacity
  482.     @opacity += @opacity_data[2]
  483.     @opacity_data[0] -= 1
  484.     return if @opacity_data[0] != 0
  485.     return opacity_reset if !@opacity_data[5]
  486.     @opacity_data[2] *= -1
  487.     @opacity_data[0] = @opacity_data[1]
  488.   end
  489.   #--------------------------------------------------------------------------
  490.   # ● アクション実行
  491.   #--------------------------------------------------------------------------
  492.   def action_play
  493.     return if @action_data == nil
  494.     action = @action_data[0]
  495.     # バトラー反転の場合
  496.     return mirroring                    if action == "mirror"
  497.     # 残像の場合
  498.     return mirage_set                   if action == "mirage"
  499.     # 回転の場合  
  500.     return angling                      if action == "angle"
  501.     # 拡大縮小の場合  
  502.     return zooming                      if action == "zoom"
  503.     # 透明度操作の場合  
  504.     return set_opacity                  if action == "opacity"
  505.     # バトラーアニメの場合
  506.     return battler_anime                if action == "motion"
  507.     # 移動の場合
  508.     return move                         if action == "move"
  509.     # 武器アニメの場合
  510.     return weapon_anime([@action_data]) if action == "wp"
  511.     # アニメ飛ばしの場合
  512.     return move_anime                   if action == "m_a"
  513.     # 戦闘シーン通信の場合(コラプス)
  514.     return set_play_data                if action == "collapse" or action == "no_collapse"
  515.     # データベース戦闘アニメ表示の場合  
  516.     return battle_anime                 if action == "anime"
  517.     # カメラワークの場合
  518.     return camera                       if action == "camera"
  519.     # 画面のシェイクの場合
  520.     return shake                        if action == "shake"
  521.     # 画面色調変更の場合
  522.     return color_effect                 if action == "color"
  523.     # ふきだしアニメ表示の場合  
  524.     return balloon_anime                if action == "balloon"
  525.     # ピクチャ表示の場合
  526.     return picture_set                  if action == "pic"
  527.     # ステート操作の場合
  528.     return state_set                    if action == "sta"
  529.     # FPS変更の場合
  530.     return fps                          if action == "fps"
  531.     # バトラー画像変更の場合  
  532.     return graphics_change              if action == "change"
  533.     # スキル派生の場合  
  534.     return derivating_skill             if action == "der"
  535.     # BGM/BGS/SE演奏の場合  
  536.     return sound                        if action == "sound"
  537.     # ムービー再生の場合  
  538.     return movie                        if action == "movie"
  539.     # ゲームスイッチ操作の場合  
  540.     return switches                     if action == "switch"
  541.     # ゲーム変数操作の場合  
  542.     return variable                     if action == "variable"
  543.     # 条件分岐(ゲームスイッチ)の場合
  544.     return nece_1                       if action == "n_1"
  545.     # 条件分岐(ゲーム変数)の場合
  546.     return nece_2                       if action == "n_2"
  547.     # 条件分岐(ステート)の場合
  548.     return nece_3                       if action == "n_3"
  549.     # 条件分岐(スキル)の場合
  550.     return nece_4                       if action == "n_4"
  551.     # 条件分岐(パラメータ)の場合
  552.     return nece_5                       if action == "n_5"
  553.     # 条件分岐(装備)の場合
  554.     return nece_6                       if action == "n_6"
  555.     # 条件分岐(スクリプト)の場合
  556.     return nece_7                       if action == "n_7"
  557.     # セカンドターゲット操作の場合  
  558.     return second_targets_set           if action == "s_t"
  559.     # ダメージアニメの場合  
  560.     return damage_anime                 if action == "damage_anime"
  561.     # 武器消去の場合  
  562.     return @weapon_visible = false      if action == "weapon_off"
  563.     # 武器消去解除の場合  
  564.     return @weapon_visible = true       if action == "weapon_on"
  565.     # 待機キャンセルの場合
  566.     return @non_motion = true           if action == "non_motion"
  567.     # 待機キャンセル解除の場合
  568.     return @non_motion = false          if action == "non_motion_cancel"
  569.     # 初期位置変更の場合
  570.     return change_base_position         if action == "change_base_position"
  571.     # 初期位置変更解除の場合
  572.     return set_base_position(false)     if action == "set_base_position"
  573.     # 強制アクションの場合  
  574.     return force_act                    if action == "force_action"
  575.     # 強制アクションの場合 (セカンドターゲット)
  576.     return force_act2                   if action == "force_action2"
  577.     # 個別開始の場合
  578.     return individual_start             if action == "individual_start"
  579.     # 個別終了の場合
  580.     return individual_end               if action == "individual_end"
  581.     # ループ開始の場合
  582.     return loop_start                   if action == "loop_start"
  583.     # ループ終了の場合
  584.     return loop_end                     if action == "loop_end"
  585.     # 自分のみ更新の場合
  586.     return only_action_on               if action == "only_action_on"
  587.     # 自分のみ更新解除の場合
  588.     return only_action_off              if action == "only_action_off"
  589.     # 次の行動者へ移行の場合
  590.     return next_battler                 if action == "next_battler"
  591.     # 画像変更フラグの場合
  592.     return set_change                   if action == "set_change"
  593.     # スクリプト操作の場合   
  594.     return eval(@action_data[0])
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ● バトラー反転実行
  598.   #--------------------------------------------------------------------------
  599.   def mirroring
  600.     @mirror = !@mirror
  601.   end  
  602.   #--------------------------------------------------------------------------
  603.   # ● 反転初期化
  604.   #--------------------------------------------------------------------------
  605.   def mirroring_reset
  606.     @mirror = false
  607.     mirroring if [email protected]? && N03::ENEMY_MIRROR
  608.     mirroring if $sv_camera.mirror
  609.   end  
  610.   #--------------------------------------------------------------------------
  611.   # ● 残像実行
  612.   #--------------------------------------------------------------------------
  613.   def mirage_set
  614.     @mirage = @action_data.dup
  615.     @mirage_end = @mirage[3]
  616.     @mirage = [] if @mirage[1] == 0
  617.   end  
  618.   #--------------------------------------------------------------------------
  619.   # ● 回転実行
  620.   #--------------------------------------------------------------------------
  621.   def angling(data = @action_data)
  622.     @angle_data = data.dup
  623.     @oy = @ch / 2
  624.     @oy_adjust = @ch * 50
  625.     @angle_time = data[1]
  626.     start_angle = data[2] * N03.mirror_num(@mirror)
  627.     end_angle = data[3] * N03.mirror_num(@mirror)
  628.     # 時間が0以下なら即座に最終角度へ
  629.     @angle_time = 1 if @angle_time <= 0
  630.     # 回転時間から1フレームあたりの角度を出す
  631.     @angling = (end_angle - start_angle) / @angle_time
  632.     # 割り切れない余りを初期角度に
  633.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  634.   end
  635.   #--------------------------------------------------------------------------
  636.   # ● 回転初期化
  637.   #--------------------------------------------------------------------------
  638.   def angle_reset
  639.     @oy = @ch
  640.     @angle = @angle_time = @oy_adjust = 0
  641.   end  
  642.   #--------------------------------------------------------------------------
  643.   # ● 拡大縮小実行
  644.   #--------------------------------------------------------------------------
  645.   def zooming(data = @action_data)
  646.     @zoom_data = data.dup
  647.     @zoom_time = data[1]
  648.     start_zoom_x = data[2][0]
  649.     start_zoom_y = data[2][1]
  650.     end_zoom_x = data[3][0]
  651.     end_zoom_y = data[3][1]
  652.     # 時間が0以下なら即座に最終サイズへ
  653.     @zoom_time = 1 if @zoom_time <= 0
  654.     # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  655.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  656.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  657.     # 開始サイズに
  658.     @zoom_x = start_zoom_x
  659.     @zoom_y = start_zoom_y
  660.   end  
  661.   #--------------------------------------------------------------------------
  662.   # ● 拡大縮小初期化
  663.   #--------------------------------------------------------------------------
  664.   def zoom_reset
  665.     @zoom_x = @zoom_y = 1
  666.     @zoom_time = 0
  667.   end  
  668.   #--------------------------------------------------------------------------
  669.   # ● バトラー透明度操作
  670.   #--------------------------------------------------------------------------
  671.   def set_opacity
  672.     data = @action_data.dup
  673.     @opacity = data[2]
  674.     opacity_move = (data[3] - data[2])/ data[1]
  675.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  676.     @wait = data[1] if data[7]
  677.     @wait *= 2 if data[6] && data[7]
  678.   end
  679.   #--------------------------------------------------------------------------
  680.   # ● 透明度操作初期化
  681.   #--------------------------------------------------------------------------
  682.   def opacity_reset
  683.     @opacity = 255
  684.     @opacity_data = []
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● バトラーアニメ実行
  688.   #--------------------------------------------------------------------------
  689.   def battler_anime(anime_data = nil)
  690.     anime_data = @action_data.dup if anime_data == nil
  691.     @graphic_file_index = anime_data[1]
  692.     @pattern_h = anime_data[2]
  693.     @pattern_w = anime_data[3]
  694.     @pattern_h = 0 if @max_pattern_w == 1
  695.     @pattern_w = 0 if @max_pattern_h == 1
  696.     @pattern_type = anime_data[4]
  697.     @pattern_time = anime_data[5]
  698.     @pattern_rest_time = anime_data[5]
  699.     @pattern_count = 0
  700.     @pattern_kind = 1
  701.     @pattern_kind = -1 if @pattern_type < 0
  702.     @pattern_kind = 0 if @pattern_type == 0
  703.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  704.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  705.     @z_plus = anime_data[6]
  706.     @wait = set_anime_wait if anime_data[7]
  707.     @shadow_visible = anime_data[8]
  708.     weapon_anime(anime_data)
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● アニメウエイト計算
  712.   #--------------------------------------------------------------------------
  713.   def set_anime_wait
  714.     if @pattern_type > 0
  715.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  716.     elsif @pattern_type < 0
  717.       pattern_time_a = @pattern_w.abs + 1
  718.     else
  719.       return @pattern_time if @pattern_type == 0
  720.     end
  721.     case @pattern_type
  722.     when 1,-1, 3,-3
  723.       return pattern_time_a * @pattern_time
  724.     when 2,-2, 4,-4
  725.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  726.     end
  727.   end  
  728.   #--------------------------------------------------------------------------
  729.   # ● 移動実行
  730.   #--------------------------------------------------------------------------
  731.   def move
  732.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  733.     return if @move_targets == []
  734.     @move_targets = [@battler] if @action_data[1].abs == 7
  735.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  736.     @move_y = @action_data[3] * 100
  737.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  738.     @move_h = nil if @action_data[4] == nil
  739.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  740.     @horming_move = true
  741.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  742.     target_position_set
  743.     target_position = [@target_x, @target_y, @target_z]
  744.     distanse_move = @action_data[5] > 0
  745.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  746.     @wait = @move_time
  747.     curve
  748.     jump
  749.     @move_time = 1 if @move_time == 0
  750.     @horming_move = false if @move_targets.include?(@battler)
  751.     update_move if @move_time == 1
  752.   end  
  753.   #--------------------------------------------------------------------------
  754.   # ● カーブ実行
  755.   #--------------------------------------------------------------------------
  756.   def curve
  757.     @c = 0
  758.     return if @action_data[6] == 0
  759.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  760.   end  
  761.   #--------------------------------------------------------------------------
  762.   # ● ジャンプ実行
  763.   #--------------------------------------------------------------------------
  764.   def jump
  765.     convert_jump
  766.     return if @action_data[7] == [0,0]
  767.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  768.   end  
  769.   #--------------------------------------------------------------------------
  770.   # ● J座標(ジャンプ高度)をH座標に変換
  771.   #--------------------------------------------------------------------------
  772.   def convert_jump
  773.     @h += @j
  774.     @j = 0
  775.     @jump = []
  776.   end  
  777.   #--------------------------------------------------------------------------
  778.   # ● データベース戦闘アニメ実行
  779.   #--------------------------------------------------------------------------
  780.   def battle_anime
  781.     data = @action_data.dup
  782.     targets = N03.get_targets(data[2], @battler)
  783.     return if targets == []
  784.     data[8] = !data[8] if @mirror
  785.     @set_damage           = data[5]
  786.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  787.     @damage_anime_data[1] = data[8]
  788.     @damage_anime_data[2] = data[7]
  789.     @damage_anime_data[3] = data[6]
  790.     @wait = N03.get_anime_time(@damage_anime_data[0]) + 110 if data[4]
  791.     return if @set_damage
  792.     for target in targets do display_anime(target, data) end
  793.   end
  794.   #--------------------------------------------------------------------------
  795.   # ● 武器アニメ開始
  796.   #--------------------------------------------------------------------------
  797.   def weapon_anime(anime_data)
  798.     @weapon_end = true
  799.     for i in 9...anime_data.size
  800.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  801.     end
  802.   end
  803.   #--------------------------------------------------------------------------
  804.   # ● アニメ飛ばし開始
  805.   #--------------------------------------------------------------------------
  806.   def move_anime
  807.     @m_a_starter = []
  808.     @m_a_targets = []
  809.     starters = N03.get_targets(@action_data[2], @battler)
  810.     targets = N03.get_targets(@action_data[3], @battler)
  811.     return if starters == [] or targets == []
  812.     single_start = true if starters != nil && @action_data[2] < 0
  813.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  814.     starters = [starters[0]] if single_start
  815.     single_end = true if targets != nil && @action_data[3] < 0
  816.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  817.     targets = [targets[0]] if single_end
  818.     se_flug = true
  819.     for starter in starters
  820.       for target in targets
  821.         data = @action_data.dup
  822.         data[17] = se_flug
  823.         @effect_data.push(data)
  824.         @m_a_targets.push(target)
  825.         @m_a_starter.push(starter)
  826.         se_flug = false
  827.       end
  828.     end  
  829.   end
  830.   #--------------------------------------------------------------------------
  831.   # ● スプライトセット通信
  832.   #--------------------------------------------------------------------------
  833.   def set_effect_data(data = @action)
  834.     action_data = N03::ACTION[data]
  835.     return if action_data == nil
  836.     @effect_data.push(action_data.dup)
  837.   end
  838.   #--------------------------------------------------------------------------
  839.   # ● 戦闘シーン通信のデータを格納
  840.   #--------------------------------------------------------------------------
  841.   def set_play_data(data = @action_data)
  842.     @play_data = data.dup
  843.   end
  844.   #--------------------------------------------------------------------------
  845.   # ● 戦闘アニメの表示
  846.   #--------------------------------------------------------------------------
  847.   def display_anime(battler, data)
  848.     battler.animation_id         = data[1]
  849.     battler.animation_mirror     = data[8]
  850.     battler.sv.anime_horming     = data[3]
  851.     battler.sv.anime_camera_zoom = data[6]
  852.     battler.sv.anime_no_mirror   = data[7]
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● 戦闘アニメ拡張データの初期化
  856.   #--------------------------------------------------------------------------
  857.   def reset_anime_data
  858.     @anime_no_mirror = false
  859.     @anime_horming = false
  860.     @anime_camera_zoom = false
  861.   end  
  862.   #--------------------------------------------------------------------------
  863.   # ● カメラワーク
  864.   #--------------------------------------------------------------------------
  865.   def camera
  866.     data = @action_data.dup
  867.     N03.camera(@battler, data)
  868.     @wait = data[4] if data[5]
  869.   end  
  870.   #--------------------------------------------------------------------------
  871.   # ● 画面のシェイク
  872.   #--------------------------------------------------------------------------
  873.   def shake
  874.     data = @action_data.dup
  875.     $sv_camera.shake(data[1], data[2], data[3])
  876.     @wait = data[3] if data[4]
  877.   end
  878.   #--------------------------------------------------------------------------
  879.   # ● 画面色調変更
  880.   #--------------------------------------------------------------------------
  881.   def color_effect
  882.     case @action_data[1]
  883.     when 0,1,2,3,4,5
  884.       targets = N03.get_targets(@action_data[1], @battler)
  885.     when 6
  886.       screen = true
  887.     when 7
  888.       targets = [@battler] + @target_battler
  889.     when 8
  890.       screen = true
  891.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  892.     when 9
  893.       screen = true
  894.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  895.     when 10
  896.       screen = true
  897.       targets = $game_troop.members + $game_party.battle_members
  898.     end
  899.     return if screen == nil && targets == []
  900.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  901.     @wait = @action_data[2][4] if @action_data[3]
  902.     return if !screen
  903.     $sv_camera.color_set[1] = @action_data[2]
  904.     $sv_camera.color_set[2] = @action_data[2]
  905.   end  
  906.   #--------------------------------------------------------------------------
  907.   # ● ふきだしアニメ表示
  908.   #--------------------------------------------------------------------------
  909.   def balloon_anime
  910.     @balloon_data = @action_data.dup
  911.   end  
  912.   #--------------------------------------------------------------------------
  913.   # ● ピクチャ表示
  914.   #--------------------------------------------------------------------------
  915.   def picture_set
  916.     @picture = true
  917.     set_effect_data
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # ● ステート操作
  921.   #--------------------------------------------------------------------------
  922.   def state_set
  923.     targets = N03.get_targets(@action_data[1], @battler)
  924.     return if targets == []
  925.     case @action_data[2]
  926.     when 1 ; targets = [targets[rand(targets.size)]]
  927.     when 2 ; targets -= @battler if targets.include?(@battler)
  928.     end
  929.     for target in targets
  930.       target.add_state(@action_data[4]) if @action_data[3] == "+"
  931.       target.remove_state(@action_data[4]) if @action_data[3] == "-"
  932.     end
  933.   end
  934.   #--------------------------------------------------------------------------
  935.   # ● FPS変更
  936.   #--------------------------------------------------------------------------
  937.   def fps
  938.     Graphics.frame_rate = @action_data[1]
  939.     start_action
  940.   end
  941.   #--------------------------------------------------------------------------
  942.   # ● バトラー画像変更の場合
  943.   #--------------------------------------------------------------------------
  944.   def graphics_change
  945.     @graphics_change = true
  946.     return @battler.graphics_change(@action_data[3]) if [email protected]?
  947.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if !@action_data[1]
  948.     if @action_data[4] == []
  949.       face_name = @battler.face_name
  950.       face_index = @battler.face_index
  951.     else
  952.       face_name = @action_data[4][1]
  953.       face_index = @action_data[4][0]
  954.     end
  955.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  956.   end
  957.   #--------------------------------------------------------------------------
  958.   # ● スキル派生
  959.   #--------------------------------------------------------------------------
  960.   def derivating_skill
  961.     # 未修得スキルは派生不可なら
  962.     return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
  963.     # コスト不足は派生不可なら
  964.     return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
  965.     # 派生
  966.     @derivation_skill_id = @action_data[3]
  967.     # 以降のアクションをキャンセル
  968.     @full_action = []
  969.   end
  970.   #--------------------------------------------------------------------------
  971.   # ● BGM/BGS/SE演奏
  972.   #--------------------------------------------------------------------------
  973.   def sound
  974.     pitch = @action_data[2]
  975.     vol   = @action_data[3]
  976.     name  = @action_data[4]
  977.     case @action_data[1]
  978.     when "se"
  979.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  980.     when "bgm"
  981.       # 名前指定のない場合、現在のBGMを変えないように
  982.       name = RPG::BGM.last.name if @action_data[4] == ""
  983.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  984.     when "bgs"
  985.       name = RPG::BGS.last.name if @action_data[4] == ""
  986.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  987.     end
  988.   end
  989.   #--------------------------------------------------------------------------
  990.   # ● ムービーの再生
  991.   #--------------------------------------------------------------------------
  992.   def movie
  993.     Graphics.play_movie('Movies/' + @action_data[1])
  994.   end
  995.   #--------------------------------------------------------------------------
  996.   # ● ゲームスイッチ操作
  997.   #--------------------------------------------------------------------------
  998.   def switches
  999.     $game_switches[@action_data[1]] = @action_data[2] if @action_data[1] > 0
  1000.     $sv_camera.switches[@action_data[1].abs] = @action_data[2] if @action_data[1] < 0
  1001.     $sv_camera.program_check
  1002.   end
  1003.   #--------------------------------------------------------------------------
  1004.   # ● ゲーム変数操作
  1005.   #--------------------------------------------------------------------------
  1006.   def variable
  1007.     # オペランドチェック
  1008.     operand = @active_action[3]
  1009.     operand = $game_variables[@active_action[3].abs] if @active_action[3] < 0
  1010.     # 変数操作で分岐
  1011.     case @active_action[2]
  1012.     when 0 ; $game_variables[@active_action[1]] = operand  # 代入
  1013.     when 1 ; $game_variables[@active_action[1]] += operand # 加算
  1014.     when 2 ; $game_variables[@active_action[1]] -= operand # 減算
  1015.     when 3 ; $game_variables[@active_action[1]] *= operand # 乗算
  1016.     when 4 ; $game_variables[@active_action[1]] /= operand # 除算
  1017.     when 5 ; $game_variables[@active_action[1]] %= operand # 剰余
  1018.     end
  1019.   end  
  1020.   #--------------------------------------------------------------------------
  1021.   # ● 条件分岐 (ゲームスイッチ)
  1022.   #--------------------------------------------------------------------------
  1023.   def nece_1
  1024.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  1025.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  1026.     action_diverging(judgment, @action_data[3])
  1027.   end  
  1028.   #--------------------------------------------------------------------------
  1029.   # ● 条件分岐 (ゲーム変数)
  1030.   #--------------------------------------------------------------------------
  1031.   def nece_2
  1032.     variable = $game_variables[@action_data[1]]
  1033.     num = @action_data[2]
  1034.     num = $game_variables[@action_data[2].abs] if num < 0
  1035.     case @action_data[3]
  1036.     when 0 ; judgment = variable == num
  1037.     when 1 ; judgment = variable < num
  1038.     when 2 ; judgment = variable > num
  1039.     end  
  1040.     action_diverging(judgment, @action_data[4])
  1041.   end  
  1042.   #--------------------------------------------------------------------------
  1043.   # ● 条件分岐 (ステート)
  1044.   #--------------------------------------------------------------------------
  1045.   def nece_3
  1046.     targets = N03.get_targets(@action_data[1], @battler)
  1047.     return if targets == []
  1048.     member_num = @action_data[4]
  1049.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1050.     hit_count = 0
  1051.     miss_count = 0
  1052.     for target in targets
  1053.       hit_count += 1 if target.state?(@action_data[2])
  1054.       miss_count += 1 if !target.state?(@action_data[2])
  1055.     end
  1056.     case @action_data[3]
  1057.     when 0 ; judgment = hit_count >= member_num
  1058.     when 1 ; judgment = miss_count >= member_num
  1059.     end
  1060.     action_diverging(judgment, @action_data[5])
  1061.   end  
  1062.   #--------------------------------------------------------------------------
  1063.   # ● 条件分岐 (スキル)
  1064.   #--------------------------------------------------------------------------
  1065.   def nece_4
  1066.     targets = N03.get_targets(@action_data[1], @battler)
  1067.     return if targets == []
  1068.     member_num = @action_data[4]
  1069.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1070.     hit_count = 0
  1071.     miss_count = 0
  1072.     for target in targets
  1073.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  1074.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  1075.     end
  1076.     case @action_data[3]
  1077.     when 0 ; judgment = hit_count >= member_num
  1078.     when 1 ; judgment = miss_count >= member_num
  1079.     end
  1080.     action_diverging(judgment, @action_data[5])
  1081.   end  
  1082.   #--------------------------------------------------------------------------
  1083.   # ● 条件分岐 (パラメータ)
  1084.   #--------------------------------------------------------------------------
  1085.   def nece_5
  1086.     targets = N03.get_targets(@action_data[1], @battler)
  1087.     return if targets == []
  1088.     member_num = @action_data[5]
  1089.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1090.     hit_count = 0
  1091.     for target in targets
  1092.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  1093.     end
  1094.     judgment = hit_count >= member_num
  1095.     action_diverging(judgment, @action_data[6])
  1096.   end  
  1097.   #--------------------------------------------------------------------------
  1098.   # ● 条件分岐 (装備)
  1099.   #--------------------------------------------------------------------------
  1100.   def nece_6
  1101.     targets = N03.get_targets(@action_data[1], @battler)
  1102.     return if targets == []
  1103.     member_num = @action_data[5]
  1104.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1105.     hit_count = 0
  1106.     miss_count = 0
  1107.     for target in targets
  1108.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  1109.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  1110.     end
  1111.     case @action_data[4]
  1112.     when 0 ; judgment = hit_count >= member_num
  1113.     when 1 ; judgment = miss_count >= member_num
  1114.     end
  1115.     action_diverging(judgment, @action_data[6])
  1116.   end  
  1117.   #--------------------------------------------------------------------------
  1118.   # ● 条件分岐 (スクリプト)
  1119.   #--------------------------------------------------------------------------
  1120.   def nece_7
  1121.     judgment = eval(@action_data[2])
  1122.     action_diverging(judgment, @action_data[1])
  1123.   end  
  1124.   #--------------------------------------------------------------------------
  1125.   # ● アクション分岐  
  1126.   #--------------------------------------------------------------------------
  1127.   def action_diverging(judgment, kind)
  1128.     result = 0
  1129.     if judgment
  1130.       result = 1 if kind == 1
  1131.       result = 2 if kind == 2
  1132.     else
  1133.       result = 1 if kind == 0
  1134.     end
  1135.     # フルアクション終了
  1136.     return @full_action = []  if result == 2
  1137.     # 次のアクションを除去
  1138.     @full_action.shift if result == 1
  1139.     set_action
  1140.     # 次のアクションを実行
  1141.     @action_data = N03::ACTION[@action]
  1142.     next_action
  1143.   end
  1144.   #--------------------------------------------------------------------------
  1145.   # ● セカンドターゲット操作
  1146.   #--------------------------------------------------------------------------
  1147.   def second_targets_set
  1148.     targets = N03.get_targets(@action_data[1], @battler)
  1149.     for target in targets
  1150.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  1151.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  1152.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  1153.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  1154.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  1155.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  1156.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  1157.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  1158.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  1159.       targets.delete(target) if @action_data[7][1] > 0 && !target.comparison_equip(@action_data[7])
  1160.       targets.delete(target) if @action_data[7][1] < 0 && target.comparison_equip(@action_data[7])
  1161.     end
  1162.     return @second_targets = [] if targets.size == 0
  1163.     case @action_data[8]
  1164.     when 1 ; targets = [targets[rand(targets.size)]]
  1165.     when 2 ; targets.delete(@battler)
  1166.     end
  1167.     return @second_targets = [] if targets.size == 0
  1168.     @second_targets = targets
  1169.     case @action_data[9]
  1170.     when 0 ; return
  1171.     when 1 ; set_play_data(["second_targets_set"])
  1172.     when 2 ; set_play_data(["targets_set"])
  1173.     end
  1174.     @wait += 1
  1175.   end
  1176.   #--------------------------------------------------------------------------
  1177.   # ● ダメージアニメ
  1178.   #--------------------------------------------------------------------------
  1179.   def damage_anime(delay_time = 12)
  1180.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  1181.     action_play
  1182.     @wait -= delay_time
  1183.     @full_action.unshift("eval('@damage_anime_data = []
  1184.     @set_damage = true')")
  1185.   end
  1186.   #--------------------------------------------------------------------------
  1187.   # ● 通常コラプス
  1188.   #--------------------------------------------------------------------------
  1189.   def normal_collapse
  1190.     @collapse = true
  1191.     return
  1192.   end
  1193.   #--------------------------------------------------------------------------
  1194.   # ● 初期位置変更
  1195.   #--------------------------------------------------------------------------
  1196.   def change_base_position
  1197.     @base_x = @x
  1198.     @base_y = @y
  1199.     @base_h = @h
  1200.   end  
  1201.   #--------------------------------------------------------------------------
  1202.   # ● 強制アクション実行
  1203.   #--------------------------------------------------------------------------
  1204.   def force_act
  1205.     act = @full_action.shift
  1206.     for target in @target_battler do target.sv.force_action = act end
  1207.   end
  1208.   #--------------------------------------------------------------------------
  1209.   # ● 強制アクション実行 (セカンドターゲット)
  1210.   #--------------------------------------------------------------------------
  1211.   def force_act2
  1212.     act = @full_action.shift
  1213.     for target in @second_targets do target.sv.force_action = act end
  1214.   end
  1215.   #--------------------------------------------------------------------------
  1216.   # ● 個別処理開始
  1217.   #--------------------------------------------------------------------------
  1218.   def individual_start
  1219.     @individual_targets = @target_battler.dup
  1220.     @remain_targets = @target_battler.dup
  1221.     @target_battler = [@individual_targets[0]]
  1222.     # リピート部分のアクションを保持
  1223.     @individual_act = @full_action.dup
  1224.   end
  1225.   #--------------------------------------------------------------------------
  1226.   # ● 個別処理終了
  1227.   #--------------------------------------------------------------------------
  1228.   def individual_end
  1229.     @individual_targets.shift
  1230.     for target in @individual_targets
  1231.       @individual_targets.shift if target.dead?
  1232.     end
  1233.     # ターゲットが残っているなら行動リピート
  1234.     return @target_battler = @remain_targets if @individual_targets.size == 0
  1235.     @full_action = @individual_act.dup
  1236.     @target_battler = [@individual_targets[0]]
  1237.   end
  1238.   #--------------------------------------------------------------------------
  1239.   # ● ループ開始
  1240.   #--------------------------------------------------------------------------
  1241.   def loop_start
  1242.     # ループ部分のアクションを保持
  1243.     @loop_act = @full_action.dup
  1244.   end
  1245.   #--------------------------------------------------------------------------
  1246.   # ● ループ終了
  1247.   #--------------------------------------------------------------------------
  1248.   def loop_end
  1249.     # 行動リピート
  1250.     @full_action = @loop_act.dup if @loop_act != []
  1251.   end
  1252.   #--------------------------------------------------------------------------
  1253.   # ● 次の行動者へ移行
  1254.   #--------------------------------------------------------------------------
  1255.   def next_battler
  1256.     @action_end = true
  1257.   end
  1258.   #--------------------------------------------------------------------------
  1259.   # ● 画像変更フラグ
  1260.   #--------------------------------------------------------------------------
  1261.   def set_change
  1262.     @change_up = true
  1263.   end
  1264.   #--------------------------------------------------------------------------
  1265.   # ● 戦闘シーン通信
  1266.   #--------------------------------------------------------------------------
  1267.   def play_data
  1268.     data = @play_data
  1269.     @play_data = []
  1270.     return data
  1271.   end
  1272.   #--------------------------------------------------------------------------
  1273.   # ● ショートカットコマンド
  1274.   #--------------------------------------------------------------------------
  1275.   def anime(anime_id, wait = true)
  1276.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  1277.   end
  1278.   def anime_me(anime_id, wait = true)
  1279.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  1280.   end
  1281.   def se(file, pitch = 100)
  1282.     @action_data = ["sound",  "se", pitch, 100, file]
  1283.   end
  1284.   def target(act)
  1285.     for target in @target_battler do target.sv.force_action = act end
  1286.   end
  1287.   def target2(act)
  1288.     for target in @second_targets do target.sv.force_action = act end
  1289.   end
  1290.   def delay(time)
  1291.     @wait = @battler.index * time
  1292.   end
  1293.   #--------------------------------------------------------------------------
  1294.   # ● バトラーのIDを取得
  1295.   #--------------------------------------------------------------------------
  1296.   def id
  1297.     return @battler.id if @battler.actor?
  1298.     return [email protected]
  1299.   end
  1300.   #--------------------------------------------------------------------------
  1301.   # ● 被クリティカルフラグを取得
  1302.   #--------------------------------------------------------------------------
  1303.   def critical?
  1304.     return @battler.result.critical
  1305.   end
  1306.   #--------------------------------------------------------------------------
  1307.   # ● 被回復フラグを取得
  1308.   #--------------------------------------------------------------------------
  1309.   def recovery?
  1310.     recovery = false
  1311.     recovery = true if @battler.result.hp_damage < 0
  1312.     recovery = true if @battler.result.mp_damage < 0
  1313.     recovery = true if @battler.result.tp_damage < 0
  1314.     return recovery
  1315.   end
  1316.   #--------------------------------------------------------------------------
  1317.   # ● 被スキルIDを取得
  1318.   #--------------------------------------------------------------------------
  1319.   def damage_skill_id
  1320.     return @damage_skill_id
  1321.   end
  1322.   #--------------------------------------------------------------------------
  1323.   # ● 被アイテムIDを取得
  1324.   #--------------------------------------------------------------------------
  1325.   def damage_item_id
  1326.     return @damage_item_id
  1327.   end
  1328.   #--------------------------------------------------------------------------
  1329.   # ● 装備武器を取得
  1330.   #--------------------------------------------------------------------------
  1331.   def weapon_id
  1332.     return 0 if [email protected][0]
  1333.     return @battler.weapons[0].id
  1334.   end
  1335.   #--------------------------------------------------------------------------
  1336.   # ● 装備武器のタイプを取得
  1337.   #--------------------------------------------------------------------------
  1338.   def weapon_type
  1339.     return 0 if [email protected][0]
  1340.     return @battler.weapons[0].wtype_id
  1341.   end
  1342.   #--------------------------------------------------------------------------
  1343.   # ● 盾を装備しているか
  1344.   #--------------------------------------------------------------------------
  1345.   def shield?
  1346.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  1347.     return false
  1348.   end
  1349.   #--------------------------------------------------------------------------
  1350.   # ● ダメージがあるか
  1351.   #--------------------------------------------------------------------------
  1352.   def damage_zero?
  1353.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  1354.   end
  1355.   #--------------------------------------------------------------------------
  1356.   # ● スキルIDを取得
  1357.   #--------------------------------------------------------------------------
  1358.   def skill_id
  1359.     return @counter_id if @counter_id != 0
  1360.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1361.     return @battler.current_action.item.id
  1362.   end
  1363.   #--------------------------------------------------------------------------
  1364.   # ● スキルのタイプを取得
  1365.   #--------------------------------------------------------------------------
  1366.   def skill_type
  1367.     return $data_skills[@counter_id].stype_id if @counter_id != 0
  1368.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1369.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  1370.     return @battler.current_action.item.stype_id
  1371.   end
  1372.   #--------------------------------------------------------------------------
  1373.   # ● アイテムIDを取得
  1374.   #--------------------------------------------------------------------------
  1375.   def item_id
  1376.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1377.     return @battler.current_action.item.id
  1378.   end
  1379.   #--------------------------------------------------------------------------
  1380.   # ● 攻撃アクション
  1381.   #--------------------------------------------------------------------------
  1382.   def attack_action(item)
  1383.     return skill_action if item.is_a?(RPG::Skill)
  1384.     return item_action
  1385.   end
  1386.   #--------------------------------------------------------------------------
  1387.   # ● ダメージアクションベース
  1388.   #--------------------------------------------------------------------------
  1389.   def damage_action_base(item)
  1390.     @damage_skill_id = 0
  1391.     @damage_item_id = 0
  1392.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  1393.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  1394.   end  
  1395.   #--------------------------------------------------------------------------
  1396.   # ● ダメージアクション
  1397.   #--------------------------------------------------------------------------
  1398.   def damage_action(attacker, item)
  1399.     damage_action_base(item)
  1400.     act = damage(attacker)
  1401.     start_action(act) if act != nil
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● 回避アクション
  1405.   #--------------------------------------------------------------------------
  1406.   def evasion_action(attacker, item)
  1407.     damage_action_base(item)
  1408.     act = evasion(attacker)
  1409.     start_action(act) if act != nil
  1410.   end
  1411.   #--------------------------------------------------------------------------
  1412.   # ● ミスアクション
  1413.   #--------------------------------------------------------------------------
  1414.   def miss_action(attacker, item)
  1415.     damage_action_base(item)
  1416.     act = miss(attacker)
  1417.     start_action(act) if act != nil
  1418.   end
  1419.   
  1420.   
  1421. end


  1422. #==============================================================================
  1423. # ■ module N03
  1424. #------------------------------------------------------------------------------
  1425. #  サイドビューバトルのモジュールです。
  1426. #==============================================================================
  1427. module N03
  1428.   #--------------------------------------------------------------------------
  1429.   # ● バトラーの敵グループを取得
  1430.   #--------------------------------------------------------------------------
  1431.   def self.get_enemy_unit(battler)
  1432.     return $game_troop if battler.actor?
  1433.     return $game_party
  1434.   end
  1435.   #--------------------------------------------------------------------------
  1436.   # ● 戦闘アニメ時間の取得
  1437.   #--------------------------------------------------------------------------
  1438.   
  1439.   def self.get_anime_time(anime_id)
  1440.     return 0 if anime_id >= 0
  1441.     return $data_animations[anime_id].frame_max * 5
  1442.   end
  1443.   #--------------------------------------------------------------------------
  1444.   # ● 攻撃アニメの取得
  1445.   #--------------------------------------------------------------------------
  1446.   def self.get_attack_anime_id(kind, battler)
  1447.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  1448.     return 0 if battler.sv.counter_id == 0 && battler.current_action == nil
  1449.     case kind
  1450.     when -1 ; anime_id = battler.atk_animation_id1
  1451.     when -2 ; anime_id = battler.atk_animation_id2
  1452.     when -3 ; anime_id = battler.current_action.item.animation_id
  1453.     else    ; anime_id = kind
  1454.     end
  1455.     case anime_id
  1456.     when -1 ; anime_id = battler.atk_animation_id1
  1457.     when -2 ; anime_id = battler.atk_animation_id2
  1458.     end
  1459.     return anime_id
  1460.   end  
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 戦闘アニメデータをセット
  1463.   #--------------------------------------------------------------------------
  1464.   def self.set_damage_anime_data(target, data)
  1465.     target.animation_id = data[0]
  1466.     target.animation_mirror = data[1]
  1467.     target.sv.anime_no_mirror = data[2]
  1468.     target.sv.anime_camera_zoom = data[3]
  1469.   end   
  1470.   #--------------------------------------------------------------------------
  1471.   # ● ターゲットの取得
  1472.   #--------------------------------------------------------------------------
  1473.   def self.get_targets(kind, battler)
  1474.     case kind.abs
  1475.     when 0 ; return [battler]
  1476.     when 1 ; return battler.sv.target_battler
  1477.     when 2 ; return $game_troop.members
  1478.     when 3 ; return $game_party.battle_members
  1479.     when 4 ; return $game_troop.members + $game_party.battle_members
  1480.     when 5 ; return battler.sv.second_targets
  1481.     end
  1482.   end  
  1483.   #--------------------------------------------------------------------------
  1484.   # ● ターゲットの座標を取得
  1485.   #--------------------------------------------------------------------------
  1486.   def self.get_targets_position(targets, horming, m_a = nil)
  1487.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  1488.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  1489.     x = y = h = 0
  1490.     for i in 0...targets.size
  1491.       x += targets[i].sv.base_x if !horming
  1492.       y += targets[i].sv.base_y if !horming
  1493.       h += targets[i].sv.base_h if !horming
  1494.       x += targets[i].sv.x if horming
  1495.       y += targets[i].sv.y if horming
  1496.       h += targets[i].sv.h if horming
  1497.       y -= targets[i].sv.ch * 100 if m_a == 0
  1498.       y -= targets[i].sv.ch * 50 if m_a == 1
  1499.     end
  1500.     return [x / targets.size, y / targets.size, h / targets.size]
  1501.   end
  1502.   #--------------------------------------------------------------------------
  1503.   # ● 速度を時間に変換
  1504.   #--------------------------------------------------------------------------
  1505.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  1506.     return time if !distanse_move
  1507.     distanse_x = self_position[0] - target_position[0]
  1508.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  1509.     distanse_y = self_position[1] - target_position[1]
  1510.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  1511.     if self_position[2] != nil && target_position[2] != nil
  1512.       distanse_h = self_position[2] - target_position[2]
  1513.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  1514.     else
  1515.       distanse_h = 0
  1516.     end
  1517.     distanse = [distanse_x, distanse_y, distanse_h].max
  1518.     return distanse / (time * 100) + 2
  1519.   end
  1520.   #--------------------------------------------------------------------------
  1521.   # ● 放物線移動計算
  1522.   #--------------------------------------------------------------------------
  1523.   def self.parabola(data, time, size, type = 1)
  1524.     move_data = data
  1525.     move_data[0] *= size
  1526.     move_data[1] *= size
  1527.     move = []
  1528.     move_d = []
  1529.     for i in 0...time / 2
  1530.       move[i] = move_data[0]
  1531.       move_d[i] = move_data[1]
  1532.       move_data[0] = move_data[0] * type / (1 + type)
  1533.       move_data[1] = move_data[1] * type / (1 + type)
  1534.     end
  1535.     move = move + move_d.reverse!
  1536.     move.reverse!
  1537.     adjust = move.inject(0) {|result, item| result + item }
  1538.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  1539.     move.unshift(0) if time % 2 != 0
  1540.     return move
  1541.   end
  1542.   #--------------------------------------------------------------------------
  1543.   # ● 反転値
  1544.   #--------------------------------------------------------------------------
  1545.   def self.mirror_num(mirror)
  1546.     return 1 if !mirror
  1547.     return -1
  1548.   end  
  1549.   #--------------------------------------------------------------------------
  1550.   # ● カメラワーク
  1551.   #--------------------------------------------------------------------------
  1552.   def self.camera(battler, data)
  1553.     battler = $game_party.battle_members[0] if !battler
  1554.     cx = data[2][0] * 100
  1555.     cy = data[2][1] * 100
  1556.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  1557.     targets = self.get_targets(data[1], battler)
  1558.     return if targets == nil or targets == []
  1559.     position = self.get_targets_position(targets, true)
  1560.     $sv_camera.move(position[0], position[1] + position[2], data[3], data[4], false)
  1561.   end
  1562.   #--------------------------------------------------------------------------
  1563.   # ● コラプス禁止
  1564.   #--------------------------------------------------------------------------
  1565.   def self.immortaling
  1566.     # 全員に不死身付与
  1567.     for member in $game_party.battle_members + $game_troop.members
  1568.       next if member.dead?
  1569.       # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  1570.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  1571.       member.add_state(N03::IMMORTAL_ID)
  1572.     end
  1573.     return true
  1574.   end  
  1575.   #--------------------------------------------------------------------------
  1576.   # ● コラプス許可
  1577.   #--------------------------------------------------------------------------
  1578.   def self.unimmortaling
  1579.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  1580.     for member in $game_party.battle_members + $game_troop.members
  1581.       next if member.dead?
  1582.       # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  1583.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  1584.       next member.sv.immortal = false if member.sv.immortal
  1585.       member.remove_state(N03::IMMORTAL_ID)
  1586.       next if member.hp != 0
  1587.       member.add_state(1)
  1588.       member.perform_collapse_effect
  1589.       member.sv.action_terminate
  1590.     end
  1591.     return false
  1592.   end  
  1593.   #--------------------------------------------------------------------------
  1594.   # ● スキル派生
  1595.   #--------------------------------------------------------------------------
  1596.   def self.derived_skill(battler)
  1597.     battler.force_action(battler.sv.derivation_skill_id, -2)
  1598.     BattleManager.unshift_action_battlers(@subject)
  1599.   end
  1600.   #--------------------------------------------------------------------------
  1601.   # ● ダメージの作成
  1602.   #--------------------------------------------------------------------------
  1603.   def self.set_damage(battler, hp_damage, mp_damage)
  1604.     battler.result.hp_damage = hp_damage
  1605.     battler.result.mp_damage = mp_damage
  1606.   end
  1607.   #--------------------------------------------------------------------------
  1608.   # ● ターゲット生死確認
  1609.   #--------------------------------------------------------------------------
  1610.   def self.targets_alive?(targets)
  1611.     return false if targets == []
  1612.     for target in targets do return true if !target.dead? end
  1613.     return false
  1614.   end
  1615.   
  1616. end
复制代码
代码好长!
现在我用的这个脚本,当使用的技能动画帧数过多,比如40-50帧的时候,就会出现技能动画一半的时候伤害数字就出现,然后下一个人物就在技能动画中开始行动了。
而且在使用普通的攻击的时候,人物移动到怪物身边进行攻击后,会有一段时间的停顿,然后才会返回原位。
试着想找了下关于战斗时间的变量进行修改,但是貌似没起什么作用,所以求教各位大大啦!  
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-11-30 09:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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