Jump to content
Rpg²S Forum

makeluke

Utenti
  • Posts

    54
  • Joined

  • Last visited

Posts posted by makeluke

  1. Scusa ho rimesso il link quello di prima era una copia che tenevo per me per provare gli script :P

    riprova a scaricare

     

    Edit: comunque hai ragione troppi errori ma non mi perdo d'animo mi butto su un nuovo progetto basandomi su gli errori

    che facevo nel primo, grazie per avermeli fatto notare...

  2. Ragazzi vi avverto che fà pena volevo che lo provaste per dirmi cosa cambiare o migliorare :P (abbiate bontà è il mio primo progetto!)

     

    Autore:

    Makeluke

     

    Link:

    http://www.mediafire...5xlqrazderrzxxw

     

    DESCRIZIONE:

     

    Una piccola descizione, Luca D. Dragon è un discendente dei draghi che vive con sua nonna, come lui suo padre da giovane ha

    viaggiato in lungo e in largo scoprendo nuovi posti! La storia inizia a scuola, dove incontra Simone in ritardo entrambi per la

    terza ora di scuola. Appunto per la terza la classe è andata in esplorazione ma non è tornata indietro.

    Una volta superata la grotta in fondo trovano la bleva che fa fuori l'intera classe insieme agli insegnanti

    Anne, ancora viva si unisce al gruppo per uccidere la bestia.

    Quando poi una volta sconfitta si rendono conto che non possono tornare indietro chiedono aiuto

    a dei Soldati Reali di passaggio i quali accorti delle capacità dei ragazzi vogliono portarli

    al cospetto del Re il quale vorrebbe far occupare a loro dell'ultimo drago rimasto

    ma si accorgono che non è poi così cattivo...

     

     

    Screenshot:

     

    http://i.imgur.com/LB5PJ.png

     

     

    http://i.imgur.com/VaNCQ.png

     

     

    http://i.imgur.com/UnSKP.png

     

    Crediti:

    Holy87 Simone Ascione Melosx Yanfly Engine Ace bStefan aka

  3. Scusa ç_ç ecco:

     

     

     

    #==============================================================================
    # ■ 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   :anime_plus_z		  # 戦闘アニメZ座標補正
     attr_accessor   :derivation_skill_id  # スキル派生ID
     attr_accessor   :immortal					  # 不死身フラグ
     attr_accessor   :mirage						  # 残像データ
     attr_accessor   :balloon_data		  # ふきだしデータ
     attr_accessor   :timing						  # 別バトラーからのタイミングデータ
     attr_accessor   :timing_targets		  # タイミングデータを渡す別バトラー
     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   :active						  # 行動権
    
     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)
    @battler = battler
    reset
     end
     #--------------------------------------------------------------------------
     # ● 初期化
     #--------------------------------------------------------------------------
     def reset
    @x = 0
    @y = 0
    @z = 0
    @h = 0
    @j = 0
    @c = 0
    @jump = []
    @curve = []
    @ox = 0
    @oy = 0
    @oy_adjust = 0
    @z_plus = 0
    @move_time = 0
    @angle = 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
    
    @wait = 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 = []
    @opacity = 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
    @anime_plus_z = true
    @derivation_skill_id = 0
    @immortal = false
    @mirage = []
    @play_data = []
    @balloon_data = []
    @picture = false
    @timing = []
    @timing_targets = []
    @color_set = []
    @color = []
    @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]
    @active = false
    
    @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
    @mirror = 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_flag)
    reset if first_action_flag
    set_data
    set_base_position if !@graphics_change
    set_graphics(bitmap_width, bitmap_height)
    set_target
    setup_graphics_change if @graphics_change
    first_battler_anime_set if first_action_flag
     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
     #--------------------------------------------------------------------------
     # ● ベース座標をセット 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_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
    @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
    @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
     end
     #--------------------------------------------------------------------------
     # ● ターゲットをセット
     #--------------------------------------------------------------------------
     def set_target(target = nil)
    @target_battler = target
    @target_battler = [@battler] if target == nil
    @second_targets = @target_battler
     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 first_battler_anime_set
    loop do
    	  update
    	  break if @action_data[0] == "motion"
    	  break if @action_data[0] == "move" && @action_data[8] != ""
    	  break if @full_action == []
    end
    start_action(first_action) if @battler.movable?
     end
     #--------------------------------------------------------------------------
     # ● アクション開始
     #--------------------------------------------------------------------------
     def start_action(kind = nil)
    return if @event_fix && $game_troop.interpreter.running?
    # ウェイト中の場合キャンセル
    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
    @event_fix = false
    @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
    @individual_targets = []
    action_setup
    # 待機アクションへ移行
    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
    return if @active
    start_action(@force_action)
    @force_action = ""
     end
     #--------------------------------------------------------------------------
     # ● アクション追加
     #--------------------------------------------------------------------------
     def add_action(kind)
    @full_action.push(kind)
     end
     #--------------------------------------------------------------------------
     # ● アクションの挿入
     #--------------------------------------------------------------------------
     def unshift_action(kind)
    @full_action.unshift(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 / 100 + @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 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 transition							  if action == "ts"
    # ふきだしアニメ表示の場合
    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 call_common_event				if action == "common"
    # 強制戦闘終了の場合
    return BattleManager.process_abort  if action == "battle_end"
    # 画面固定の場合
    return Graphics.freeze						if action == "graphics_freeze"
    # ダメージアニメの場合
    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 !@battler.actor? && 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 = 0 if @battler.hidden?
    @opacity_data = []
     end
     #--------------------------------------------------------------------------
     # ● バトラーアニメ実行
     #--------------------------------------------------------------------------
     def battler_anime(anime_data = nil)
    anime_data = @action_data.dup if anime_data == nil
    @graphic_file_index = anime_data[1] if !graphic_fix
    @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 or @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]
    @damage_anime_data[4] = data[9]
    @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
    return if @set_damage
    for target in targets do display_anime(targets, 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_flag = true
    for starter in starters
    	  for target in targets
    		data = @action_data.dup
    		data[17] = se_flag
    		@effect_data.push(data)
    		@m_a_targets.push(target)
    		@m_a_starter.push(starter)
    		se_flag = 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(targets, target, data)
    return if !N03.first_of_all_screen_anime(data[1], target, targets)
    target.animation_id		  = data[1]
    target.animation_mirror	  = data[8]
    target.sv.anime_horming	  = data[3]
    target.sv.anime_camera_zoom = data[6]
    target.sv.anime_no_mirror   = data[7]
    target.sv.anime_plus_z		= data[9]
     end
     #--------------------------------------------------------------------------
     # ● 戦闘アニメ拡張データの初期化
     #--------------------------------------------------------------------------
     def reset_anime_data
    @anime_no_mirror = false
    @anime_horming = false
    @anime_camera_zoom = false
    @timing_targets = []
    @anime_plus_z = true
     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 transition
    $sv_camera.perform_transition(@action_data)
     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
    	  for id in @action_data[4]
    		target.add_state(id) if @action_data[3] == "+"
    		target.remove_state(id) if @action_data[3] == "-"
    	  end
    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 !@battler.actor?
    @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@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] && !@battler.skill_learn?($data_skills[@action_data[3]])
    # コスト不足は派生不可なら
    return if !@action_data[2] && !@battler.skill_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
    for id in @action_data[1]
    	  $game_switches[id] = true if id > 0
    	  $sv_camera.switches[id.abs] = true  if id < 0
    end
    for id in @action_data[2]
    	  $game_switches[id] = false if id > 0
    	  $sv_camera.switches[id.abs] = false  if id < 0
    end
    $sv_camera.program_check
     end
     #--------------------------------------------------------------------------
     # ● ゲーム変数操作
     #--------------------------------------------------------------------------
     def variable
    # オペランドチェック
    operand = @action_data[3]
    operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
    # 変数操作で分岐
    case @action_data[2]
    when 0 ; $game_variables[@action_data[1]] = operand  # 代入
    when 1 ; $game_variables[@action_data[1]] += operand # 加算
    when 2 ; $game_variables[@action_data[1]] -= operand # 減算
    when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
    when 4 ; $game_variables[@action_data[1]] /= operand # 除算
    when 5 ; $game_variables[@action_data[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].include?(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 call_common_event
    $game_temp.reserve_common_event(@action_data[1])
    $sv_camera.event = true
    @event_fix = @action_data[2]
     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
    target(@full_action.shift)
     end
     #--------------------------------------------------------------------------
     # ● 強制アクション実行 (セカンドターゲット)
     #--------------------------------------------------------------------------
     def force_act2
    target2(@full_action.shift)
     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
    @active = false
     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 -@battler.id
     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 !@battler.weapons[0]
    return @battler.weapons[0].id
     end
     #--------------------------------------------------------------------------
     # ● 装備武器のタイプを取得
     #--------------------------------------------------------------------------
     def weapon_type
    return 0 if !@battler.weapons[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 0 if @battler.current_action.item.is_a?(RPG::Item)
    return @battler.current_action.item.id
     end
     #--------------------------------------------------------------------------
     # ● スキルのタイプを取得
     #--------------------------------------------------------------------------
     def skill_type
    return 0 if skill_id == 0
    return $data_skills[skill_id].stype_id
     end
     #--------------------------------------------------------------------------
     # ● スキル名を取得
     #--------------------------------------------------------------------------
     def skill_name
    return "" if skill_id == 0
    return $data_skills[skill_id].name
     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)
    return if @active
    start_action(act) if act != nil
     end
     #--------------------------------------------------------------------------
     # ● 回避アクション
     #--------------------------------------------------------------------------
     def evasion_action(attacker, item)
    damage_action_base(item)
    act = evasion(attacker)
    return if @active
    start_action(act) if act != nil
     end
     #--------------------------------------------------------------------------
     # ● ミスアクション
     #--------------------------------------------------------------------------
     def miss_action(attacker, item)
    damage_action_base(item)
    act = miss(attacker)
    return if @active
    start_action(act) if act != nil
     end
     #--------------------------------------------------------------------------
     # ● 閃きスクリプト併用処理
     #--------------------------------------------------------------------------
     def flash_action
    return "閃き"
     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_party_unit(battler)
    return $game_party if battler.actor?
    return $game_troop
     end
     #--------------------------------------------------------------------------
     # ● 戦闘アニメ時間の取得
     #--------------------------------------------------------------------------
     def self.get_anime_time(anime_id)
    return 0 if anime_id <= 0
    return $data_animations[anime_id].frame_max *4
     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
    case kind
    when -1 ; anime_id = battler.atk_animation_id1
    when -2 ; anime_id = battler.atk_animation_id2
    when -3
    	  if battler.current_action != nil
    		anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
    	  end
    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 if anime_id
    return 0
     end
     #--------------------------------------------------------------------------
     # ● 戦闘アニメデータをセット
     #--------------------------------------------------------------------------
     def self.set_damage_anime_data(targets, target, data)
    return if !first_of_all_screen_anime(data[0], target, targets)
    target.animation_id		  = data[0]
    target.animation_mirror	  = data[1]
    target.sv.anime_no_mirror   = data[2]
    target.sv.anime_camera_zoom = data[3]
    target.sv.anime_plus_z		= data[4]
     end  
     #--------------------------------------------------------------------------
     # ● ターゲットの取得
     #--------------------------------------------------------------------------
     def self.get_targets(kind, battler)
    case kind.abs
    when 0 ; return [battler].dup
    when 1 ; return battler.sv.target_battler.dup
    when 2 ; return get_enemy_unit(battler).members.dup
    when 3 ; return get_party_unit(battler).members.dup
    when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
    when 5 ; return battler.sv.second_targets.dup
    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) + 1
     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
    	  # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
    	  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(battler)
     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
     #--------------------------------------------------------------------------
     # ● ターゲットをセカンドターゲットへ
     #--------------------------------------------------------------------------
     def self.s_targets(battler)
    battler.sv.target_battler = battler.sv.second_targets
    return battler.sv.second_targets
     end
     #--------------------------------------------------------------------------
     # ● セカンドターゲットをターゲットへ
     #--------------------------------------------------------------------------
     def self.targets_set(battler)
    battler.sv.second_targets = battler.current_action.make_targets.compact
    battler.sv.target_battler = battler.sv.second_targets
     end
     #--------------------------------------------------------------------------
     # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
     #--------------------------------------------------------------------------
     def self.first_of_all_screen_anime(anime_id, target, targets)
    anime = $data_animations[anime_id]
    return false if !anime
    return true if anime.position != 3
    return false if anime.position == 3 && target != targets[0]
    #targets.delete(target)
    #target.sv.timing_targets = targets
    return true
     end
     #--------------------------------------------------------------------------
     # ● 戦闘不能付加攻撃か
     #--------------------------------------------------------------------------
     def self.dead_attack?(battler, item)
    for state in battler.atk_states
    	  return true if state == battler.death_state_id
    end
    for effect in item.effects
    	  return true if effect.code == 21 && effect.data_id == battler.death_state_id
    end
    return false
     end
    
    end
    

     

     

     

    Perfavore aiutatemi mi serve per finire il gioco T_T

  4. Sono più di uno! sideview battle camera sideviwe con i quadrati giapponesi ... cmq posto quello che mi dà il problema:

     

     

     #============================================================================== # ■ 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 :anime_plus_z # 戦闘アニメZ座標補正 attr_accessor :derivation_skill_id # スキル派生ID attr_accessor :immortal # 不死身フラグ attr_accessor :mirage # 残像データ attr_accessor :balloon_data # ふきだしデータ attr_accessor :timing # 別バトラーからのタイミングデータ attr_accessor :timing_targets # タイミングデータを渡す別バトラー 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 :active # 行動権 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) @battler = battler reset end #-------------------------------------------------------------------------- # ● 初期化 #-------------------------------------------------------------------------- def reset @x = 0 @y = 0 @z = 0 @h = 0 @j = 0 @c = 0 @jump = [] @curve = [] @ox = 0 @oy = 0 @oy_adjust = 0 @z_plus = 0 @move_time = 0 @angle = 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 @wait = 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 = [] @opacity = 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 @anime_plus_z = true @derivation_skill_id = 0 @immortal = false @mirage = [] @play_data = [] @balloon_data = [] @picture = false @timing = [] @timing_targets = [] @color_set = [] @color = [] @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] @active = false @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 @mirror = 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_flag) reset if first_action_flag set_data set_base_position if !@graphics_change set_graphics(bitmap_width, bitmap_height) set_target setup_graphics_change if @graphics_change first_battler_anime_set if first_action_flag 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 #-------------------------------------------------------------------------- # ● ベース座標をセット 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_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 @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch end #-------------------------------------------------------------------------- # ● ターゲットをセット #-------------------------------------------------------------------------- def set_target(target = nil) @target_battler = target @target_battler = [@battler] if target == nil @second_targets = @target_battler 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 first_battler_anime_set loop do update break if @action_data[0] == "motion" break if @action_data[0] == "move" && @action_data[8] != "" break if @full_action == [] end start_action(first_action) if @battler.movable? end #-------------------------------------------------------------------------- # ● アクション開始 #-------------------------------------------------------------------------- def start_action(kind = nil) return if @event_fix && $game_troop.interpreter.running? # ウェイト中の場合キャンセル 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 @event_fix = false @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 @individual_targets = [] action_setup # 待機アクションへ移行 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 return if @active start_action(@force_action) @force_action = "" end #-------------------------------------------------------------------------- # ● アクション追加 #-------------------------------------------------------------------------- def add_action(kind) @full_action.push(kind) end #-------------------------------------------------------------------------- # ● アクションの挿入 #-------------------------------------------------------------------------- def unshift_action(kind) @full_action.unshift(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 / 100 + @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 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 transition if action == "ts" # ふきだしアニメ表示の場合 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 call_common_event if action == "common" # 強制戦闘終了の場合 return BattleManager.process_abort if action == "battle_end" # 画面固定の場合 return Graphics.freeze if action == "graphics_freeze" # ダメージアニメの場合 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 !@battler.actor? && 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 = 0 if @battler.hidden? @opacity_data = [] end #-------------------------------------------------------------------------- # ● バトラーアニメ実行 #-------------------------------------------------------------------------- def battler_anime(anime_data = nil) anime_data = @action_data.dup if anime_data == nil @graphic_file_index = anime_data[1] if !graphic_fix @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 or @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] @damage_anime_data[4] = data[9] @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4] return if @set_damage for target in targets do display_anime(targets, 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_flag = true for starter in starters for target in targets data = @action_data.dup data[17] = se_flag @effect_data.push(data) @m_a_targets.push(target) @m_a_starter.push(starter) se_flag = 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(targets, target, data) return if !N03.first_of_all_screen_anime(data[1], target, targets) target.animation_id = data[1] target.animation_mirror = data[8] target.sv.anime_horming = data[3] target.sv.anime_camera_zoom = data[6] target.sv.anime_no_mirror = data[7] target.sv.anime_plus_z = data[9] end #-------------------------------------------------------------------------- # ● 戦闘アニメ拡張データの初期化 #-------------------------------------------------------------------------- def reset_anime_data @anime_no_mirror = false @anime_horming = false @anime_camera_zoom = false @timing_targets = [] @anime_plus_z = true 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 transition $sv_camera.perform_transition(@action_data) 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 for id in @action_data[4] target.add_state(id) if @action_data[3] == "+" target.remove_state(id) if @action_data[3] == "-" end 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 !@battler.actor? @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@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] && !@battler.skill_learn?($data_skills[@action_data[3]]) # コスト不足は派生不可なら return if !@action_data[2] && !@battler.skill_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 for id in @action_data[1] $game_switches[id] = true if id > 0 $sv_camera.switches[id.abs] = true if id < 0 end for id in @action_data[2] $game_switches[id] = false if id > 0 $sv_camera.switches[id.abs] = false if id < 0 end $sv_camera.program_check end #-------------------------------------------------------------------------- # ● ゲーム変数操作 #-------------------------------------------------------------------------- def variable # オペランドチェック operand = @action_data[3] operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0 # 変数操作で分岐 case @action_data[2] when 0 ; $game_variables[@action_data[1]] = operand # 代入 when 1 ; $game_variables[@action_data[1]] += operand # 加算 when 2 ; $game_variables[@action_data[1]] -= operand # 減算 when 3 ; $game_variables[@action_data[1]] *= operand # 乗算 when 4 ; $game_variables[@action_data[1]] /= operand # 除算 when 5 ; $game_variables[@action_data[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].include?(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 call_common_event $game_temp.reserve_common_event(@action_data[1]) $sv_camera.event = true @event_fix = @action_data[2] 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 target(@full_action.shift) end #-------------------------------------------------------------------------- # ● 強制アクション実行 (セカンドターゲット) #-------------------------------------------------------------------------- def force_act2 target2(@full_action.shift) 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 @active = false 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 -@battler.id 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 !@battler.weapons[0] return @battler.weapons[0].id end #-------------------------------------------------------------------------- # ● 装備武器のタイプを取得 #-------------------------------------------------------------------------- def weapon_type return 0 if !@battler.weapons[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 0 if @battler.current_action.item.is_a?(RPG::Item) return @battler.current_action.item.id end #-------------------------------------------------------------------------- # ● スキルのタイプを取得 #-------------------------------------------------------------------------- def skill_type return 0 if skill_id == 0 return $data_skills[skill_id].stype_id end #-------------------------------------------------------------------------- # ● スキル名を取得 #-------------------------------------------------------------------------- def skill_name return "" if skill_id == 0 return $data_skills[skill_id].name 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) return if @active start_action(act) if act != nil end #-------------------------------------------------------------------------- # ● 回避アクション #-------------------------------------------------------------------------- def evasion_action(attacker, item) damage_action_base(item) act = evasion(attacker) return if @active start_action(act) if act != nil end #-------------------------------------------------------------------------- # ● ミスアクション #-------------------------------------------------------------------------- def miss_action(attacker, item) damage_action_base(item) act = miss(attacker) return if @active start_action(act) if act != nil end #-------------------------------------------------------------------------- # ● 閃きスクリプト併用処理 #-------------------------------------------------------------------------- def flash_action return "閃き" 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_party_unit(battler) return $game_party if battler.actor? return $game_troop end #-------------------------------------------------------------------------- # ● 戦闘アニメ時間の取得 #-------------------------------------------------------------------------- def self.get_anime_time(anime_id) return 0 if anime_id <= 0 return $data_animations[anime_id].frame_max *4 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 case kind when -1 ; anime_id = battler.atk_animation_id1 when -2 ; anime_id = battler.atk_animation_id2 when -3 if battler.current_action != nil anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil end 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 if anime_id return 0 end #-------------------------------------------------------------------------- # ● 戦闘アニメデータをセット #-------------------------------------------------------------------------- def self.set_damage_anime_data(targets, target, data) return if !first_of_all_screen_anime(data[0], target, targets) target.animation_id = data[0] target.animation_mirror = data[1] target.sv.anime_no_mirror = data[2] target.sv.anime_camera_zoom = data[3] target.sv.anime_plus_z = data[4] end #-------------------------------------------------------------------------- # ● ターゲットの取得 #-------------------------------------------------------------------------- def self.get_targets(kind, battler) case kind.abs when 0 ; return [battler].dup when 1 ; return battler.sv.target_battler.dup when 2 ; return get_enemy_unit(battler).members.dup when 3 ; return get_party_unit(battler).members.dup when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup when 5 ; return battler.sv.second_targets.dup 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) + 1 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 # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる 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(battler) 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 #-------------------------------------------------------------------------- # ● ターゲットをセカンドターゲットへ #-------------------------------------------------------------------------- def self.s_targets(battler) battler.sv.target_battler = battler.sv.second_targets return battler.sv.second_targets end #-------------------------------------------------------------------------- # ● セカンドターゲットをターゲットへ #-------------------------------------------------------------------------- def self.targets_set(battler) battler.sv.second_targets = battler.current_action.make_targets.compact battler.sv.target_battler = battler.sv.second_targets end #-------------------------------------------------------------------------- # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行) #-------------------------------------------------------------------------- def self.first_of_all_screen_anime(anime_id, target, targets) anime = $data_animations[anime_id] return false if !anime return true if anime.position != 3 return false if anime.position == 3 && target != targets[0] #targets.delete(target) #target.sv.timing_targets = targets return true end #-------------------------------------------------------------------------- # ● 戦闘不能付加攻撃か #-------------------------------------------------------------------------- def self.dead_attack?(battler, item) for state in battler.atk_states return true if state == battler.death_state_id end for effect in item.effects return true if effect.code == 21 && effect.data_id == battler.death_state_id end return false end end 

     

  5. Il battle system è: sideview098 ace

     

    quando vado a fare le battaglie mi dà due errori:

    Quando combatto senza armi : Script Sideview line 1509: NoMethodError occurred undefined method frame_max for nil:Nilclass

     

    quando combatt con le armi: Script Sideview line 1509: Argomenterror occurred wrong nuber of arguments (1 for 0)

     

     

    l'errore si verifica subito dopo l'attacco , però esso non si verifica se 2 personaggi uccidono il nemico in un turno!

  6. quando vado a fare le battaglie mi dà due errori:

    Quando combatto senza armi : Script Sideview line 1509: NoMethodError occurred undefined method frame_max for nil:Nilclass

     

    quando combatt con le armi: Script Sideview line 1509: Argomenterror occurred wrong nuber of arguments (1 for 0)

     

     

    l'errore si verifica subito dopo l'attacco , però esso non si verifica se 2 personaggi uccidono il nemico in un turno!

×
×
  • Create New...