赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 3426 |
最后登录 | 2014-6-5 |
在线时间 | 179 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 179 小时
- 注册时间
- 2012-11-14
- 帖子
- 94
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
- #==============================================================================
- # ■ Sideview
- #------------------------------------------------------------------------------
- # サイドビューバトラーを管理するクラスです。
- #==============================================================================
- class SideView
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :x # 画面X座標
- attr_accessor :y # 画面Y座標
- attr_accessor :z # 画面Z座標
- attr_accessor :h # 高さ座標
- attr_accessor :j # ジャンプ座標
- attr_accessor :c # カーブ座標
- attr_accessor :ox # 横原点
- attr_accessor :oy # 縦原点
- attr_accessor :oy_adjust # 縦原点補正
- attr_accessor :angle # 回転角度
- attr_accessor :zoom_x # 横の拡大率
- attr_accessor :zoom_y # 縦の拡大率
- attr_accessor :pattern_w # セル横位置(矩形内)
- attr_accessor :pattern_h # セル縦位置(矩形内)
- attr_accessor :sx # セル横位置(画像全体)
- attr_accessor :sy # セル縦位置(画像全体)
- attr_accessor :pattern_type # セル更新タイプ
- attr_accessor :pattern_time # セル更新間隔
- attr_accessor :graphic_name # バトラー画像ファイル名
- attr_accessor :graphic_file_index # バトラー画像ファイル名インデックス
- attr_accessor :graphic_index # バトラー画像インデックス
- attr_accessor :cw # セル横矩形
- attr_accessor :ch # セル縦矩形
- attr_accessor :shadow_visible # 影表示
- attr_accessor :weapon_visible # 武器表示
-
- attr_accessor :wait # 次の動作待ち時間
- attr_accessor :weapon_index # 表示中の武器画像インデックス配列
- attr_accessor :weapon_end # 武器アニメ終了フラグ
- attr_accessor :force_action # 強制アクション
- attr_accessor :target_battler # ターゲットバトラー情報
- attr_accessor :second_targets # セカンドターゲット情報
- attr_accessor :m_a_targets # アニメ飛ばしターゲット情報
- attr_accessor :individual_targets # 個別処理ターゲットバトラー情報
- attr_accessor :effect_data # エフェクトデータ
- attr_accessor :anime_id # アニメID配列
- attr_accessor :anime_move_id # 飛ばしアニメID配列
- attr_accessor :mirror # 反転フラグ
- attr_accessor :opacity # 透明度
- attr_accessor :opacity_data # 透明度操作情報
- attr_accessor :set_damage # バトルシーンでのダメージ処理
- attr_accessor :m_a_data # アニメ飛ばし情報
- attr_accessor :m_a_starter # アニメ飛ばし開始ターゲット情報
- attr_accessor :action_end # バトルシーンでの行動終了
- attr_accessor :damage_anime_data # ダメージ戦闘アニメのデータ
- attr_accessor :anime_no_mirror # 戦闘アニメの反転禁止フラグ
- attr_accessor :anime_horming # 戦闘アニメのホーミングフラグ
- attr_accessor :anime_camera_zoom # 戦闘アニメがカメラに合わせて拡大縮小するか
- attr_accessor :derivation_skill_id # スキル派生ID
- attr_accessor :immortal # 不死身フラグ
- attr_accessor :mirage # 残像データ
- attr_accessor :balloon_data # ふきだしデータ
- attr_accessor :timing # 別バトラーからのタイミングデータ
- attr_accessor :color_set # 色調変更データ
- attr_accessor :color # 色調データ
- attr_accessor :change_up # 画像変更フラグ
- attr_accessor :hit # 被攻撃回数
- attr_accessor :add_state # 何度も付加ステートの表示を防ぐフラグ
- attr_accessor :counter_id # カウンター時のスキルID
- attr_accessor :reflection_id # 魔法反射時のアニメID
- attr_accessor :result_damage # ターン終了時のHP変動データ
-
- attr_accessor :base_x # 初期位置 X座標
- attr_accessor :base_y # 初期位置 Y座標
- attr_accessor :base_h # 初期位置 高さ座標
- attr_accessor :max_pattern_w # セルの横分割数
- attr_accessor :max_pattern_h # セルの縦分割数
-
- attr_reader :collapse # コラプスフラグ
- attr_reader :picture # ピクチャ表示フラグ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(battler)
- [url=home.php?mod=space&uid=133701]@battler[/url] = battler
- reset
- end
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- def reset
- @x = 0
- @y = 0
- @z = 0
- @h = 0
- @j = 0
- @c = 0
- [url=home.php?mod=space&uid=271873]@jump[/url] = []
- @curve = []
- @ox = 0
- @oy = 0
- @oy_adjust = 0
- @z_plus = 0
- @move_time = 0
- [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
- @angle_time = 0
- @zoom_x = 1
- @zoom_y = 1
- @zoom_time = 0
- @pattern_w = 0
- @pattern_h = 0
- @sx = 0
- @sy = 0
- @pattern_type = 0
- @pattern_time = 0
- @pattern_rest_time = 0
- @graphic_name = ""
- @graphic_file_index = ""
- @graphic_index = 0
- @cw = 0
- @ch = 0
- @shadow_visible = false
- @weapon_visible = true
-
- [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
- @weapon_index = []
- @weapon_end = true
- @full_action = []
- @action = []
- @force_action = ""
- @target_battler = []
- @second_targets = []
- @individual_targets = []
- @m_a_targets = []
- @effect_data = []
- @anime_id = []
- @anime_move_id = []
- [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
- @opacity_data = []
- @set_damage = false
- @m_a_data = []
- @m_a_starter = []
- @action_end = false
- @damage_anime_data = []
- @anime_no_mirror = false
- @anime_horming = false
- @anime_camera_zoom = false
- @derivation_skill_id = 0
- @immortal = false
- @mirage = []
- @play_data = []
- @balloon_data = []
- @picture = false
- @timing = []
- @color_set = []
- [url=home.php?mod=space&uid=10453]@color[/url] = []
- @change_up = false
- @non_motion = false
- @graphics_change = false
- @hit = 0
- @add_state = []
- @collapse = false
- @counter_id = 0
- @reflection_id = 0
- @result_damage = [0,0]
-
- @base_x = 0
- @base_y = 0
- @base_z = 0
- @base_h = 0
- @max_pattern_w = 0
- @max_pattern_h = 0
- @pattern_kind = 0
- @pattern_count = 0
- @move_time = 0
- [url=home.php?mod=space&uid=111303]@mirror[/url] = false
- @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
- @pre_change_data = nil
- end
- #--------------------------------------------------------------------------
- # ● セットアップ
- #--------------------------------------------------------------------------
- def setup(bitmap_width, bitmap_height, first_action_flug)
- reset if first_action_flug
- set_data
- set_base_position if !@graphics_change
- set_graphics(bitmap_width, bitmap_height)
- set_target
- setup_graphics_change if @graphics_change
- start_action(first_action) if first_action_flug && @battler.movable?
- stand_by_action if first_action_flug && [email protected]?
- end
- #--------------------------------------------------------------------------
- # ● 画像変更用のセットアップ
- #--------------------------------------------------------------------------
- def setup_graphics_change
- @graphics_change = false
- @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
- @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
- end
- #--------------------------------------------------------------------------
- # ● バトラーデータ取得
- #--------------------------------------------------------------------------
- def set_data
- return if @battler == nil
- if @battler.actor?
- @graphic_name = @battler.character_name
- @graphic_index = @battler.character_index
- else
- @graphic_name = @battler.battler_name
- @graphic_index = 0
- end
- @max_pattern_w = max_pattern[0]
- @max_pattern_h = max_pattern[1]
- end
- #--------------------------------------------------------------------------
- # ● グラフィックデータ取得
- #--------------------------------------------------------------------------
- def set_graphics(bitmap_width, bitmap_height)
- sign = @graphic_name[/^[\!\$]./]
- if sign && sign.include?('$')
- @cw = bitmap_width / @max_pattern_w
- @ch = bitmap_height / @max_pattern_h
- elsif @max_pattern_w == 1 && @max_pattern_h == 1
- @cw = bitmap_width
- @ch = bitmap_height
- else
- @cw = bitmap_width / (@max_pattern_w * 4)
- @ch = bitmap_height / (@max_pattern_h * 2)
- end
- @ox = @cw / 2
- @oy = @ch
- end
- #--------------------------------------------------------------------------
- # ● ベース座標をセット data = [X軸, Y軸, H軸] moment_set…瞬間配置
- #--------------------------------------------------------------------------
- def set_base_position(moment_set = true)
- mirroring_reset
- if @battler.actor?
- data = N03::ACTOR_POSITION[@battler.index].dup
- @base_x = data[0] * 100 if !@mirror
- @base_x = (Graphics.width - data[0]) * 100 if @mirror
- else
- data = [@battler.screen_x, @battler.screen_y, 0].dup
- @base_x = data[0] * 100 if !$sv_camera.mirror
- @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
- end
- @base_y = data[1] * 100
- @base_h = data[2] * 100
- @base_z = @y
- return if !moment_set
- @x = @base_x
- @y = @base_y
- @z = @base_z
- end
- #--------------------------------------------------------------------------
- # ● ターゲットをセット
- #--------------------------------------------------------------------------
- def set_target(target = nil)
- @target_battler = target
- @target_battler = [@battler] if target == nil
- @second_targets = @target_battler.dup
- end
- #--------------------------------------------------------------------------
- # ● アクション開始
- #--------------------------------------------------------------------------
- def start_action(kind = nil)
- # ウェイト中の場合キャンセル
- return @wait -= 1 if @wait > 0 && kind == nil
- action_setup if kind != nil
- set_action(kind)
- @action = kind if @action == nil
- # 行動配列が無い場合は行動終了処理へ移行
- action_terminate if @action == nil
- # 次のアクション決定
- @action_data = N03::ACTION[@action]
- next_action
- end
- #--------------------------------------------------------------------------
- # ● 行動パラメータの初期化
- #--------------------------------------------------------------------------
- def action_setup
- @set_damage = false
- @action_end = false
- @balloon_data = []
- @loop_act = []
- angle_reset
- zoom_reset
- opacity_reset
- @curve = []
- @c = 0
- convert_jump
- end
- #--------------------------------------------------------------------------
- # ● 行動終了処理
- #--------------------------------------------------------------------------
- def action_terminate
- @mirage = [] if @mirage_end
- mirroring_reset
- @picture = false
- # 待機アクションへ移行
- stand_by_action if !@non_motion
- # 戦闘行動のアクティブ権を終了
- next_battler
- end
- #--------------------------------------------------------------------------
- # ● 新しいアクション内容の決定
- #--------------------------------------------------------------------------
- def set_action(kind = nil)
- full_act = N03::FULLACTION[kind]
- @full_action = full_act.dup if full_act != nil
- @action = @full_action.shift
- # 参照したアクションがフルアクションであれば全体のアクションを統合
- full_act2 = N03::FULLACTION[@action]
- @full_action = full_act2.dup + @full_action if full_act2 != nil
- end
- #--------------------------------------------------------------------------
- # ● 次のアクションへ
- #--------------------------------------------------------------------------
- def next_action
- @wait = 0
- # ショートカット確認
- eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
- # ウエイト設定
- @wait = @action.to_i if @wait == 0 && @action_data == nil
- @wait = rand(@wait.abs + 1) if @wait < 0
- # アクション開始
- action_play
- end
- #--------------------------------------------------------------------------
- # ● 待機アクションへ移行
- #--------------------------------------------------------------------------
- def stand_by_action
- # 通常待機に
- stand_by_act = normal
- # HPが1/4でピンチアクションに
- stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
- # ステートチェック
- stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
- set_action(stand_by_act)
- @action = stand_by_act if @action == nil
- end
- #--------------------------------------------------------------------------
- # ● 強制アクション開始
- #--------------------------------------------------------------------------
- def start_force_action
- @full_action= []
- start_action(@force_action)
- @force_action = ""
- end
- #--------------------------------------------------------------------------
- # ● 複数のアクションを繋げて開始
- #--------------------------------------------------------------------------
- def start_plural_action(kinds)
- full_act = []
- for kind in kinds
- act = N03::FULLACTION[kind]
- act = [kind] if act == nil
- full_act += act
- end
- @full_action = full_act.dup
- @action = @full_action.shift
- full_act = N03::FULLACTION[@action]
- @full_action = full_act.dup + @full_action if full_act != nil
- @action_data = N03::ACTION[@action]
- next_action
- end
- #--------------------------------------------------------------------------
- # ● アクション追加
- #--------------------------------------------------------------------------
- def add_action(kind)
- @full_action.push(kind)
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # アクション開始
- start_action
- # 強制アクション開始
- start_force_action if @force_action != ""
- # アニメパターン更新
- update_pattern
- # 移動更新
- update_move
- # 回転更新
- update_angle if @angle_time != 0
- # 拡大縮小更新
- update_zoom if @zoom_time != 0
- # 透明度更新
- update_opacity if @opacity_data != []
- end
- #--------------------------------------------------------------------------
- # ● アニメパターン更新
- #--------------------------------------------------------------------------
- def update_pattern
- return @pattern_rest_time -= 1 if @pattern_rest_time != 0
- return if @max_pattern_w == 1 && @max_pattern_h == 1
- @pattern_rest_time = @pattern_time
- # 再生開始・終了セル位置を取得
- if @pattern_kind > 0 # 通常再生中
- @pattern_start = 0
- @pattern_end = @max_pattern_w - 1
- elsif @pattern_kind < 0 # 逆転再生中
- @pattern_start = @max_pattern_w - 1
- @pattern_end = 0
- end
- # 片道の再生が終了
- @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
- # ループ処理
- case @pattern_type.abs
- when 1,3 # 片道
- @pattern_kind = 0 if @pattern_count != 0 && @pattern_type == 1
- @pattern_kind = 0 if @pattern_count != 0 && @pattern_type == -1
- @pattern_kind = 1 if @pattern_count != 0 && @pattern_type == 3
- @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
- @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
- @pattern_count = 0
- when 2,4 # 往復
- @pattern_kind = -1 if @pattern_count == 1 && @pattern_type == 2
- @pattern_kind = 1 if @pattern_count == 1 && @pattern_type == -2
- @pattern_kind = 0 if @pattern_count == 2 && @pattern_type == 2
- @pattern_kind = 0 if @pattern_count == 2 && @pattern_type == -2
- @pattern_kind = -1 if @pattern_count == 1 && @pattern_type == 4
- @pattern_kind = 1 if @pattern_count == 1 && @pattern_type == -4
- @pattern_kind = 1 if @pattern_count == 2 && @pattern_type == 4
- @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
- @pattern_count = 0 if @pattern_count == 2
- end
- # セル更新
- @pattern_w += 1 * @pattern_kind
- @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
- end
- #--------------------------------------------------------------------------
- # ● 移動の更新
- #--------------------------------------------------------------------------
- def update_move
- @z = @y + @z_plus
- return if @move_time == 0
- target_position_set if @horming_move
- @x = (@x * (@move_time - 1) + @target_x) / @move_time
- @y = (@y * (@move_time - 1) + @target_y) / @move_time
- @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
- @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
- @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
- @move_time -= 1
- convert_jump if @move_time == 0
- end
- #--------------------------------------------------------------------------
- # ● 移動目標の更新
- #--------------------------------------------------------------------------
- def target_position_set
- target_position = N03.get_targets_position(@move_targets, @horming_move)
- @target_x = target_position[0] + @move_x
- @target_y = target_position[1] + @move_y
- @target_h = target_position[2] + @move_h if @move_h != nil
- end
- #--------------------------------------------------------------------------
- # ● 回転更新
- #--------------------------------------------------------------------------
- def update_angle
- @angle += @angling
- @angle_time -= 1
- return if @angle_time != 0
- return angle_reset if @angle_data[4] == 0
- angling(@angle_data) if @angle_data[4] == 2
- end
- #--------------------------------------------------------------------------
- # ● 拡大縮小更新
- #--------------------------------------------------------------------------
- def update_zoom
- @zoom_x += @zooming_x
- @zoom_y += @zooming_y
- @zoom_time -= 1
- return if @zoom_time != 0
- return zoom_reset if @zoom_data[4] == 0
- zooming(@zoom_data) if @zoom_data[4] == 2
- end
- #--------------------------------------------------------------------------
- # ● 透明度更新
- #--------------------------------------------------------------------------
- def update_opacity
- @opacity += @opacity_data[2]
- @opacity_data[0] -= 1
- return if @opacity_data[0] != 0
- return opacity_reset if !@opacity_data[5]
- @opacity_data[2] *= -1
- @opacity_data[0] = @opacity_data[1]
- end
- #--------------------------------------------------------------------------
- # ● アクション実行
- #--------------------------------------------------------------------------
- def action_play
- return if @action_data == nil
- action = @action_data[0]
- # バトラー反転の場合
- return mirroring if action == "mirror"
- # 残像の場合
- return mirage_set if action == "mirage"
- # 回転の場合
- return angling if action == "angle"
- # 拡大縮小の場合
- return zooming if action == "zoom"
- # 透明度操作の場合
- return set_opacity if action == "opacity"
- # バトラーアニメの場合
- return battler_anime if action == "motion"
- # 移動の場合
- return move if action == "move"
- # 武器アニメの場合
- return weapon_anime([@action_data]) if action == "wp"
- # アニメ飛ばしの場合
- return move_anime if action == "m_a"
- # 戦闘シーン通信の場合(コラプス)
- return set_play_data if action == "collapse" or action == "no_collapse"
- # データベース戦闘アニメ表示の場合
- return battle_anime if action == "anime"
- # カメラワークの場合
- return camera if action == "camera"
- # 画面のシェイクの場合
- return shake if action == "shake"
- # 画面色調変更の場合
- return color_effect if action == "color"
- # ふきだしアニメ表示の場合
- return balloon_anime if action == "balloon"
- # ピクチャ表示の場合
- return picture_set if action == "pic"
- # ステート操作の場合
- return state_set if action == "sta"
- # FPS変更の場合
- return fps if action == "fps"
- # バトラー画像変更の場合
- return graphics_change if action == "change"
- # スキル派生の場合
- return derivating_skill if action == "der"
- # BGM/BGS/SE演奏の場合
- return sound if action == "sound"
- # ムービー再生の場合
- return movie if action == "movie"
- # ゲームスイッチ操作の場合
- return switches if action == "switch"
- # ゲーム変数操作の場合
- return variable if action == "variable"
- # 条件分岐(ゲームスイッチ)の場合
- return nece_1 if action == "n_1"
- # 条件分岐(ゲーム変数)の場合
- return nece_2 if action == "n_2"
- # 条件分岐(ステート)の場合
- return nece_3 if action == "n_3"
- # 条件分岐(スキル)の場合
- return nece_4 if action == "n_4"
- # 条件分岐(パラメータ)の場合
- return nece_5 if action == "n_5"
- # 条件分岐(装備)の場合
- return nece_6 if action == "n_6"
- # 条件分岐(スクリプト)の場合
- return nece_7 if action == "n_7"
- # セカンドターゲット操作の場合
- return second_targets_set if action == "s_t"
- # ダメージアニメの場合
- return damage_anime if action == "damage_anime"
- # 武器消去の場合
- return @weapon_visible = false if action == "weapon_off"
- # 武器消去解除の場合
- return @weapon_visible = true if action == "weapon_on"
- # 待機キャンセルの場合
- return @non_motion = true if action == "non_motion"
- # 待機キャンセル解除の場合
- return @non_motion = false if action == "non_motion_cancel"
- # 初期位置変更の場合
- return change_base_position if action == "change_base_position"
- # 初期位置変更解除の場合
- return set_base_position(false) if action == "set_base_position"
- # 強制アクションの場合
- return force_act if action == "force_action"
- # 強制アクションの場合 (セカンドターゲット)
- return force_act2 if action == "force_action2"
- # 個別開始の場合
- return individual_start if action == "individual_start"
- # 個別終了の場合
- return individual_end if action == "individual_end"
- # ループ開始の場合
- return loop_start if action == "loop_start"
- # ループ終了の場合
- return loop_end if action == "loop_end"
- # 自分のみ更新の場合
- return only_action_on if action == "only_action_on"
- # 自分のみ更新解除の場合
- return only_action_off if action == "only_action_off"
- # 次の行動者へ移行の場合
- return next_battler if action == "next_battler"
- # 画像変更フラグの場合
- return set_change if action == "set_change"
- # スクリプト操作の場合
- return eval(@action_data[0])
- end
- #--------------------------------------------------------------------------
- # ● バトラー反転実行
- #--------------------------------------------------------------------------
- def mirroring
- @mirror = !@mirror
- end
- #--------------------------------------------------------------------------
- # ● 反転初期化
- #--------------------------------------------------------------------------
- def mirroring_reset
- @mirror = false
- mirroring if [email protected]? && N03::ENEMY_MIRROR
- mirroring if $sv_camera.mirror
- end
- #--------------------------------------------------------------------------
- # ● 残像実行
- #--------------------------------------------------------------------------
- def mirage_set
- @mirage = @action_data.dup
- @mirage_end = @mirage[3]
- @mirage = [] if @mirage[1] == 0
- end
- #--------------------------------------------------------------------------
- # ● 回転実行
- #--------------------------------------------------------------------------
- def angling(data = @action_data)
- @angle_data = data.dup
- @oy = @ch / 2
- @oy_adjust = @ch * 50
- @angle_time = data[1]
- start_angle = data[2] * N03.mirror_num(@mirror)
- end_angle = data[3] * N03.mirror_num(@mirror)
- # 時間が0以下なら即座に最終角度へ
- @angle_time = 1 if @angle_time <= 0
- # 回転時間から1フレームあたりの角度を出す
- @angling = (end_angle - start_angle) / @angle_time
- # 割り切れない余りを初期角度に
- @angle = (end_angle - start_angle) % @angle_time + start_angle
- end
- #--------------------------------------------------------------------------
- # ● 回転初期化
- #--------------------------------------------------------------------------
- def angle_reset
- @oy = @ch
- @angle = @angle_time = @oy_adjust = 0
- end
- #--------------------------------------------------------------------------
- # ● 拡大縮小実行
- #--------------------------------------------------------------------------
- def zooming(data = @action_data)
- @zoom_data = data.dup
- @zoom_time = data[1]
- start_zoom_x = data[2][0]
- start_zoom_y = data[2][1]
- end_zoom_x = data[3][0]
- end_zoom_y = data[3][1]
- # 時間が0以下なら即座に最終サイズへ
- @zoom_time = 1 if @zoom_time <= 0
- # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
- @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
- @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
- # 開始サイズに
- @zoom_x = start_zoom_x
- @zoom_y = start_zoom_y
- end
- #--------------------------------------------------------------------------
- # ● 拡大縮小初期化
- #--------------------------------------------------------------------------
- def zoom_reset
- @zoom_x = @zoom_y = 1
- @zoom_time = 0
- end
- #--------------------------------------------------------------------------
- # ● バトラー透明度操作
- #--------------------------------------------------------------------------
- def set_opacity
- data = @action_data.dup
- @opacity = data[2]
- opacity_move = (data[3] - data[2])/ data[1]
- @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
- @wait = data[1] if data[7]
- @wait *= 2 if data[6] && data[7]
- end
- #--------------------------------------------------------------------------
- # ● 透明度操作初期化
- #--------------------------------------------------------------------------
- def opacity_reset
- @opacity = 255
- @opacity_data = []
- end
- #--------------------------------------------------------------------------
- # ● バトラーアニメ実行
- #--------------------------------------------------------------------------
- def battler_anime(anime_data = nil)
- anime_data = @action_data.dup if anime_data == nil
- @graphic_file_index = anime_data[1]
- @pattern_h = anime_data[2]
- @pattern_w = anime_data[3]
- @pattern_h = 0 if @max_pattern_w == 1
- @pattern_w = 0 if @max_pattern_h == 1
- @pattern_type = anime_data[4]
- @pattern_time = anime_data[5]
- @pattern_rest_time = anime_data[5]
- @pattern_count = 0
- @pattern_kind = 1
- @pattern_kind = -1 if @pattern_type < 0
- @pattern_kind = 0 if @pattern_type == 0
- @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
- @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
- @z_plus = anime_data[6]
- @wait = set_anime_wait if anime_data[7]
- @shadow_visible = anime_data[8]
- weapon_anime(anime_data)
- end
- #--------------------------------------------------------------------------
- # ● アニメウエイト計算
- #--------------------------------------------------------------------------
- def set_anime_wait
- if @pattern_type > 0
- pattern_time_a = @max_pattern_w - @pattern_w.abs
- elsif @pattern_type < 0
- pattern_time_a = @pattern_w.abs + 1
- else
- return @pattern_time if @pattern_type == 0
- end
- case @pattern_type
- when 1,-1, 3,-3
- return pattern_time_a * @pattern_time
- when 2,-2, 4,-4
- return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
- end
- end
- #--------------------------------------------------------------------------
- # ● 移動実行
- #--------------------------------------------------------------------------
- def move
- @move_targets = N03.get_targets(@action_data[1].abs, @battler)
- return if @move_targets == []
- @move_targets = [@battler] if @action_data[1].abs == 7
- @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
- @move_y = @action_data[3] * 100
- @move_h = @action_data[4] * 100 if @action_data[4] != nil
- @move_h = nil if @action_data[4] == nil
- battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
- @horming_move = true
- @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
- target_position_set
- target_position = [@target_x, @target_y, @target_z]
- distanse_move = @action_data[5] > 0
- @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
- @wait = @move_time
- curve
- jump
- @move_time = 1 if @move_time == 0
- @horming_move = false if @move_targets.include?(@battler)
- update_move if @move_time == 1
- end
- #--------------------------------------------------------------------------
- # ● カーブ実行
- #--------------------------------------------------------------------------
- def curve
- @c = 0
- return if @action_data[6] == 0
- @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
- end
- #--------------------------------------------------------------------------
- # ● ジャンプ実行
- #--------------------------------------------------------------------------
- def jump
- convert_jump
- return if @action_data[7] == [0,0]
- @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
- end
- #--------------------------------------------------------------------------
- # ● J座標(ジャンプ高度)をH座標に変換
- #--------------------------------------------------------------------------
- def convert_jump
- @h += @j
- @j = 0
- @jump = []
- end
- #--------------------------------------------------------------------------
- # ● データベース戦闘アニメ実行
- #--------------------------------------------------------------------------
- def battle_anime
- data = @action_data.dup
- targets = N03.get_targets(data[2], @battler)
- return if targets == []
- data[8] = !data[8] if @mirror
- @set_damage = data[5]
- @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
- @damage_anime_data[1] = data[8]
- @damage_anime_data[2] = data[7]
- @damage_anime_data[3] = data[6]
- @wait = N03.get_anime_time(@damage_anime_data[0]) + 110 if data[4]
- return if @set_damage
- for target in targets do display_anime(target, data) end
- end
- #--------------------------------------------------------------------------
- # ● 武器アニメ開始
- #--------------------------------------------------------------------------
- def weapon_anime(anime_data)
- @weapon_end = true
- for i in 9...anime_data.size
- set_effect_data(anime_data[i]) if anime_data[i] != ""
- end
- end
- #--------------------------------------------------------------------------
- # ● アニメ飛ばし開始
- #--------------------------------------------------------------------------
- def move_anime
- @m_a_starter = []
- @m_a_targets = []
- starters = N03.get_targets(@action_data[2], @battler)
- targets = N03.get_targets(@action_data[3], @battler)
- return if starters == [] or targets == []
- single_start = true if starters != nil && @action_data[2] < 0
- single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
- starters = [starters[0]] if single_start
- single_end = true if targets != nil && @action_data[3] < 0
- single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
- targets = [targets[0]] if single_end
- se_flug = true
- for starter in starters
- for target in targets
- data = @action_data.dup
- data[17] = se_flug
- @effect_data.push(data)
- @m_a_targets.push(target)
- @m_a_starter.push(starter)
- se_flug = false
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● スプライトセット通信
- #--------------------------------------------------------------------------
- def set_effect_data(data = @action)
- action_data = N03::ACTION[data]
- return if action_data == nil
- @effect_data.push(action_data.dup)
- end
- #--------------------------------------------------------------------------
- # ● 戦闘シーン通信のデータを格納
- #--------------------------------------------------------------------------
- def set_play_data(data = @action_data)
- @play_data = data.dup
- end
- #--------------------------------------------------------------------------
- # ● 戦闘アニメの表示
- #--------------------------------------------------------------------------
- def display_anime(battler, data)
- battler.animation_id = data[1]
- battler.animation_mirror = data[8]
- battler.sv.anime_horming = data[3]
- battler.sv.anime_camera_zoom = data[6]
- battler.sv.anime_no_mirror = data[7]
- end
- #--------------------------------------------------------------------------
- # ● 戦闘アニメ拡張データの初期化
- #--------------------------------------------------------------------------
- def reset_anime_data
- @anime_no_mirror = false
- @anime_horming = false
- @anime_camera_zoom = false
- end
- #--------------------------------------------------------------------------
- # ● カメラワーク
- #--------------------------------------------------------------------------
- def camera
- data = @action_data.dup
- N03.camera(@battler, data)
- @wait = data[4] if data[5]
- end
- #--------------------------------------------------------------------------
- # ● 画面のシェイク
- #--------------------------------------------------------------------------
- def shake
- data = @action_data.dup
- $sv_camera.shake(data[1], data[2], data[3])
- @wait = data[3] if data[4]
- end
- #--------------------------------------------------------------------------
- # ● 画面色調変更
- #--------------------------------------------------------------------------
- def color_effect
- case @action_data[1]
- when 0,1,2,3,4,5
- targets = N03.get_targets(@action_data[1], @battler)
- when 6
- screen = true
- when 7
- targets = [@battler] + @target_battler
- when 8
- screen = true
- targets = $game_troop.members + $game_party.battle_members - [@battler]
- when 9
- screen = true
- targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
- when 10
- screen = true
- targets = $game_troop.members + $game_party.battle_members
- end
- return if screen == nil && targets == []
- for target in targets do target.sv.color_set = @action_data[2] end if targets
- @wait = @action_data[2][4] if @action_data[3]
- return if !screen
- $sv_camera.color_set[1] = @action_data[2]
- $sv_camera.color_set[2] = @action_data[2]
- end
- #--------------------------------------------------------------------------
- # ● ふきだしアニメ表示
- #--------------------------------------------------------------------------
- def balloon_anime
- @balloon_data = @action_data.dup
- end
- #--------------------------------------------------------------------------
- # ● ピクチャ表示
- #--------------------------------------------------------------------------
- def picture_set
- @picture = true
- set_effect_data
- end
- #--------------------------------------------------------------------------
- # ● ステート操作
- #--------------------------------------------------------------------------
- def state_set
- targets = N03.get_targets(@action_data[1], @battler)
- return if targets == []
- case @action_data[2]
- when 1 ; targets = [targets[rand(targets.size)]]
- when 2 ; targets -= @battler if targets.include?(@battler)
- end
- for target in targets
- target.add_state(@action_data[4]) if @action_data[3] == "+"
- target.remove_state(@action_data[4]) if @action_data[3] == "-"
- end
- end
- #--------------------------------------------------------------------------
- # ● FPS変更
- #--------------------------------------------------------------------------
- def fps
- Graphics.frame_rate = @action_data[1]
- start_action
- end
- #--------------------------------------------------------------------------
- # ● バトラー画像変更の場合
- #--------------------------------------------------------------------------
- def graphics_change
- @graphics_change = true
- return @battler.graphics_change(@action_data[3]) if [email protected]?
- @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if !@action_data[1]
- if @action_data[4] == []
- face_name = @battler.face_name
- face_index = @battler.face_index
- else
- face_name = @action_data[4][1]
- face_index = @action_data[4][0]
- end
- @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
- end
- #--------------------------------------------------------------------------
- # ● スキル派生
- #--------------------------------------------------------------------------
- def derivating_skill
- # 未修得スキルは派生不可なら
- return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
- # コスト不足は派生不可なら
- return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
- # 派生
- @derivation_skill_id = @action_data[3]
- # 以降のアクションをキャンセル
- @full_action = []
- end
- #--------------------------------------------------------------------------
- # ● BGM/BGS/SE演奏
- #--------------------------------------------------------------------------
- def sound
- pitch = @action_data[2]
- vol = @action_data[3]
- name = @action_data[4]
- case @action_data[1]
- when "se"
- Audio.se_play("Audio/SE/" + name, vol, pitch)
- when "bgm"
- # 名前指定のない場合、現在のBGMを変えないように
- name = RPG::BGM.last.name if @action_data[4] == ""
- Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
- when "bgs"
- name = RPG::BGS.last.name if @action_data[4] == ""
- Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
- end
- end
- #--------------------------------------------------------------------------
- # ● ムービーの再生
- #--------------------------------------------------------------------------
- def movie
- Graphics.play_movie('Movies/' + @action_data[1])
- end
- #--------------------------------------------------------------------------
- # ● ゲームスイッチ操作
- #--------------------------------------------------------------------------
- def switches
- $game_switches[@action_data[1]] = @action_data[2] if @action_data[1] > 0
- $sv_camera.switches[@action_data[1].abs] = @action_data[2] if @action_data[1] < 0
- $sv_camera.program_check
- end
- #--------------------------------------------------------------------------
- # ● ゲーム変数操作
- #--------------------------------------------------------------------------
- def variable
- # オペランドチェック
- operand = @active_action[3]
- operand = $game_variables[@active_action[3].abs] if @active_action[3] < 0
- # 変数操作で分岐
- case @active_action[2]
- when 0 ; $game_variables[@active_action[1]] = operand # 代入
- when 1 ; $game_variables[@active_action[1]] += operand # 加算
- when 2 ; $game_variables[@active_action[1]] -= operand # 減算
- when 3 ; $game_variables[@active_action[1]] *= operand # 乗算
- when 4 ; $game_variables[@active_action[1]] /= operand # 除算
- when 5 ; $game_variables[@active_action[1]] %= operand # 剰余
- end
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (ゲームスイッチ)
- #--------------------------------------------------------------------------
- def nece_1
- judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
- judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
- action_diverging(judgment, @action_data[3])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (ゲーム変数)
- #--------------------------------------------------------------------------
- def nece_2
- variable = $game_variables[@action_data[1]]
- num = @action_data[2]
- num = $game_variables[@action_data[2].abs] if num < 0
- case @action_data[3]
- when 0 ; judgment = variable == num
- when 1 ; judgment = variable < num
- when 2 ; judgment = variable > num
- end
- action_diverging(judgment, @action_data[4])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (ステート)
- #--------------------------------------------------------------------------
- def nece_3
- targets = N03.get_targets(@action_data[1], @battler)
- return if targets == []
- member_num = @action_data[4]
- member_num = targets.size if @action_data[4] == 0 && targets.size > 1
- hit_count = 0
- miss_count = 0
- for target in targets
- hit_count += 1 if target.state?(@action_data[2])
- miss_count += 1 if !target.state?(@action_data[2])
- end
- case @action_data[3]
- when 0 ; judgment = hit_count >= member_num
- when 1 ; judgment = miss_count >= member_num
- end
- action_diverging(judgment, @action_data[5])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (スキル)
- #--------------------------------------------------------------------------
- def nece_4
- targets = N03.get_targets(@action_data[1], @battler)
- return if targets == []
- member_num = @action_data[4]
- member_num = targets.size if @action_data[4] == 0 && targets.size > 1
- hit_count = 0
- miss_count = 0
- for target in targets
- hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
- miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
- end
- case @action_data[3]
- when 0 ; judgment = hit_count >= member_num
- when 1 ; judgment = miss_count >= member_num
- end
- action_diverging(judgment, @action_data[5])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (パラメータ)
- #--------------------------------------------------------------------------
- def nece_5
- targets = N03.get_targets(@action_data[1], @battler)
- return if targets == []
- member_num = @action_data[5]
- member_num = targets.size if @action_data[5] == 0 && targets.size > 1
- hit_count = 0
- for target in targets
- hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
- end
- judgment = hit_count >= member_num
- action_diverging(judgment, @action_data[6])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (装備)
- #--------------------------------------------------------------------------
- def nece_6
- targets = N03.get_targets(@action_data[1], @battler)
- return if targets == []
- member_num = @action_data[5]
- member_num = targets.size if @action_data[5] == 0 && targets.size > 1
- hit_count = 0
- miss_count = 0
- for target in targets
- hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
- miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
- end
- case @action_data[4]
- when 0 ; judgment = hit_count >= member_num
- when 1 ; judgment = miss_count >= member_num
- end
- action_diverging(judgment, @action_data[6])
- end
- #--------------------------------------------------------------------------
- # ● 条件分岐 (スクリプト)
- #--------------------------------------------------------------------------
- def nece_7
- judgment = eval(@action_data[2])
- action_diverging(judgment, @action_data[1])
- end
- #--------------------------------------------------------------------------
- # ● アクション分岐
- #--------------------------------------------------------------------------
- def action_diverging(judgment, kind)
- result = 0
- if judgment
- result = 1 if kind == 1
- result = 2 if kind == 2
- else
- result = 1 if kind == 0
- end
- # フルアクション終了
- return @full_action = [] if result == 2
- # 次のアクションを除去
- @full_action.shift if result == 1
- set_action
- # 次のアクションを実行
- @action_data = N03::ACTION[@action]
- next_action
- end
- #--------------------------------------------------------------------------
- # ● セカンドターゲット操作
- #--------------------------------------------------------------------------
- def second_targets_set
- targets = N03.get_targets(@action_data[1], @battler)
- for target in targets
- targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
- targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
- targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
- targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
- targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
- targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
- targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
- targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
- targets.delete(target) if !target.comparison_parameter(@action_data[6])
- targets.delete(target) if @action_data[7][1] > 0 && !target.comparison_equip(@action_data[7])
- targets.delete(target) if @action_data[7][1] < 0 && target.comparison_equip(@action_data[7])
- end
- return @second_targets = [] if targets.size == 0
- case @action_data[8]
- when 1 ; targets = [targets[rand(targets.size)]]
- when 2 ; targets.delete(@battler)
- end
- return @second_targets = [] if targets.size == 0
- @second_targets = targets
- case @action_data[9]
- when 0 ; return
- when 1 ; set_play_data(["second_targets_set"])
- when 2 ; set_play_data(["targets_set"])
- end
- @wait += 1
- end
- #--------------------------------------------------------------------------
- # ● ダメージアニメ
- #--------------------------------------------------------------------------
- def damage_anime(delay_time = 12)
- anime(N03.get_attack_anime_id(-3, @battler), wait = true)
- action_play
- @wait -= delay_time
- @full_action.unshift("eval('@damage_anime_data = []
- @set_damage = true')")
- end
- #--------------------------------------------------------------------------
- # ● 通常コラプス
- #--------------------------------------------------------------------------
- def normal_collapse
- @collapse = true
- return
- end
- #--------------------------------------------------------------------------
- # ● 初期位置変更
- #--------------------------------------------------------------------------
- def change_base_position
- @base_x = @x
- @base_y = @y
- @base_h = @h
- end
- #--------------------------------------------------------------------------
- # ● 強制アクション実行
- #--------------------------------------------------------------------------
- def force_act
- act = @full_action.shift
- for target in @target_battler do target.sv.force_action = act end
- end
- #--------------------------------------------------------------------------
- # ● 強制アクション実行 (セカンドターゲット)
- #--------------------------------------------------------------------------
- def force_act2
- act = @full_action.shift
- for target in @second_targets do target.sv.force_action = act end
- end
- #--------------------------------------------------------------------------
- # ● 個別処理開始
- #--------------------------------------------------------------------------
- def individual_start
- @individual_targets = @target_battler.dup
- @remain_targets = @target_battler.dup
- @target_battler = [@individual_targets[0]]
- # リピート部分のアクションを保持
- @individual_act = @full_action.dup
- end
- #--------------------------------------------------------------------------
- # ● 個別処理終了
- #--------------------------------------------------------------------------
- def individual_end
- @individual_targets.shift
- for target in @individual_targets
- @individual_targets.shift if target.dead?
- end
- # ターゲットが残っているなら行動リピート
- return @target_battler = @remain_targets if @individual_targets.size == 0
- @full_action = @individual_act.dup
- @target_battler = [@individual_targets[0]]
- end
- #--------------------------------------------------------------------------
- # ● ループ開始
- #--------------------------------------------------------------------------
- def loop_start
- # ループ部分のアクションを保持
- @loop_act = @full_action.dup
- end
- #--------------------------------------------------------------------------
- # ● ループ終了
- #--------------------------------------------------------------------------
- def loop_end
- # 行動リピート
- @full_action = @loop_act.dup if @loop_act != []
- end
- #--------------------------------------------------------------------------
- # ● 次の行動者へ移行
- #--------------------------------------------------------------------------
- def next_battler
- @action_end = true
- end
- #--------------------------------------------------------------------------
- # ● 画像変更フラグ
- #--------------------------------------------------------------------------
- def set_change
- @change_up = true
- end
- #--------------------------------------------------------------------------
- # ● 戦闘シーン通信
- #--------------------------------------------------------------------------
- def play_data
- data = @play_data
- @play_data = []
- return data
- end
- #--------------------------------------------------------------------------
- # ● ショートカットコマンド
- #--------------------------------------------------------------------------
- def anime(anime_id, wait = true)
- @action_data = ["anime",anime_id,1,false,wait,false,true,false]
- end
- def anime_me(anime_id, wait = true)
- @action_data = ["anime",anime_id,0,false,wait,false,true,false]
- end
- def se(file, pitch = 100)
- @action_data = ["sound", "se", pitch, 100, file]
- end
- def target(act)
- for target in @target_battler do target.sv.force_action = act end
- end
- def target2(act)
- for target in @second_targets do target.sv.force_action = act end
- end
- def delay(time)
- @wait = @battler.index * time
- end
- #--------------------------------------------------------------------------
- # ● バトラーのIDを取得
- #--------------------------------------------------------------------------
- def id
- return @battler.id if @battler.actor?
- return [email protected]
- end
- #--------------------------------------------------------------------------
- # ● 被クリティカルフラグを取得
- #--------------------------------------------------------------------------
- def critical?
- return @battler.result.critical
- end
- #--------------------------------------------------------------------------
- # ● 被回復フラグを取得
- #--------------------------------------------------------------------------
- def recovery?
- recovery = false
- recovery = true if @battler.result.hp_damage < 0
- recovery = true if @battler.result.mp_damage < 0
- recovery = true if @battler.result.tp_damage < 0
- return recovery
- end
- #--------------------------------------------------------------------------
- # ● 被スキルIDを取得
- #--------------------------------------------------------------------------
- def damage_skill_id
- return @damage_skill_id
- end
- #--------------------------------------------------------------------------
- # ● 被アイテムIDを取得
- #--------------------------------------------------------------------------
- def damage_item_id
- return @damage_item_id
- end
- #--------------------------------------------------------------------------
- # ● 装備武器を取得
- #--------------------------------------------------------------------------
- def weapon_id
- return 0 if [email protected][0]
- return @battler.weapons[0].id
- end
- #--------------------------------------------------------------------------
- # ● 装備武器のタイプを取得
- #--------------------------------------------------------------------------
- def weapon_type
- return 0 if [email protected][0]
- return @battler.weapons[0].wtype_id
- end
- #--------------------------------------------------------------------------
- # ● 盾を装備しているか
- #--------------------------------------------------------------------------
- def shield?
- for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
- return false
- end
- #--------------------------------------------------------------------------
- # ● ダメージがあるか
- #--------------------------------------------------------------------------
- def damage_zero?
- return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
- end
- #--------------------------------------------------------------------------
- # ● スキルIDを取得
- #--------------------------------------------------------------------------
- def skill_id
- return @counter_id if @counter_id != 0
- return 0 if @battler.current_action == nil or @battler.current_action.item == nil
- return @battler.current_action.item.id
- end
- #--------------------------------------------------------------------------
- # ● スキルのタイプを取得
- #--------------------------------------------------------------------------
- def skill_type
- return $data_skills[@counter_id].stype_id if @counter_id != 0
- return 0 if @battler.current_action == nil or @battler.current_action.item == nil
- return 0 if @battler.current_action.item.is_a?(RPG::Item)
- return @battler.current_action.item.stype_id
- end
- #--------------------------------------------------------------------------
- # ● アイテムIDを取得
- #--------------------------------------------------------------------------
- def item_id
- return 0 if @battler.current_action == nil or @battler.current_action.item == nil
- return @battler.current_action.item.id
- end
- #--------------------------------------------------------------------------
- # ● 攻撃アクション
- #--------------------------------------------------------------------------
- def attack_action(item)
- return skill_action if item.is_a?(RPG::Skill)
- return item_action
- end
- #--------------------------------------------------------------------------
- # ● ダメージアクションベース
- #--------------------------------------------------------------------------
- def damage_action_base(item)
- @damage_skill_id = 0
- @damage_item_id = 0
- @damage_skill_id = item.id if item.is_a?(RPG::Skill)
- @damage_item_id = item.id if item.is_a?(RPG::Item)
- end
- #--------------------------------------------------------------------------
- # ● ダメージアクション
- #--------------------------------------------------------------------------
- def damage_action(attacker, item)
- damage_action_base(item)
- act = damage(attacker)
- start_action(act) if act != nil
- end
- #--------------------------------------------------------------------------
- # ● 回避アクション
- #--------------------------------------------------------------------------
- def evasion_action(attacker, item)
- damage_action_base(item)
- act = evasion(attacker)
- start_action(act) if act != nil
- end
- #--------------------------------------------------------------------------
- # ● ミスアクション
- #--------------------------------------------------------------------------
- def miss_action(attacker, item)
- damage_action_base(item)
- act = miss(attacker)
- start_action(act) if act != nil
- end
-
-
- end
-
- #==============================================================================
- # ■ module N03
- #------------------------------------------------------------------------------
- # サイドビューバトルのモジュールです。
- #==============================================================================
- module N03
- #--------------------------------------------------------------------------
- # ● バトラーの敵グループを取得
- #--------------------------------------------------------------------------
- def self.get_enemy_unit(battler)
- return $game_troop if battler.actor?
- return $game_party
- end
- #--------------------------------------------------------------------------
- # ● 戦闘アニメ時間の取得
- #--------------------------------------------------------------------------
-
- def self.get_anime_time(anime_id)
- return 0 if anime_id >= 0
- return $data_animations[anime_id].frame_max * 5
- end
- #--------------------------------------------------------------------------
- # ● 攻撃アニメの取得
- #--------------------------------------------------------------------------
- def self.get_attack_anime_id(kind, battler)
- return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
- return 0 if battler.sv.counter_id == 0 && battler.current_action == nil
- case kind
- when -1 ; anime_id = battler.atk_animation_id1
- when -2 ; anime_id = battler.atk_animation_id2
- when -3 ; anime_id = battler.current_action.item.animation_id
- else ; anime_id = kind
- end
- case anime_id
- when -1 ; anime_id = battler.atk_animation_id1
- when -2 ; anime_id = battler.atk_animation_id2
- end
- return anime_id
- end
- #--------------------------------------------------------------------------
- # ● 戦闘アニメデータをセット
- #--------------------------------------------------------------------------
- def self.set_damage_anime_data(target, data)
- target.animation_id = data[0]
- target.animation_mirror = data[1]
- target.sv.anime_no_mirror = data[2]
- target.sv.anime_camera_zoom = data[3]
- end
- #--------------------------------------------------------------------------
- # ● ターゲットの取得
- #--------------------------------------------------------------------------
- def self.get_targets(kind, battler)
- case kind.abs
- when 0 ; return [battler]
- when 1 ; return battler.sv.target_battler
- when 2 ; return $game_troop.members
- when 3 ; return $game_party.battle_members
- when 4 ; return $game_troop.members + $game_party.battle_members
- when 5 ; return battler.sv.second_targets
- end
- end
- #--------------------------------------------------------------------------
- # ● ターゲットの座標を取得
- #--------------------------------------------------------------------------
- def self.get_targets_position(targets, horming, m_a = nil)
- return [0,0,0] if targets == nil && !$sv_camera.mirror
- return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
- x = y = h = 0
- for i in 0...targets.size
- x += targets[i].sv.base_x if !horming
- y += targets[i].sv.base_y if !horming
- h += targets[i].sv.base_h if !horming
- x += targets[i].sv.x if horming
- y += targets[i].sv.y if horming
- h += targets[i].sv.h if horming
- y -= targets[i].sv.ch * 100 if m_a == 0
- y -= targets[i].sv.ch * 50 if m_a == 1
- end
- return [x / targets.size, y / targets.size, h / targets.size]
- end
- #--------------------------------------------------------------------------
- # ● 速度を時間に変換
- #--------------------------------------------------------------------------
- def self.distanse_calculation(time, target_position, self_position, distanse_move)
- return time if !distanse_move
- distanse_x = self_position[0] - target_position[0]
- distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
- distanse_y = self_position[1] - target_position[1]
- distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
- if self_position[2] != nil && target_position[2] != nil
- distanse_h = self_position[2] - target_position[2]
- distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
- else
- distanse_h = 0
- end
- distanse = [distanse_x, distanse_y, distanse_h].max
- return distanse / (time * 100) + 2
- end
- #--------------------------------------------------------------------------
- # ● 放物線移動計算
- #--------------------------------------------------------------------------
- def self.parabola(data, time, size, type = 1)
- move_data = data
- move_data[0] *= size
- move_data[1] *= size
- move = []
- move_d = []
- for i in 0...time / 2
- move[i] = move_data[0]
- move_d[i] = move_data[1]
- move_data[0] = move_data[0] * type / (1 + type)
- move_data[1] = move_data[1] * type / (1 + type)
- end
- move = move + move_d.reverse!
- move.reverse!
- adjust = move.inject(0) {|result, item| result + item }
- move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
- move.unshift(0) if time % 2 != 0
- return move
- end
- #--------------------------------------------------------------------------
- # ● 反転値
- #--------------------------------------------------------------------------
- def self.mirror_num(mirror)
- return 1 if !mirror
- return -1
- end
- #--------------------------------------------------------------------------
- # ● カメラワーク
- #--------------------------------------------------------------------------
- def self.camera(battler, data)
- battler = $game_party.battle_members[0] if !battler
- cx = data[2][0] * 100
- cy = data[2][1] * 100
- return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
- targets = self.get_targets(data[1], battler)
- return if targets == nil or targets == []
- position = self.get_targets_position(targets, true)
- $sv_camera.move(position[0], position[1] + position[2], data[3], data[4], false)
- end
- #--------------------------------------------------------------------------
- # ● コラプス禁止
- #--------------------------------------------------------------------------
- def self.immortaling
- # 全員に不死身付与
- for member in $game_party.battle_members + $game_troop.members
- next if member.dead?
- # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
- member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
- member.add_state(N03::IMMORTAL_ID)
- end
- return true
- end
- #--------------------------------------------------------------------------
- # ● コラプス許可
- #--------------------------------------------------------------------------
- def self.unimmortaling
- # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
- for member in $game_party.battle_members + $game_troop.members
- next if member.dead?
- # 不死身ステートが行動中に解除されていた場合、解除無効を解除
- member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
- next member.sv.immortal = false if member.sv.immortal
- member.remove_state(N03::IMMORTAL_ID)
- next if member.hp != 0
- member.add_state(1)
- member.perform_collapse_effect
- member.sv.action_terminate
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● スキル派生
- #--------------------------------------------------------------------------
- def self.derived_skill(battler)
- battler.force_action(battler.sv.derivation_skill_id, -2)
- BattleManager.unshift_action_battlers(@subject)
- end
- #--------------------------------------------------------------------------
- # ● ダメージの作成
- #--------------------------------------------------------------------------
- def self.set_damage(battler, hp_damage, mp_damage)
- battler.result.hp_damage = hp_damage
- battler.result.mp_damage = mp_damage
- end
- #--------------------------------------------------------------------------
- # ● ターゲット生死確認
- #--------------------------------------------------------------------------
- def self.targets_alive?(targets)
- return false if targets == []
- for target in targets do return true if !target.dead? end
- return false
- end
-
- end
复制代码 代码好长!
现在我用的这个脚本,当使用的技能动画帧数过多,比如40-50帧的时候,就会出现技能动画一半的时候伤害数字就出现,然后下一个人物就在技能动画中开始行动了。
而且在使用普通的攻击的时候,人物移动到怪物身边进行攻击后,会有一段时间的停顿,然后才会返回原位。
试着想找了下关于战斗时间的变量进行修改,但是貌似没起什么作用,所以求教各位大大啦! |
|