Project1

标题: LNX11a_XP和MOG_Battler_Motion冲突如何正整合? [打印本页]

作者: zhuyapeng119    时间: 2015-3-29 00:31
标题: LNX11a_XP和MOG_Battler_Motion冲突如何正整合?
LNX11a_XP的脚本
  1. #==============================================================================
  2. # ★ RGSS3-Extension
  3. # LNX11a_XPスタイルバトル
  4. #  戦闘画面をRPGツクールXP準拠のものに変更します。
  5. #
  6. #  version   : 1.11 (13/06/19)
  7. #  author    : ももまる
  8. #  reference : http://peachround.blog.fc2.com/blog-entry-9.html
  9. #
  10. #==============================================================================

  11. #==============================================================================
  12. # ■ LNXスクリプト導入情報
  13. #==============================================================================
  14. $lnx_include = {} if $lnx_include == nil
  15. $lnx_include[:lnx11a] = 111 # version
  16. p "OK:LNX11a_XPスタイルバトル ver1.11"

  17. module LNX11
  18.   #--------------------------------------------------------------------------
  19.   # ● 正規表現
  20.   #--------------------------------------------------------------------------
  21.   # アクター:バトラーグラフィック = "ファイル名"
  22.   RE_BATTLER = /(?:バトラーグラフィック|battler_graphic)\s*=\s*"([^"]*)"/i
  23.   # アイテム/スキル:使用時アニメ = アニメーションID
  24.   RE_USE_ANIMATION = /(?:使用時アニメ|use_animation)\s*=\s*(\d+)/i
  25.   # アイテム/スキル:ヘルプ説明 = "説明文"
  26.   RE_SHORT_DESCRIPTION =/(?:ヘルプ説明|short_description)\s*=\s*"([^"]*)"/i
  27.   # アイテム/スキル:ヘルプ非表示
  28.   RE_USABLEITEM_NO_DISPLAY = /(?:ヘルプ非表示|no_display)/i
  29.   # アイテム/スキル:使用時追加ウェイト = duration
  30.   RE_DISPLAY_WAIT = /(?:使用時追加ウェイト|display_wait)\s*=\s*(\d+)/i
  31.   # アイテム/スキル:終了時追加ウェイト = duration
  32.   RE_END_WAIT = /(?:終了時追加ウェイト|end_wait)\s*=\s*(\d+)/i
  33.   # 敵キャラ:通常攻撃アニメ = アニメーションID
  34.   RE_ATK_ANIMATION = /(?:通常攻撃アニメ|atk_animation)\s*=\s*(\d+)/i
  35.   # ステート:ステートアニメ = アニメーションID
  36.   RE_STATE_ANIMATION = /(?:ステートアニメ|state_animation)\s*=\s*(\d+)/i
  37.   # ステート:ポップアップ表示名 = "表示名"
  38.   RE_STATE_DISPLAY = /(?:ポップアップ表示名|display_name)\s*=\s*"([^"]*)"/i
  39.   # ステート:ポップアップ非表示
  40.   RE_STATE_NO_DISPLAY = /(?:ポップアップ非表示|no_display)/i
  41.   # ステート:付加ポップアップ非表示
  42.   RE_STATE_ADD_NO_DISPLAY = /(?:付加ポップアップ非表示|add_no_display)/i
  43.   # ステート:解除ポップアップ非表示
  44.   RE_STATE_REM_NO_DISPLAY = /(?:解除ポップアップ非表示|remove_no_display)/i
  45.   # ステート:有利なステート
  46.   RE_STATE_ADVANTAGE = /(?:有利なステート|advantage_state)/i
  47.   # ステート:ポップアップタイプ = type_id
  48.   RE_STATE_TYPE = /(?:ポップアップタイプ|popup_type)\s*=\s*(\d+)/i
  49.   # ステート:付加ポップアップタイプ = type_id
  50.   RE_STATE_ADD_TYPE = /(?:付加ポップアップタイプ|add_popup_type)\s*=\s*(\d+)/i
  51.   # ステート:解除ポップアップタイプ = type_id
  52.   RE_STATE_REM_TYPE=/(?:解除ポップアップタイプ|remove_popup_type)\s*=\s*(\d+)/i
  53.   # ステート:修飾文字非表示
  54.   RE_STATE_NO_DECORATION = /(?:修飾文字非表示|no_decoration)/i
  55.   # ステート:付加修飾文字非表示
  56.   RE_STATE_ADD_NO_DECORATION = /(?:付加修飾文字非表示|add_no_decoration)/i
  57.   # ステート:解除修飾文字非表示
  58.   RE_STATE_REM_NO_DECORATION = /(?:解除修飾文字非表示|remove_no_decoration)/i
  59.   # <<ver1.10>>
  60.   # ステート:付加ポップアップ表示名 = "表示名"
  61.   RE_STATE_ADD_DISPLAY =
  62.   /(?:付加ポップアップ表示名|add_display_name)\s*=\s*"([^"]*)"/i
  63.   # ステート:解除ポップアップ表示名 = "表示名"
  64.   RE_STATE_REM_DISPLAY =
  65.   /(?:解除ポップアップ表示名|remove_display_name)\s*=\s*"([^"]*)"/i
  66.   #--------------------------------------------------------------------------
  67.   # ● バトルステータス更新
  68.   #--------------------------------------------------------------------------
  69.   # LNX11.バトルステータス更新
  70.   def self.battle_status_refresh
  71.     $game_temp.battle_status_refresh
  72.   end
  73.   def self.バトルステータス更新
  74.     self.battle_status_refresh
  75.   end  
  76.   #--------------------------------------------------------------------------
  77.   # ● アクターエリア表示/非表示
  78.   #--------------------------------------------------------------------------
  79.   # LNX11.アクターエリア表示
  80.   def self.actor_area_show
  81.     self.actor_show
  82.     self.status_show
  83.     self.actor_bg_show
  84.   end
  85.   def self.アクターエリア表示
  86.     self.actor_area_show
  87.   end
  88.   # LNX11.アクターエリア非表示
  89.   def self.actor_area_hide
  90.     self.actor_hide
  91.     self.status_hide
  92.     self.actor_bg_hide
  93.   end
  94.   def self.アクターエリア非表示
  95.     self.actor_area_hide
  96.   end
  97.   #--------------------------------------------------------------------------
  98.   # ● アクター表示/非表示
  99.   #--------------------------------------------------------------------------
  100.   # LNX11.アクター表示
  101.   def self.actor_show
  102.     $game_party.actor_invisible = false
  103.   end
  104.   def self.アクター表示
  105.     self.actor_show
  106.   end
  107.   # LNX11.アクター非表示
  108.   def self.actor_hide
  109.     $game_party.actor_invisible = true
  110.   end
  111.   def self.アクター非表示
  112.     self.actor_hide
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● バトルステータス表示/非表示
  116.   #--------------------------------------------------------------------------
  117.   # LNX11.バトルステータス表示
  118.   def self.status_show
  119.     $game_party.status_invisible = false
  120.     self.battle_status_refresh
  121.   end
  122.   def self.バトルステータス表示
  123.     self.status_show
  124.   end
  125.   # LNX11.バトルステータス非表示
  126.   def self.status_hide
  127.     $game_party.status_invisible = true
  128.     self.battle_status_refresh
  129.   end
  130.   def self.バトルステータス非表示
  131.     self.status_hide
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● アクター背景表示/非表示
  135.   #--------------------------------------------------------------------------
  136.   # LNX11.アクター背景表示
  137.   def self.actor_bg_show
  138.     $game_party.actor_bg_invisible = false
  139.   end
  140.   def self.アクター背景表示
  141.     self.actor_bg_show
  142.   end
  143.   # LNX11.アクター背景非表示
  144.   def self.actor_bg_hide
  145.     $game_party.actor_bg_invisible = true
  146.   end
  147.   def self.アクター背景非表示
  148.     self.actor_bg_hide
  149.   end  
  150.   #--------------------------------------------------------------------------
  151.   # ● バトラーグラフィックのスクリプト指定
  152.   #--------------------------------------------------------------------------
  153.   # LNX11.バトラーグラフィック(id, filename)
  154.   def self.battler_graphic(id ,filename)
  155.     if id.is_a?(Numeric) && filename.is_a?(String)
  156.       p "LNX11a:バトラーグラフィックを変更しました:ID#{id} #{filename}"
  157.       $game_actors[id].battler_graphic_name = filename
  158.     else
  159.       errormes =  "LNX11a:バトラーグラフィック指定の引数が正しくありません。"
  160.       p errormes, "LNX11a:バトラーグラフィックの指定は行われませんでした。"
  161.       msgbox errormes
  162.     end
  163.   end
  164.   def self.バトラーグラフィック(id ,filename)
  165.     self.battler_graphic(id ,filename)
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 任意のポップアップを生成
  169.   #--------------------------------------------------------------------------
  170.   # LNX11.ポップアップ(battler, popup, type, color, deco)
  171.   def self.make_popup(battler, popup, type = 0, color = :hp_damage, deco = nil)
  172.     return unless $game_party.in_battle
  173.     target = self.battler_search(battler)
  174.     unless target.is_a?(Game_Battler)
  175.       p "LNX11a:任意のポップアップの生成に失敗しました。バトラー指定が"
  176.       p "LNX11a:間違っているか、バトラーが存在していない可能性があります。"
  177.       return
  178.     end
  179.     $game_temp.popup_data.popup_custom(target, popup, type, color, deco)   
  180.   end
  181.   def self.ポップアップ(battler, popup, type=0, color=:hp_damage, deco=nil)
  182.     self.make_popup(battler, popup, type, color, deco)
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● バトラー指定
  186.   #--------------------------------------------------------------------------
  187.   def self.battler_search(val)
  188.     if val.is_a?(String)
  189.       # 名前指定
  190.       a = ($game_party.members + $game_troop.members).find {|b| b.name == val }
  191.       return a
  192.     elsif val.is_a?(Array)
  193.       # インデックス指定
  194.       case val[0]
  195.       when :actor ; return $game_party.members[val[1]]
  196.       when :enemy ; return $game_troop.members[val[1]]
  197.       else        ; return nil
  198.       end
  199.     else
  200.       # オブジェクト
  201.       return val
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● バトルログプッシュ
  206.   #--------------------------------------------------------------------------
  207.   # LNX11.バトルログ(text)
  208.   def self.battle_log_push(text)
  209.     return unless $game_party.in_battle
  210.     case BATTLELOG_TYPE
  211.     when 0..1 # バトルログ
  212.       BattleManager.log_window.add_text(text)
  213.     when 2 # 簡易ヘルプ表示
  214.       BattleManager.helpdisplay_set(text, 0)
  215.     end
  216.   end
  217.   def self.バトルログ(text)
  218.     self.battle_log_push(text)
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● バトルログ消去
  222.   #--------------------------------------------------------------------------
  223.   # LNX11.バトルログ消去
  224.   def self.battle_log_clear
  225.     return unless $game_party.in_battle
  226.     case BATTLELOG_TYPE
  227.     when 0 # バトルログ
  228.       BattleManager.log_window.clear
  229.     when 1 # 蓄積型
  230.       BattleManager.log_window.clear
  231.       $game_temp.battlelog_clear = true
  232.       self.battle_wait(1)
  233.     when 2 # 簡易ヘルプ
  234.       BattleManager.helpdisplay_clear(0)
  235.     end
  236.   end
  237.   def self.バトルログ消去
  238.     self.battle_log_clear
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● バトルウェイト
  242.   #--------------------------------------------------------------------------
  243.   # LNX11.バトルウェイト(duration)
  244.   def self.battle_wait(duration)
  245.     return unless $game_party.in_battle
  246.     BattleManager.log_window.abs_wait(duration)
  247.   end
  248.   def self.バトルウェイト(duration)
  249.     self.battle_wait(duration)
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # ● 設定値
  253.   #  ※ 設定を変更する場合、LNX11aconf を使用してください。
  254.   #--------------------------------------------------------------------------
  255.   # <<ver1.00>>
  256.   if !$lnx_include[:lnx11aconf] ||
  257.      $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 100
  258.   DEFAULT_BATTLER_GRAPHIC = 0
  259.   DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
  260.   ACTOR_SCREEN_TONE       = false
  261.   TP_POPUP_TYPE           = 1
  262.   INDEXZERO_NO_POPUP      = true
  263.   ACTOR_BACKGROUND        = 2
  264.   ACTOR_BACKGROUND_HEIGHT = 112
  265.   ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
  266.   BATTLELOG_TYPE  =  1
  267.   STORAGE_LINE_NUMBER     = 6
  268.   STORAGE_LINE_HEIGHT     = 20
  269.   STORAGE_UP_MESSAGE_TIME = 90
  270.   STORAGE_TURNEND_CLEAR   = true
  271.   STORAGE_OFFSET = {:x => 0, :y => 6}
  272.   STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
  273.   STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
  274.   POPUP_ADD_WAIT          = 6
  275.   HELPDISPLAY_TYPE        = 1
  276.   HELPDISPLAT_WAIT        = 20
  277.   HELPDISPLAT_END_WAIT    = 24
  278.   HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
  279.   MESSAGE_TYPE  =  2
  280.   MESSAGE_WINDOW_BACKGROUND  = 1
  281.   MESSAGE_WINDOW_POSITION    = 0
  282.   MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
  283.                   :defeat       => [120, false], :escape    => [120, false],
  284.                   :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
  285.   MESSAGE_WINDOW_ENEMY_NAMES = false
  286.   LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)
  287.   DROPITEM_SE = RPG::SE.new("Item3", 80, 125)
  288.   ACTOR_CENTERING  =  true
  289.   ACTOR_SPACING_ADJUST = 32
  290.   ACTOR_OFFSET  = {:x => -16, :y => 0}
  291.   ACTOR_PADDING = {:side => 4, :bottom => 8}
  292.   SCREEN_ANIMATION_OFFSET = 128
  293.   STATUS_OFFSET = {:x => 64, :y => -12}
  294.   STATUS_SIDE_PADDING   = 6
  295.   STATUS_WIDTH          = 72
  296.   STATUS_AUTOADJUST     = true
  297.   STATUS_LINE_HEIGHT    = 22
  298.   STATUS_NAME_SIZE      = 20
  299.   STATUS_PARAM_SIZE     = 23
  300.   STATUS_GAUGE_OPACITY  = 192
  301.   ACTOR_COMMAND_NOSCROLL   = true
  302.   ACTOR_COMMAND_HORIZON    = false
  303.   ACTOR_COMMAND_ALIGNMENT  = 0
  304.   ACTOR_COMMAND_WIDTH      = 128
  305.   ACTOR_COMMAND_POSITION   = 0
  306.   ACTOR_COMMAND_Y_POSITION = 0
  307.   ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16}
  308.   PARTY_COMMAND_HORIZON   = true
  309.   PARTY_COMMAND_ALIGNMENT = 1
  310.   PARTY_COMMAND_WIDTH     = Graphics.width
  311.   PARTY_COMMAND_XY        = {:x => 0, :y => 0}
  312.   CURSOR_NAME       = ""
  313.   CURSOR_TONE     = Tone.new(-34, 0, 68)
  314.   CURSOR_ANI_SPEED  = 3
  315.   CURSOR_SPEED      = 3
  316.   CURSOR_BLINK      = true
  317.   CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
  318.   CURSOR_OFFSET     = {:x => 0, :y => 0}
  319.   HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  320.   HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
  321.   HELP_PARAM_WIDTH    = 72
  322.   RANDOMSCOPE_DISPLAY = 1
  323.   ACTOR_POPUP_POSITION   = 3
  324.   ENEMY_POPUP_POSITION   = 1
  325.   LEVELUP_POPUP_POSITION = 3
  326.   ACTOR_POPUP_Y     =  -100
  327.   LEVELUP_POPUP_Y   =  -112
  328.   NUMBER_FONT   =  ["Arial Black", "VL Gothic"]
  329.   TEXT_FONT     =  ["Arial Black", "VL Gothic"]
  330.   TEXT_FONT_MCS =  ["VL Gothic"]
  331.   LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  332.   SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  333.   TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
  334.   TEXT_SIZERATE_MCS = 0.9
  335.   DECORATION_NUMBER = {
  336.   :critical    => ["CRITICAL", 8], :weakness    => ["WEAKNESS", 8],
  337.   :resist      => ["RESIST"  , 8], :mp_damage   => ["\mp"     , 4],
  338.   :mp_plus     => ["\mp+"    , 4], :mp_minus    => ["\mp-"    , 4],
  339.   :tp_plus     => ["\tp+"    , 4], :tp_minus    => ["\tp-"    , 4]}
  340.   DECORATION_TEXT = {
  341.   :add_state   => "+%s",      :rem_state   => "-%s",
  342.   :add_buff    => "%s UP",    :add_debuff  => "%s DOWN",
  343.   :rem_buff    => "-%s Buff"}
  344.   POPUP_VOCAB = {
  345.   :miss        => "MISS!",      :counter     => "Counter",
  346.   :reflection  => "Reflection", :substitute  => "Substitute",
  347.   :levelup     => "LEVELUP!"}
  348.   POPUP_VOCAB_PARAMS = [
  349.   "MAX\hp","MAX\mp","ATK","DEF","MATK","MDEF","AGI","LUCK"]
  350.   POPUP_COLOR = {
  351.   :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  352.   :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  353.   :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  354.   :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  355.   :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  356.   :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  357.   :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  358.   :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  359.   :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  360.   :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  361.   :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  362.   :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  363.   :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  364.   :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  365.   :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  366.   :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  367.   :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  368.   :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  369.   :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  370.   }
  371.   POPUP_TYPE = {
  372.   :miss          =>   0,:hp_damage     =>   0,:hp_slipdamage =>   1,
  373.   :hp_recovery   =>   0,:hp_regenerate =>   1,:hp_drain      =>   0,
  374.   :hp_drainrecv  =>   0,:mp_damage     =>   0,:mp_slipdamage =>   1,
  375.   :mp_recovery   =>   0,:mp_regenerate =>   1,:mp_drain      =>   0,
  376.   :mp_drainrecv  =>   0,:mp_paycost    =>  -1,:tp_damage     =>   1,
  377.   :tp_charge     =>  -1,:tp_gain       =>   7,:tp_regenerate =>   1,
  378.   :tp_paycost    =>  -1,:add_state     =>   2,:rem_state     =>   2,
  379.   :add_badstate  =>   2,:rem_badstate  =>   2,:add_debuff    =>   3,
  380.   :rem_buff      =>   3,:counter       =>   6,:reflection    =>   6,
  381.   :substitute    =>   4,}
  382.   LARGE_MOVEMENT = {
  383.   :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  384.   :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
  385.                        :duration     =>   40,  :fadeout      =>  20 }
  386.   SMALL_MOVEMENT = {
  387.   :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  388.   :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
  389.                        :duration     =>   60,  :fadeout      =>  16 }
  390.   RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
  391.                        :duration     =>   40,  :fadeout      =>   8 }
  392.   SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
  393.                        :duration     =>   50,  :fadeout      =>  32 }
  394.   OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }
  395.   FIX_TARGET_CHECKE     = true
  396.   GUARD_TARGET_CHECKE   = true
  397.   SMART_TARGET_SELECT   = true
  398.   LAST_TARGET           = true
  399.   LAST_PARTY_COMMAND    = true
  400.   LAST_ACTOR_COMMAND    = true
  401.   TROOP_X_SORT          = true
  402.   PARTY_COMMAND_SKIP    = true
  403.   FITTING_LIST          = true
  404.   ENHANCED_WHITEN       = true
  405.   DISABLED_DAMAGE_SHAKE = true
  406.   TROOP_X_SCREEN_FIX    = true
  407.   TROOP_Y_OFFSET        = 0
  408.   end
  409.   # <<ver1.10>>
  410.   if !$lnx_include[:lnx11aconf] ||
  411.     $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 110
  412.   LARGE_NUMBER_NAME = ""
  413.   SMALL_NUMBER_NAME = ""
  414.   LARGE_BUFFS_NAME  = ""
  415.   SMALL_BUFFS_NAME  = ""
  416.   end
  417. end

  418. #==============================================================================
  419. # ■ [追加]:Popup_Data
  420. #------------------------------------------------------------------------------
  421. #  戦闘中のポップアップをまとめて扱うクラス。ポップアップスプライトの
  422. # initialize 時に自身を参照させて、ポップアップ内容を定義する際にも使います。
  423. #==============================================================================

  424. class Popup_Data
  425.   #--------------------------------------------------------------------------
  426.   # ● クラス変数
  427.   #--------------------------------------------------------------------------
  428.   @@make_methods = {} # ポップアップ作成メソッドのハッシュ
  429.   #--------------------------------------------------------------------------
  430.   # ● 定数(ポップアップのタイプID)
  431.   #--------------------------------------------------------------------------
  432.   SPRING_LARGE  = 0
  433.   SPRING_SMALL  = 1
  434.   RISING_LARGE  = 2
  435.   RISING_SMALL  = 3
  436.   SLIDING_LARGE = 4
  437.   SLIDING_SMALL = 5
  438.   OVERLAY_LARGE = 6
  439.   OVERLAY_SMALL = 7
  440.   LEVELUP       = :levelup
  441.   #--------------------------------------------------------------------------
  442.   # ● 公開インスタンス変数
  443.   #--------------------------------------------------------------------------
  444.   attr_accessor :type       # ポップアップのタイプ
  445.   attr_accessor :popup      # 表示する内容
  446.   attr_accessor :popup_size # ポップアップの大きさ
  447.   attr_accessor :color      # 色
  448.   attr_accessor :deco       # 修飾文字
  449.   attr_accessor :battler    # ポップアップするバトラー
  450.   attr_accessor :delay      # 表示開始までの時間
  451.   attr_accessor :viewport   # ビューポート
  452.   attr_accessor :popup_wait # ポップアップウェイト
  453.   attr_accessor :buff_data  # 能力強化/弱体 <<ver1.10>>
  454.   #--------------------------------------------------------------------------
  455.   # ● オブジェクト初期化
  456.   #--------------------------------------------------------------------------
  457.   def initialize
  458.     @sprites = []
  459.     @viewport = Viewport.new
  460.     @viewport.z = 120 # ポップアップの Z 座標
  461.     spb = Sprite_PopupBase.new
  462.     spb.create_number
  463.     spb.dispose
  464.     set_methods
  465.     refresh
  466.   end
  467.   #--------------------------------------------------------------------------
  468.   # ● ポップアップ生成メソッドの登録
  469.   #--------------------------------------------------------------------------
  470.   def set_methods
  471.     @@make_methods[SPRING_LARGE]  = method(:makeup_spring_large)
  472.     @@make_methods[SPRING_SMALL]  = method(:makeup_spring_small)
  473.     @@make_methods[RISING_LARGE]  = method(:makeup_rising_large)
  474.     @@make_methods[RISING_SMALL]  = method(:makeup_rising_small)
  475.     @@make_methods[SLIDING_LARGE] = method(:makeup_sliding_large)
  476.     @@make_methods[SLIDING_SMALL] = method(:makeup_sliding_small)
  477.     @@make_methods[OVERLAY_LARGE] = method(:makeup_overlay_large)
  478.     @@make_methods[OVERLAY_SMALL] = method(:makeup_overlay_small)
  479.     @@make_methods[LEVELUP]       = method(:makeup_levelup)
  480.   end
  481.   #--------------------------------------------------------------------------
  482.   # ● スプライト解放
  483.   #--------------------------------------------------------------------------
  484.   def dispose
  485.     @sprites.each {|sprite| sprite.dispose}
  486.     @viewport.dispose
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● フレーム更新
  490.   #--------------------------------------------------------------------------
  491.   def update
  492.     @sprites.each do |sprite|
  493.       sprite.update
  494.       @sprites.delete(sprite) if sprite.disposed?
  495.     end
  496.   end
  497.   #--------------------------------------------------------------------------
  498.   # ● リフレッシュ
  499.   #--------------------------------------------------------------------------
  500.   def refresh
  501.     @type  = 0
  502.     @popup = nil
  503.     @popup_size = :large
  504.     @color = :hp_damage
  505.     @deco = ["", -1] # [テキスト, テキストの位置]
  506.     @battler = nil
  507.     @delay = 0
  508.     @popup_wait = false
  509.     # <<ver1.10>> 能力強化/弱体ポップアップを画像で表示する際に利用
  510.     @buff_data = [-1, -1] # [能力, 強化or弱体or解除]
  511.   end
  512.   #--------------------------------------------------------------------------
  513.   # ● ポップアップを生成
  514.   #--------------------------------------------------------------------------
  515.   def makeup
  516.     if @@make_methods[@type]
  517.       @@make_methods[@type].call
  518.       @popup_wait = true
  519.     end
  520.   end
  521.   #--------------------------------------------------------------------------
  522.   # ● ポップアップウェイト
  523.   #  バトルログタイプが [2:ヘルプ表示] の場合のみ実行されます。
  524.   #--------------------------------------------------------------------------
  525.   def add_wait
  526.     return if LNX11::BATTLELOG_TYPE != 2 || !@popup_wait
  527.     LNX11::POPUP_ADD_WAIT.times {BattleManager.log_window.abs_wait(1)}
  528.     @popup_wait = false
  529.   end
  530.   #--------------------------------------------------------------------------
  531.   # ● ポップアップ生成メソッド
  532.   #  これらのメソッドを @@make_methods に登録して呼び出します。
  533.   # これはポップアップタイプの拡張を容易にするための仕様です。
  534.   #--------------------------------------------------------------------------
  535.   def makeup_spring_large
  536.     # @type   0 : 跳ねるポップアップ(大)
  537.     @popup_size = :large
  538.     @sprites.push(Sprite_PopupSpring.new(self))
  539.   end
  540.   def makeup_spring_small
  541.     # @type   1 : 跳ねるポップアップ(小)
  542.     @popup_size = :small
  543.     @delay = @battler.popup_delay[1]
  544.     @sprites.push(Sprite_PopupSpring.new(self))
  545.   end
  546.   def makeup_rising_large
  547.     # @type   2 : ゆっくり上昇(大)
  548.     @popup_size = :large
  549.     @delay = @battler.popup_delay[2]
  550.     @sprites.push(Sprite_PopupRising.new(self))
  551.   end
  552.   def makeup_rising_small
  553.     # @type   3 : ゆっくり上昇(小)
  554.     @popup_size = :small      
  555.     @delay = @battler.popup_delay[2]
  556.     @sprites.push(Sprite_PopupRising.new(self))
  557.   end
  558.   def makeup_sliding_large
  559.     # @type   4 : スライド(大)
  560.     @popup_size = :large
  561.     @delay = @battler.popup_delay[3]
  562.     @sprites.push(Sprite_PopupSliding.new(self))
  563.   end
  564.   def makeup_sliding_small
  565.     # @type   5 : スライド(小)
  566.     @popup_size = :small
  567.     @delay = @battler.popup_delay[3]
  568.     @sprites.push(Sprite_PopupSliding.new(self))      
  569.   end
  570.   def makeup_overlay_large
  571.     # @type   6 : オーバーレイ(大)
  572.     @popup_size = :large
  573.     @sprites.push(Sprite_PopupOverlay.new(self))
  574.   end
  575.   def makeup_overlay_small
  576.     # @type   7 : オーバーレイ(小)
  577.     @popup_size = :small
  578.     @sprites.push(Sprite_PopupOverlay.new(self))
  579.   end
  580.   def makeup_levelup
  581.     # @type :levelup : レベルアップ
  582.     @battler.popup_delay[3] = 0
  583.     @popup_size = :large
  584.     @sprites.push(Sprite_PopupLevelUp.new(self))
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● TP のポップアップが有効か?
  588.   #--------------------------------------------------------------------------
  589.   def tp_popup_enabled?(target)
  590.     return false if !$data_system.opt_display_tp
  591.     return true  if LNX11::TP_POPUP_TYPE == 0 # すべてポップアップ
  592.     return true  if LNX11::TP_POPUP_TYPE == 1 && target.actor? # アクターのみ
  593.     false # ポップアップしない
  594.   end
  595.   #--------------------------------------------------------------------------
  596.   # ● 任意のポップアップ
  597.   #--------------------------------------------------------------------------
  598.   def popup_custom(target, popup, type = 0, color = :hp_damage, deco = nil)
  599.     refresh
  600.     @battler = target
  601.     @popup = popup
  602.     type = LNX11::POPUP_TYPE[type] if type.is_a?(Symbol)
  603.     @type = type
  604.     @color = color
  605.     @deco = LNX11::DECORATION_NUMBER[deco] if deco.is_a?(Symbol)
  606.     # ポップアップ作成
  607.     makeup
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ● レベルアップのポップアップ
  611.   #--------------------------------------------------------------------------
  612.   def popup_levelup(target)
  613.     # 戦闘に参加している場合のみポップアップ
  614.     return unless $game_party.battle_members.include?(target)
  615.     refresh
  616.     @type = :levelup
  617.     @battler = target
  618.     @popup = LNX11::POPUP_VOCAB[:levelup]
  619.     @color = :levelup
  620.     # ポップアップ作成
  621.     makeup
  622.   end
  623.   #--------------------------------------------------------------------------
  624.   # ● 単一テキストのポップアップ
  625.   #--------------------------------------------------------------------------
  626.   def popup_text(target, type)
  627.     refresh
  628.     @type = LNX11::POPUP_TYPE[type]
  629.     @battler = target
  630.     @popup = LNX11::POPUP_VOCAB[type]
  631.     @color = type
  632.     # ポップアップ作成
  633.     makeup
  634.   end
  635.   #--------------------------------------------------------------------------
  636.   # ● ミスのポップアップ
  637.   #--------------------------------------------------------------------------
  638.   def popup_miss(target, item)
  639.     refresh
  640.     @type = LNX11::POPUP_TYPE[:miss]
  641.     @battler = target
  642.     @popup = LNX11::POPUP_VOCAB[:miss]
  643.     @color = :hp_damage
  644.     # ポップアップ作成
  645.     makeup
  646.   end
  647.   #--------------------------------------------------------------------------
  648.   # ● HP ダメージポップアップ
  649.   #--------------------------------------------------------------------------
  650.   def popup_hp_damage(target, item)
  651.     return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
  652.     refresh
  653.     @popup = target.result.hp_damage
  654.     @battler = target
  655.     if target.result.hp_drain > 0
  656.       # 被吸収
  657.       @type = LNX11::POPUP_TYPE[:hp_drain]
  658.       # 弱点/耐性
  659.       if target.result.element_rate > 1
  660.         @deco = LNX11::DECORATION_NUMBER[:weakness]
  661.         @color = :weakness
  662.       elsif target.result.element_rate < 1
  663.         @deco = LNX11::DECORATION_NUMBER[:resist]
  664.         @color = :resist
  665.       else
  666.         @color = :hp_damage
  667.       end
  668.     elsif target.result.hp_damage > 0
  669.       # ダメージ
  670.       @type = LNX11::POPUP_TYPE[:hp_damage]
  671.       @color = :hp_damage
  672.       if target.result.critical
  673.         # クリティカル
  674.         @deco = LNX11::DECORATION_NUMBER[:critical]
  675.         @color = :critical
  676.       end
  677.       # 弱点/耐性
  678.       if target.result.element_rate > 1
  679.         @deco = LNX11::DECORATION_NUMBER[:weakness]
  680.         @color = :weakness if @color != :critical
  681.       elsif target.result.element_rate < 1
  682.         @deco = LNX11::DECORATION_NUMBER[:resist]
  683.         @color = :resist if @color != :critical
  684.       end
  685.     elsif target.result.hp_damage < 0
  686.       # 回復
  687.       @type = LNX11::POPUP_TYPE[:hp_recovery]
  688.       @color = :hp_recovery
  689.     else
  690.       # 0 ダメージ
  691.       @type = LNX11::POPUP_TYPE[:hp_damage]
  692.       @color = :hp_damage
  693.     end
  694.     # ポップアップ作成
  695.     makeup
  696.   end
  697.   #--------------------------------------------------------------------------
  698.   # ● MP ダメージポップアップ
  699.   #--------------------------------------------------------------------------
  700.   def popup_mp_damage(target, item)
  701.     return if target.dead? || target.result.mp_damage == 0
  702.     refresh
  703.     @popup = target.result.mp_damage
  704.     @battler = target
  705.     @deco = LNX11::DECORATION_NUMBER[:mp_damage]
  706.     if target.result.mp_drain > 0
  707.       # 被吸収
  708.       @type = LNX11::POPUP_TYPE[:mp_drain]
  709.       @color = :mp_damage
  710.     elsif target.result.mp_damage > 0
  711.       # ダメージ
  712.       @type = LNX11::POPUP_TYPE[:mp_damage]
  713.       @color = :mp_damage
  714.     elsif target.result.mp_damage < 0
  715.       # 回復
  716.       @type = LNX11::POPUP_TYPE[:mp_recovery]
  717.       @color = :mp_recovery
  718.     end
  719.     # ポップアップ作成
  720.     makeup
  721.   end
  722.   #--------------------------------------------------------------------------
  723.   # ● TP ダメージポップアップ
  724.   #--------------------------------------------------------------------------
  725.   def popup_tp_damage(target, item)
  726.     return unless tp_popup_enabled?(target)
  727.     return if target.dead? || target.result.tp_damage == 0
  728.     refresh
  729.     @popup = target.result.tp_damage
  730.     @battler = target
  731.     deco = target.result.tp_damage > 0 ? :tp_minus : :tp_plus
  732.     @deco = LNX11::DECORATION_NUMBER[deco]
  733.     @type = LNX11::POPUP_TYPE[:tp_damage]
  734.     @color = :tp_damage
  735.     # ポップアップ作成
  736.     makeup
  737.   end
  738.   #--------------------------------------------------------------------------
  739.   # ● HP 吸収回復
  740.   #--------------------------------------------------------------------------
  741.   def popup_hp_drain(target, hp_drain)
  742.     return if hp_drain == 0
  743.     refresh
  744.     @popup = hp_drain
  745.     @battler = target
  746.     @type = LNX11::POPUP_TYPE[:hp_drainrecv]
  747.     @color = :hp_recovery
  748.     # ポップアップ作成
  749.     makeup
  750.   end
  751.   #--------------------------------------------------------------------------
  752.   # ● MP 吸収回復
  753.   #--------------------------------------------------------------------------
  754.   def popup_mp_drain(target, mp_drain)
  755.     return if mp_drain == 0
  756.     refresh
  757.     @popup = mp_drain
  758.     @battler = target
  759.     @deco = LNX11::DECORATION_NUMBER[:mp_damage]
  760.     @type = LNX11::POPUP_TYPE[:mp_drainrecv]
  761.     @color = :mp_recovery
  762.     # ポップアップ作成
  763.     makeup
  764.   end
  765.   #--------------------------------------------------------------------------
  766.   # ● ステート付加のポップアップ
  767.   #--------------------------------------------------------------------------
  768.   def popup_added_states(target)
  769.     refresh
  770.     @battler = target
  771.     target.result.added_state_objects.each do |state|
  772.       next if state.id == target.death_state_id
  773.       next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
  774.       next if state.add_no_display?      
  775.       if state.add_no_decoration?
  776.         @popup = state.add_display_name
  777.       else
  778.         @popup = sprintf(LNX11::DECORATION_TEXT[:add_state],
  779.                          state.add_display_name)
  780.       end
  781.       type = state.advantage? ? :add_state : :add_badstate
  782.       if state.add_popup_type
  783.         @type = state.add_popup_type
  784.       else
  785.         @type = LNX11::POPUP_TYPE[type]
  786.       end
  787.       @color = type
  788.       # ポップアップ作成
  789.       makeup
  790.     end
  791.   end
  792.   #--------------------------------------------------------------------------
  793.   # ● ステート解除のポップアップ
  794.   #--------------------------------------------------------------------------
  795.   def popup_removed_states(target)
  796.     refresh
  797.     @type = LNX11::POPUP_TYPE[:rem_badstate]
  798.     @battler = target
  799.     target.result.removed_state_objects.each do |state|
  800.       next if state.id == target.death_state_id
  801.       next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
  802.       next if state.remove_no_display?
  803.       if state.remove_no_decoration?
  804.         @popup = state.remove_display_name
  805.       else
  806.         @popup = sprintf(LNX11::DECORATION_TEXT[:rem_state],
  807.                          state.remove_display_name)
  808.       end
  809.       type = state.advantage? ? :rem_state : :rem_badstate
  810.       if state.remove_popup_type
  811.         @type = state.remove_popup_type
  812.       else
  813.         @type = LNX11::POPUP_TYPE[type]
  814.       end
  815.       @color = type
  816.       # ポップアップ作成
  817.       makeup
  818.     end
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # ● 能力強化/弱体のポップアップ
  822.   #--------------------------------------------------------------------------
  823.   def popup_buffs(target, buffs, fmt)
  824.     return if buffs.empty?
  825.     refresh
  826.     @battler = target
  827.     case fmt
  828.     when Vocab::BuffAdd
  829.       buffdeco = LNX11::DECORATION_TEXT[:add_buff]
  830.       @type = LNX11::POPUP_TYPE[:add_buff]
  831.       @color = :add_buff
  832.       @buff_data[1] = 0
  833.     when Vocab::DebuffAdd
  834.       buffdeco = LNX11::DECORATION_TEXT[:add_debuff]
  835.       @type = LNX11::POPUP_TYPE[:add_debuff]
  836.       @color = :add_debuff
  837.       @buff_data[1] = 1
  838.     when Vocab::BuffRemove
  839.       buffdeco = LNX11::DECORATION_TEXT[:rem_buff]
  840.       @type = LNX11::POPUP_TYPE[:rem_buff]
  841.       @color = :rem_buff
  842.       @buff_data[1] = 2
  843.     end
  844.     buffs.each do |param_id|
  845.       @popup = sprintf(buffdeco, LNX11::POPUP_VOCAB_PARAMS[param_id])
  846.       @buff_data[0] = param_id
  847.       # ポップアップ作成
  848.       makeup
  849.       @popup_wait = false
  850.     end
  851.   end
  852.   #--------------------------------------------------------------------------
  853.   # ● HP 再生
  854.   #--------------------------------------------------------------------------
  855.   def popup_regenerate_hp(target, hp_damage, paycost = false)
  856.     return if hp_damage == 0
  857.     refresh
  858.     @popup = hp_damage
  859.     @battler = target
  860.     if hp_damage > 0
  861.       # ダメージ
  862.       @type = LNX11::POPUP_TYPE[:hp_slipdamage]
  863.       @color = :hp_damage
  864.     elsif hp_damage < 0
  865.       # 回復
  866.       @type = LNX11::POPUP_TYPE[:hp_regenerate]
  867.       @color = :hp_recovery
  868.     end
  869.     # ポップアップ作成
  870.     makeup
  871.   end
  872.   #--------------------------------------------------------------------------
  873.   # ● MP 再生
  874.   #--------------------------------------------------------------------------
  875.   def popup_regenerate_mp(target, mp_damage, paycost = false)
  876.     return if mp_damage == 0
  877.     refresh
  878.     @popup = mp_damage
  879.     @battler = target
  880.     @deco = LNX11::DECORATION_NUMBER[mp_damage > 0 ? :mp_minus : :mp_plus]
  881.     if mp_damage > 0
  882.       # ダメージ
  883.       @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_slipdamage]
  884.       @color = :mp_damage
  885.     elsif mp_damage < 0
  886.       # 回復
  887.       @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_regenerate]
  888.       @color = :mp_recovery
  889.     end
  890.     # ポップアップ作成
  891.     makeup
  892.   end
  893.   #--------------------------------------------------------------------------
  894.   # ● TP 再生
  895.   #--------------------------------------------------------------------------
  896.   def popup_regenerate_tp(target, tp_damage, paycost = false)
  897.     return unless tp_popup_enabled?(target)
  898.     return if tp_damage == 0
  899.     refresh
  900.     @popup = tp_damage
  901.     @battler = target
  902.     @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
  903.     @type = LNX11::POPUP_TYPE[paycost ? :tp_paycost : :tp_regenerate]
  904.     @color = :tp_damage
  905.     # ポップアップ作成
  906.     makeup
  907.   end
  908.   #--------------------------------------------------------------------------
  909.   # ● TP チャージ
  910.   #--------------------------------------------------------------------------
  911.   def popup_tp_charge(target, tp_damage)
  912.     return unless tp_popup_enabled?(target)
  913.     return if tp_damage == 0
  914.     refresh
  915.     @popup = tp_damage
  916.     @battler = target
  917.     @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
  918.     @type = LNX11::POPUP_TYPE[:tp_charge]
  919.     @color = :tp_damage
  920.     # ポップアップ作成
  921.     makeup
  922.   end
  923.   #--------------------------------------------------------------------------
  924.   # ● TP 得
  925.   #--------------------------------------------------------------------------
  926.   def popup_tp_gain(target, tp_damage)
  927.     return unless tp_popup_enabled?(target)
  928.     return if tp_damage == 0
  929.     refresh
  930.     @popup = tp_damage
  931.     @battler = target
  932.     @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
  933.     @type = LNX11::POPUP_TYPE[:tp_gain]
  934.     @color = :tp_damage
  935.     # ポップアップ作成
  936.     makeup
  937.   end
  938. end

  939. #==============================================================================
  940. # ■ [追加]:Sprite_PopupBase
  941. #------------------------------------------------------------------------------
  942. #  戦闘中のダメージ表示等をポップアップ表示するためのスプライトの
  943. # スーパークラス。サブクラスで細かい動きを定義します。
  944. #==============================================================================

  945. class Sprite_PopupBase < Sprite
  946.   #--------------------------------------------------------------------------
  947.   # ● クラス変数
  948.   #--------------------------------------------------------------------------
  949.   @@cache_number = []
  950.   @@cache_text   = {}
  951.   @@w = []
  952.   @@h = []
  953.   @@priority = 0
  954.   @@count    = 0
  955.   @@buf_bitmap = nil
  956.   #--------------------------------------------------------------------------
  957.   # ● 定数
  958.   #--------------------------------------------------------------------------
  959.   NUMBER_COLOR_SIZE = 8
  960.   NUMBERS    = [0,1,2,3,4,5,6,7,8,9]
  961.   COLOR_KEYS = LNX11::POPUP_COLOR.keys
  962.   #--------------------------------------------------------------------------
  963.   # ● オブジェクト初期化
  964.   #     data : ポップアップデータ
  965.   #--------------------------------------------------------------------------
  966.   def initialize(data = nil)
  967.     if data == nil || !data.battler.battle_member?
  968.       # 非表示のポップアップ
  969.       super(nil)
  970.       @remove = true
  971.       return
  972.     end
  973.     # ポップアップデータを適用
  974.     super(data.viewport)
  975.     @battler = data.battler # ポップアップを表示するバトラー
  976.     @delay   = data.delay   # ディレイ(遅延) ※サブクラスによって扱いが違います
  977.     @popup_size = data.popup_size # ポップアップの大きさ 大/小
  978.     # 基本設定
  979.     @duration = 60  # 消え始める時間
  980.     @fadeout  = 16  # 消える速さ
  981.     @rx = ry  = 0   # XY座標
  982.     # Z座標
  983.     @rz = base_z * 128 + priority
  984.     popup_add
  985.     self.visible = false
  986.     # ポップアップデータからビットマップを作成
  987.     if data.popup.is_a?(Numeric)
  988.       # ダメージ値
  989.       self.bitmap = number(data.popup, data.color, data.popup_size, data.deco)
  990.     elsif data.popup.is_a?(String)
  991.       # テキスト
  992.       self.bitmap = text(data.popup, data.color,
  993.                          data.popup_size, data.buff_data)
  994.     end
  995.     # 位置設定
  996.     self.ox = self.width  / 2
  997.     self.oy = self.height / 2
  998.     set_position
  999.     start
  1000.   end
  1001.   #--------------------------------------------------------------------------
  1002.   # ● 解放
  1003.   #--------------------------------------------------------------------------
  1004.   def dispose
  1005.     popup_remove
  1006.     terminate
  1007.     self.bitmap.dispose if self.bitmap
  1008.     super
  1009.   end
  1010.   #--------------------------------------------------------------------------
  1011.   # ● フレーム更新
  1012.   #--------------------------------------------------------------------------
  1013.   def update
  1014.     return if removed? || delay?
  1015.     update_popup
  1016.     update_xy
  1017.     @duration -= 1
  1018.     self.opacity -= @fadeout if @duration <= 0
  1019.     dispose if self.opacity == 0
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 開始処理(サブクラスで定義)
  1023.   #--------------------------------------------------------------------------
  1024.   def start
  1025.   end
  1026.   #--------------------------------------------------------------------------
  1027.   # ● 終了処理(サブクラスで定義)
  1028.   #--------------------------------------------------------------------------
  1029.   def terminate
  1030.   end
  1031.   #--------------------------------------------------------------------------
  1032.   # ● フレーム更新(サブクラスで定義)
  1033.   #--------------------------------------------------------------------------
  1034.   def update_popup
  1035.   end
  1036.   #--------------------------------------------------------------------------
  1037.   # ● ポップアップ Z 座標
  1038.   #--------------------------------------------------------------------------
  1039.   def base_z
  1040.     0
  1041.   end
  1042.   #--------------------------------------------------------------------------
  1043.   # ● ポップアップのプライオリティを返す
  1044.   #  同一Z座標のポップアップで、後から生成されたものが手前に表示されるように
  1045.   # Z座標の修正値をクラス変数で管理しています。
  1046.   #--------------------------------------------------------------------------
  1047.   def priority
  1048.     @@priority * 2
  1049.   end
  1050.   #--------------------------------------------------------------------------
  1051.   # ● ポップアップ追加
  1052.   #--------------------------------------------------------------------------
  1053.   def popup_add
  1054.     @@priority += 1
  1055.     @@count += 1
  1056.   end
  1057.   #--------------------------------------------------------------------------
  1058.   # ● ポップアップ消去
  1059.   #--------------------------------------------------------------------------
  1060.   def popup_remove
  1061.     @remove = true
  1062.     @@count -= 1
  1063.     @@priority = 0 if @@count <= 0
  1064.   end
  1065.   #--------------------------------------------------------------------------
  1066.   # ● ディレイが残っている?
  1067.   #  サブクラスの update メソッドで使用します。
  1068.   #--------------------------------------------------------------------------
  1069.   def delay?
  1070.     @delay -= 1
  1071.     self.visible = (@delay <= 0)
  1072.     !self.visible
  1073.   end
  1074.   #--------------------------------------------------------------------------
  1075.   # ● ポップアップ消去済み?
  1076.   #--------------------------------------------------------------------------
  1077.   def removed?
  1078.     @remove
  1079.   end  
  1080.   #--------------------------------------------------------------------------
  1081.   # ● 座標更新
  1082.   #--------------------------------------------------------------------------
  1083.   def update_xy
  1084.     self.x = @rx
  1085.     self.y = @ry
  1086.     self.z = @rz
  1087.   end
  1088.   #--------------------------------------------------------------------------
  1089.   # ● ポップアップ位置の設定
  1090.   #--------------------------------------------------------------------------
  1091.   def set_position
  1092.     @rx = @battler.screen_x
  1093.     if @battler.actor?
  1094.       pos = LNX11::ACTOR_POPUP_POSITION
  1095.     else
  1096.       pos = [LNX11::ENEMY_POPUP_POSITION, 2].min
  1097.     end
  1098.     case pos
  1099.     when 0 ; @ry = @battler.screen_y        # 足元
  1100.     when 1 ; @ry = @battler.screen_y_center # 中心
  1101.     when 2 ; @ry = @battler.screen_y_top    # 頭上
  1102.     when 3 ; @ry = Graphics.height + LNX11::ACTOR_POPUP_Y # Y座標統一(アクター)
  1103.     end
  1104.   end
  1105.   #--------------------------------------------------------------------------
  1106.   # ● 描画するテキストの矩形を取得
  1107.   #--------------------------------------------------------------------------
  1108.   def text_size(str, name, size, bold = false)
  1109.     @@buf_bitmap = Bitmap.new(4, 4) if !@@buf_bitmap || @@buf_bitmap.disposed?
  1110.     @@buf_bitmap.font.name = name
  1111.     @@buf_bitmap.font.size = size
  1112.     @@buf_bitmap.font.bold = bold
  1113.     return @@buf_bitmap.text_size(str)
  1114.   end
  1115.   #--------------------------------------------------------------------------
  1116.   # ● 数字ビットマップの取得
  1117.   #--------------------------------------------------------------------------
  1118.   def bitmap_number(size = :large)
  1119.     return @@cache_number[size == :large ? 0 : 1]
  1120.   end
  1121.   #--------------------------------------------------------------------------
  1122.   # ● 数字ビットマップキャッシュの作成
  1123.   #--------------------------------------------------------------------------
  1124.   def create_number
  1125.     return if @@cache_number[0] && !@@cache_number[0].disposed?
  1126.     n_index = NUMBER_COLOR_SIZE
  1127.     @@cache_number.clear
  1128.     colors = LNX11::POPUP_COLOR.values # 色
  1129.     name = LNX11::NUMBER_FONT
  1130.     # 大・小の 2 パターンを作成する(ループ)
  1131.     [LNX11::LARGE_NUMBER, LNX11::SMALL_NUMBER].each_with_index do |n_size, i|
  1132.       next if get_number(i)
  1133.       size = n_size[:fontsize]
  1134.       # 数字の幅・高さ
  1135.       w = NUMBERS.collect{|n| text_size(n.to_s, name, size).width}.max + 4
  1136.       nh = NUMBERS.collect{|n| text_size(n.to_s, name, size).height}.max
  1137.       h = n_size[:line_height]
  1138.       @@w[i] = w
  1139.       @@h[i] = h
  1140.       # ビットマップ作成
  1141.       bitmap = Bitmap.new(w * NUMBERS.size, h * [colors.size, n_index].min)
  1142.       bitmap.font.name = LNX11::NUMBER_FONT
  1143.       bitmap.font.size = n_size[:fontsize]
  1144.       y = ((h - nh) / 2) - 1
  1145.       # 色ごとに分けて描画する(ループ)
  1146.       n_index.times do |col|
  1147.         # 色を変更
  1148.         bitmap.font.color.set(colors[col][0])
  1149.         bitmap.font.out_color.set(colors[col][1])
  1150.         # 文字ごとに分けて描画(ループ)
  1151.         NUMBERS.size.times do |num|
  1152.           bitmap.draw_text(num * w, (col * h) + y, w, nh, NUMBERS[num], 2)
  1153.         end
  1154.       end
  1155.       @@cache_number.push(bitmap)
  1156.     end
  1157.     p "LNX11a:数字ビットマップのキャッシュを作成しました。"
  1158.     # 数字ビットマップを表示する(テスト用)
  1159.     # s = Sprite.new
  1160.     # s.z = 1000000
  1161.     # s.bitmap = @@cache_number[1] # 0 or 1
  1162.     # loop do Graphics.update end
  1163.   end
  1164.   #--------------------------------------------------------------------------
  1165.   # ● 数字ビットマップの取得
  1166.   #--------------------------------------------------------------------------
  1167.   def get_number(i)
  1168.     case i
  1169.     when 0 # 大
  1170.       return false if LNX11::LARGE_NUMBER_NAME.empty?
  1171.       bitmap = Cache.system(LNX11::LARGE_NUMBER_NAME)
  1172.     when 1 # 小
  1173.       return false if LNX11::SMALL_NUMBER_NAME.empty?
  1174.       bitmap = Cache.system(LNX11::SMALL_NUMBER_NAME)
  1175.     end
  1176.     @@cache_number.push(bitmap)
  1177.     @@w[i] = bitmap.width / NUMBERS.size
  1178.     @@h[i] = bitmap.height / NUMBER_COLOR_SIZE
  1179.     true
  1180.   end
  1181.   #--------------------------------------------------------------------------
  1182.   # ● ダメージ数を描画したビットマップの取得
  1183.   #--------------------------------------------------------------------------
  1184.   def number(num, color, size = :large, deco = nil)
  1185.     # 数値を文字列の配列にする
  1186.     numbers = (num.abs.to_s).split(//)
  1187.     # 色番号を取得
  1188.     color_index = COLOR_KEYS.index(color)
  1189.     # ポップアップサイズを設定
  1190.     n_bitmap = bitmap_number(size)
  1191.     if size == :large
  1192.       n_size = LNX11::LARGE_NUMBER
  1193.       i = 0
  1194.     else
  1195.       n_size = LNX11::SMALL_NUMBER
  1196.       i = 1
  1197.     end
  1198.     spacing = n_size[:spacing]
  1199.     w = @@w[i]
  1200.     h = @@h[i]
  1201.     # ダメージ値のビットマップサイズ
  1202.     @bw = w * numbers.size + spacing * (numbers.size - 1)
  1203.     @bh = h
  1204.     # 修飾文字の描画
  1205.     @offset_x = @offset_y = 0
  1206.     text_bitmap = deco_text(deco,color,n_size[:fontsize]) if deco[1] >= 0
  1207.     # ビットマップを作成
  1208.     bitmap = Bitmap.new(@bw, @bh)
  1209.     # 塗りつぶし(テスト用)
  1210.     # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
  1211.     # ダメージ値を描画
  1212.     rect = Rect.new(0, h * color_index, w, h)
  1213.     numbers.size.times do |n|
  1214.       rect.x = numbers[n].to_i * w
  1215.       bitmap.blt(w * n + spacing * n + @offset_x, @offset_y, n_bitmap, rect)
  1216.     end
  1217.     # 修飾文字の描画をコールバック
  1218.     @decoblt.call(bitmap) if @decoblt
  1219.     @decoblt = nil
  1220.     # ビットマップを返す
  1221.     bitmap
  1222.   end
  1223.   #--------------------------------------------------------------------------
  1224.   # ● 修飾文字の描画
  1225.   #--------------------------------------------------------------------------
  1226.   def deco_text(deco, color, sizerate)
  1227.     # 元の幅・高さ
  1228.     ow = @bw
  1229.     oh = @bh
  1230.     case deco[1]   
  1231.     when 2 # ダメージ値の下
  1232.       # テキストのビットマップを取得
  1233.       size = decosize(deco[0], sizerate, :top_bottom)
  1234.       text_bitmap = text(deco[0], color, size)
  1235.       # テキストの幅・高さ
  1236.       tw = text_bitmap.width
  1237.       th = text_bitmap.height * 0.8
  1238.       # 最終的なビットマップのサイズ
  1239.       @bw = [@bw, tw].max
  1240.       @bh += th
  1241.       # ダメージ値の描画位置の修正
  1242.       @offset_x = (@bw - ow) / 2
  1243.       @offset_y = 0
  1244.       # 修飾文字の描画位置を設定
  1245.       x = (@bw - tw) / 2
  1246.       y = oh * 0.8
  1247.     when 4 # ダメージ値の左
  1248.       # テキストのビットマップを取得
  1249.       size = decosize(deco[0], sizerate, :left_right)
  1250.       text_bitmap = text(deco[0], color, size)
  1251.       # テキストの幅・高さ
  1252.       tw = text_bitmap.width
  1253.       th = text_bitmap.height
  1254.       # 最終的なビットマップのサイズ
  1255.       @bw += tw
  1256.       @bh = [@bh, th].max
  1257.       # ダメージ値の描画位置の修正
  1258.       @offset_x = tw
  1259.       @offset_y = (@bh - oh) / 2
  1260.       # 修飾文字の描画位置を設定
  1261.       x = 2
  1262.       y = (@bh - th) / 2
  1263.     when 6 # ダメージ値の右
  1264.       # テキストのビットマップを取得
  1265.       size = decosize(deco[0], sizerate, :left_right)
  1266.       text_bitmap = text(deco[0], color, size)
  1267.       # テキストの幅・高さ
  1268.       tw = text_bitmap.width
  1269.       th = text_bitmap.height
  1270.       # 最終的なビットマップのサイズ
  1271.       @bw += tw
  1272.       @bh = [@bh, th].max
  1273.       # ダメージ値の描画位置の修正
  1274.       @offset_x = 0
  1275.       @offset_y = (@bh - oh) / 2
  1276.       # 修飾文字の描画位置を設定
  1277.       x = ow
  1278.       y = (@bh - th) / 2
  1279.     when 8 # ダメージ値の上
  1280.       # テキストのビットマップを取得
  1281.       size = decosize(deco[0], sizerate, :top_bottom)
  1282.       text_bitmap = text(deco[0], color, size)
  1283.       # テキストの幅・高さ
  1284.       tw = text_bitmap.width
  1285.       th = text_bitmap.height * 0.8
  1286.       # 最終的なビットマップのサイズ
  1287.       @bw = [@bw, tw].max
  1288.       @bh += th
  1289.       # ダメージ値の描画位置の修正
  1290.       @offset_x = (@bw - ow) / 2
  1291.       @offset_y = @bh - oh
  1292.       # 修飾文字の描画位置を設定
  1293.       x = (@bw - tw) / 2
  1294.       y = 0
  1295.     end
  1296.     # 修飾文字の描画(コールバック)
  1297.     @decoblt = Proc.new {|bitmap|
  1298.     bitmap.blt(x, y, text_bitmap, text_bitmap.rect)
  1299.     text_bitmap.dispose}
  1300.     return text_bitmap
  1301.   end
  1302.   #--------------------------------------------------------------------------
  1303.   # ● 修飾文字のサイズ
  1304.   #--------------------------------------------------------------------------
  1305.   def decosize(text, size, pos)
  1306.     if text.length != text.bytesize
  1307.       return size * LNX11::TEXT_SIZERATE[pos] * LNX11::TEXT_SIZERATE_MCS
  1308.     else
  1309.       return size * LNX11::TEXT_SIZERATE[pos]
  1310.     end
  1311.   end
  1312.   #--------------------------------------------------------------------------
  1313.   # ● テキストを描画したビットマップの取得
  1314.   #  ステートやダメージ値の修飾文字の描画に使用します。
  1315.   #--------------------------------------------------------------------------
  1316.   def text(text, color, size = :large, buff_data = [-1, -1])
  1317.     # キャッシュがあればそれを返す(無ければ作成)
  1318.     key = text + color.to_s + size.to_s
  1319.     if @@cache_text[key] && !@@cache_text[key].disposed?
  1320.       return @@cache_text[key].clone
  1321.     end
  1322.     # 用語の置き換え
  1323.     text.gsub!("\hp") { Vocab::hp_a } if text.include?("\hp")
  1324.     text.gsub!("\mp") { Vocab::mp_a } if text.include?("\mp")
  1325.     text.gsub!("\tp") { Vocab::tp_a } if text.include?("\tp")
  1326.     # <<ver1.10>> テキストの頭に _ があれば対応する画像ファイルを参照する
  1327.     if text[/^[\_]./]
  1328.       bitmap = get_text_bitmap(text, color, size)
  1329.       # キャッシュに保存
  1330.       @@cache_text[key] = bitmap
  1331.       # ビットマップを返す
  1332.       return bitmap.clone
  1333.     end
  1334.     # <<ver1.10>>
  1335.     # 能力強化/弱体のポップアップで、ファイル名が指定されていればそれを返す
  1336.     if buff_data[0] >= 0 &&
  1337.       (size == :large && !LNX11::LARGE_BUFFS_NAME.empty?) ||
  1338.       (size == :small && !LNX11::SMALL_BUFFS_NAME.empty?)
  1339.       bitmap = get_buff_bitmap(buff_data, size)
  1340.       # キャッシュに保存
  1341.       @@cache_text[key] = bitmap
  1342.       # ビットマップを返す
  1343.       return bitmap.clone
  1344.     end
  1345.     # テキストにマルチバイト文字があれば日本語用フォントを使う
  1346.     if text.length != text.bytesize
  1347.       fontname = LNX11::TEXT_FONT_MCS
  1348.       sizerate = LNX11::TEXT_SIZERATE[:normal] * LNX11::TEXT_SIZERATE_MCS
  1349.     else
  1350.       fontname = LNX11::TEXT_FONT
  1351.       sizerate = LNX11::TEXT_SIZERATE[:normal]
  1352.     end
  1353.     # ポップアップサイズを設定
  1354.     case size
  1355.     when :large ; fontsize = LNX11::LARGE_NUMBER[:fontsize] * sizerate
  1356.     when :small ; fontsize = LNX11::SMALL_NUMBER[:fontsize] * sizerate
  1357.     else        ; fontsize = size
  1358.     end
  1359.     # テキストサイズ計算
  1360.     rect = text_size(text, fontname, fontsize)
  1361.     rect.width += 2
  1362.     # ビットマップを作成
  1363.     bitmap = Bitmap.new(rect.width, rect.height)
  1364.     # 塗りつぶし(テスト用)
  1365.     # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
  1366.     # フォント設定
  1367.     bitmap.font.name = fontname
  1368.     bitmap.font.size = fontsize
  1369.     bitmap.font.color.set(LNX11::POPUP_COLOR[color][0])
  1370.     bitmap.font.out_color.set(LNX11::POPUP_COLOR[color][1])
  1371.     # テキスト描画
  1372.     bitmap.draw_text(rect, text, 1)
  1373.     # キャッシュに保存
  1374.     @@cache_text[key] = bitmap
  1375.     # ビットマップを返す
  1376.     bitmap.clone
  1377.   end
  1378.   #--------------------------------------------------------------------------
  1379.   # ● 能力強化/弱体ビットマップの取得 <<ver1.10>>
  1380.   #--------------------------------------------------------------------------
  1381.   def get_buff_bitmap(buff_data, size)
  1382.     case size
  1383.     when :large ; src_bitmap = Cache.system(LNX11::LARGE_BUFFS_NAME)
  1384.     when :small ; src_bitmap = Cache.system(LNX11::SMALL_BUFFS_NAME)
  1385.     end
  1386.     src_rect = Rect.new
  1387.     src_rect.width  = src_bitmap.width  / 2
  1388.     src_rect.height = src_bitmap.height / 12
  1389.     src_rect.x = (buff_data[0] / 4) * src_rect.width
  1390.     src_rect.y = (buff_data[0] % 4) * src_rect.height * 3 +
  1391.                   buff_data[1] * src_rect.height
  1392.     bitmap = Bitmap.new(src_rect.width, src_rect.height)
  1393.     bitmap.blt(0, 0, src_bitmap, src_rect)
  1394.     bitmap
  1395.   end
  1396.   #--------------------------------------------------------------------------
  1397.   # ● テキストビットマップの取得 <<ver1.10>>
  1398.   #--------------------------------------------------------------------------
  1399.   def get_text_bitmap(text, color, size)
  1400.     # クリティカルカラーかつ、弱点/耐性なら参照するビットマップを変更
  1401.     if LNX11::POPUP_COLOR[color] == LNX11::POPUP_COLOR[:critical] &&
  1402.       (text == LNX11::DECORATION_NUMBER[:weakness][0] ||
  1403.        text == LNX11::DECORATION_NUMBER[:resist][0])
  1404.       # ファイル名に _critcolor を加える
  1405.       text += "_critcolor"
  1406.     end
  1407.     # MPダメージ/回復(符号なし)なら参照するビットマップを変更
  1408.     if text == LNX11::DECORATION_NUMBER[:mp_damage][0]
  1409.       # カラーに応じてファイル名を変更
  1410.       case LNX11::POPUP_COLOR[color]
  1411.       when LNX11::POPUP_COLOR[:mp_damage]   ; text += "_damage"
  1412.       when LNX11::POPUP_COLOR[:mp_recovery] ; text += "_recovery"
  1413.       end
  1414.     end
  1415.     # popup_xxxxxx_(large or small)
  1416.     Cache.system("popup" + text + (size == :large ? "_large" : "_small"))
  1417.   end
  1418. end

  1419. #==============================================================================
  1420. # ■ [追加]:Sprite_PopupSpring
  1421. #------------------------------------------------------------------------------
  1422. #  通常の跳ねるポップアップ。
  1423. #==============================================================================

  1424. class Sprite_PopupSpring < Sprite_PopupBase
  1425.   #--------------------------------------------------------------------------
  1426.   # ● ポップアップ Z 座標
  1427.   #--------------------------------------------------------------------------
  1428.   def base_z
  1429.     14
  1430.   end
  1431.   #--------------------------------------------------------------------------
  1432.   # ● 開始処理
  1433.   #--------------------------------------------------------------------------
  1434.   def start
  1435.     # 動き設定
  1436.     set_movement
  1437.     # ディレイ設定 同じタイプのポップアップが重ならないようにする
  1438.     if @popup_size == :small
  1439.       self.oy -= @battler.popup_delay[1]
  1440.       @delay_clear = (@delay == 0)
  1441.       dy = self.bitmap.height * 0.8
  1442.       @battler.popup_delay[1] += dy
  1443.       @delay = 0
  1444.     end
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # ● 終了処理
  1448.   #--------------------------------------------------------------------------  
  1449.   def terminate
  1450.     # 一番上のポップアップなら、ディレイを初期化する
  1451.     @battler.popup_delay[1] = 0 if @delay_clear
  1452.   end
  1453.   #--------------------------------------------------------------------------
  1454.   # ● 投射運動の設定
  1455.   #--------------------------------------------------------------------------
  1456.   def set_movement
  1457.     if @popup_size == :large
  1458.       movement = LNX11::LARGE_MOVEMENT
  1459.     else
  1460.       movement = LNX11::SMALL_MOVEMENT
  1461.     end
  1462.     @fall       = -movement[:inirate]
  1463.     @gravity    =  movement[:gravity]
  1464.     @side       =  movement[:side_scatter] * rand(0) * (rand(2) == 0 ? -1 : 1)
  1465.     @ref_move   =  movement[:ref_height]
  1466.     @ref_factor =  movement[:ref_factor]
  1467.     @ref_count  =  movement[:ref_count]
  1468.     @duration   =  movement[:duration]
  1469.     @fadeout    =  movement[:fadeout]
  1470.   end
  1471.   #--------------------------------------------------------------------------
  1472.   # ● フレーム更新
  1473.   #--------------------------------------------------------------------------
  1474.   def update_popup
  1475.     update_freefall
  1476.   end
  1477.   #--------------------------------------------------------------------------
  1478.   # ● 投射運動の更新
  1479.   #--------------------------------------------------------------------------
  1480.   def update_freefall
  1481.     if @ref_count >= 0
  1482.       # X:左右移動
  1483.       @rx += @side
  1484.       # Y:自由落下
  1485.       @ry += @fall
  1486.       @ref_move -= @fall
  1487.       @fall += @gravity
  1488.       # 跳ね返り
  1489.       if @ref_move <= 0 && @fall >= 0
  1490.         @ref_count -= 1
  1491.         @fall = -@fall * @ref_factor
  1492.       end      
  1493.     end
  1494.   end
  1495. end

  1496. #==============================================================================
  1497. # ■ [追加]:Sprite_PopupRising
  1498. #------------------------------------------------------------------------------
  1499. #  少しずつ上昇するポップアップ。
  1500. #==============================================================================

  1501. class Sprite_PopupRising < Sprite_PopupBase
  1502.   #--------------------------------------------------------------------------
  1503.   # ● ポップアップ Z 座標
  1504.   #--------------------------------------------------------------------------
  1505.   def base_z
  1506.     6
  1507.   end
  1508.   #--------------------------------------------------------------------------
  1509.   # ● 開始処理
  1510.   #--------------------------------------------------------------------------
  1511.   def start
  1512.     # 動き設定
  1513.     set_movement
  1514.     self.opacity = 0
  1515.     d = self.bitmap.height * LNX11::RISE_MOVEMENT[:line_spacing]
  1516.     @delay_count = d / @rising_speed
  1517.     @battler.popup_delay[2] += @delay_count
  1518.   end
  1519.   #--------------------------------------------------------------------------
  1520.   # ● 動きの設定
  1521.   #--------------------------------------------------------------------------
  1522.   def set_movement
  1523.     @rising_speed = LNX11::RISE_MOVEMENT[:rising_speed]
  1524.     @duration = LNX11::RISE_MOVEMENT[:duration]
  1525.     @fadeout  = LNX11::RISE_MOVEMENT[:fadeout]
  1526.   end
  1527.   #--------------------------------------------------------------------------
  1528.   # ● フレーム更新
  1529.   #--------------------------------------------------------------------------
  1530.   def update_popup
  1531.     @delay_count -= 1
  1532.     @battler.popup_delay[2] -= 1 if @delay_count >= 0
  1533.     @ry -= @rising_speed # すこしずつ上昇
  1534.     self.opacity += 32 if @duration > 0
  1535.   end
  1536. end

  1537. #==============================================================================
  1538. # ■ [追加]:Sprite_PopupSliding
  1539. #------------------------------------------------------------------------------
  1540. #  スライド表示するポップアップ。
  1541. #==============================================================================

  1542. class Sprite_PopupSliding < Sprite_PopupBase
  1543.   #--------------------------------------------------------------------------
  1544.   # ● ポップアップ Z 座標
  1545.   #--------------------------------------------------------------------------
  1546.   def base_z
  1547.     8
  1548.   end
  1549.   #--------------------------------------------------------------------------
  1550.   # ● 開始処理
  1551.   #--------------------------------------------------------------------------
  1552.   def start
  1553.     # 動き設定
  1554.     set_movement
  1555.     d = self.bitmap.height * LNX11::SLIDE_MOVEMENT[:line_spacing]
  1556.     self.oy += @delay + d / 2 if @delay > 0
  1557.     self.opacity = 0
  1558.     # ディレイ設定 同じタイプのポップアップが重ならないようにする
  1559.     @delay_clear = (@delay == 0)
  1560.     @battler.popup_delay[3] += (@delay <= 0 ? d / 2 : d)
  1561.     @delay = 0
  1562.   end
  1563.   #--------------------------------------------------------------------------
  1564.   # ● 終了処理
  1565.   #--------------------------------------------------------------------------  
  1566.   def terminate
  1567.     # 一番下のポップアップなら、ディレイを初期化する
  1568.     @battler.popup_delay[3] = 0 if @delay_clear
  1569.   end
  1570.   #--------------------------------------------------------------------------
  1571.   # ● 動きの設定
  1572.   #--------------------------------------------------------------------------
  1573.   def set_movement
  1574.     @x_speed  = LNX11::SLIDE_MOVEMENT[:x_speed]
  1575.     @duration = LNX11::SLIDE_MOVEMENT[:duration]
  1576.     @fadeout  = LNX11::SLIDE_MOVEMENT[:fadeout]
  1577.     # フェードインのスライド分だけ X を移動
  1578.     @rx -= @x_speed * 255.0 / @fadeout
  1579.   end
  1580.   #--------------------------------------------------------------------------
  1581.   # ● フレーム更新
  1582.   #--------------------------------------------------------------------------
  1583.   def update_popup
  1584.     @rx += @x_speed if opacity != 255 # スライド
  1585.     self.opacity += @fadeout if @duration > 0
  1586.   end
  1587. end

  1588. #==============================================================================
  1589. # ■ [追加]:Sprite_PopupOverlay
  1590. #------------------------------------------------------------------------------
  1591. #  オーバーレイポップアップ。自身の複製を加算合成で重ね合わせます。
  1592. #==============================================================================

  1593. class Sprite_PopupOverlay < Sprite_PopupBase
  1594.   #--------------------------------------------------------------------------
  1595.   # ● ポップアップ Z 座標
  1596.   #--------------------------------------------------------------------------
  1597.   def base_z
  1598.     10
  1599.   end
  1600.   #--------------------------------------------------------------------------
  1601.   # ● 開始処理
  1602.   #--------------------------------------------------------------------------
  1603.   def start
  1604.     @duration = LNX11::OVERLAY_MOVEMENT[:duration]
  1605.     @fadeout  = LNX11::OVERLAY_MOVEMENT[:fadeout]
  1606.     # オーバーレイの作成
  1607.     create_overlay
  1608.   end
  1609.   #--------------------------------------------------------------------------
  1610.   # ● 終了処理
  1611.   #--------------------------------------------------------------------------
  1612.   def terminate
  1613.     @overlay.dispose
  1614.     @overlay = nil
  1615.   end
  1616.   #--------------------------------------------------------------------------
  1617.   # ● オーバーレイ(複製)の作成
  1618.   #--------------------------------------------------------------------------
  1619.   def create_overlay
  1620.     @overlay = Sprite.new
  1621.     @overlay.bitmap   = self.bitmap
  1622.     @overlay.viewport = self.viewport
  1623.     @overlay.ox = self.ox
  1624.     @overlay.oy = self.oy
  1625.     @overlay.visible = false
  1626.     @overlay.blend_type = 1
  1627.   end
  1628.   #--------------------------------------------------------------------------
  1629.   # ● フレーム更新
  1630.   #--------------------------------------------------------------------------
  1631.   def update_popup
  1632.     self.opacity += @fadeout * 2 if @duration > 0
  1633.   end
  1634.   #--------------------------------------------------------------------------
  1635.   # ● フレーム更新
  1636.   #--------------------------------------------------------------------------
  1637.   def update
  1638.     super
  1639.     update_overlay
  1640.   end
  1641.   #--------------------------------------------------------------------------
  1642.   # ● オーバーレイの更新
  1643.   #--------------------------------------------------------------------------
  1644.   def update_overlay
  1645.     return if self.disposed? || @overlay.opacity == 0
  1646.     @overlay.x = self.x
  1647.     @overlay.y = self.y
  1648.     @overlay.z = self.z
  1649.     # 拡大・消去
  1650.     @overlay.zoom_x += 0.16
  1651.     @overlay.zoom_y += 0.12
  1652.     @overlay.opacity -= 20
  1653.     @overlay.visible = (@overlay.opacity != 0)
  1654.   end
  1655. end

  1656. #==============================================================================
  1657. # ■ [追加]:Sprite_PopupLevelUp
  1658. #------------------------------------------------------------------------------
  1659. #  レベルアップのポップアップ。スライドポップアップを継承しています。
  1660. #==============================================================================

  1661. class Sprite_PopupLevelUp < Sprite_PopupSliding
  1662.   #--------------------------------------------------------------------------
  1663.   # ● ポップアップ Z 座標
  1664.   #--------------------------------------------------------------------------
  1665.   def base_z
  1666.     32
  1667.   end
  1668.   #--------------------------------------------------------------------------
  1669.   # ● ポップアップ位置の設定
  1670.   #--------------------------------------------------------------------------
  1671.   def set_position
  1672.     @rx = @battler.screen_x - LNX11::ACTOR_OFFSET[:x]
  1673.     case LNX11::LEVELUP_POPUP_POSITION
  1674.     when 0 ; @ry = @battler.screen_y        # 足元
  1675.     when 1 ; @ry = @battler.screen_y_center # 中心
  1676.     when 2 ; @ry = @battler.screen_y_top    # 頭上
  1677.     when 3 ; @ry = Graphics.height + LNX11::LEVELUP_POPUP_Y # Y座標統一
  1678.     end
  1679.   end
  1680.   #--------------------------------------------------------------------------
  1681.   # ● フレーム更新
  1682.   #--------------------------------------------------------------------------
  1683.   def update_popup
  1684.     super
  1685.     # リザルト中なら自動的に消去しない
  1686.     @duration += 1 if $game_troop.all_dead? || $game_message.busy?
  1687.   end
  1688. end

  1689. #==============================================================================
  1690. # ■ Bitmap
  1691. #==============================================================================

  1692. class Bitmap
  1693.   #--------------------------------------------------------------------------
  1694.   # ● [追加]:カーソル用三角形の描画
  1695.   #--------------------------------------------------------------------------
  1696.   def lnx_cursor_triangle(size, color, oy = 0, grad = 1)
  1697.     color = color.clone
  1698.     x = (self.width - size) / 2
  1699.     y = (self.height - size) / 2 + oy
  1700.     rect = Rect.new(x, y, size, 1)
  1701.     count = size / 2
  1702.     minus = 128 / count / 2
  1703.     count.times do
  1704.       clear_rect(rect)
  1705.       fill_rect(rect, color)
  1706.       color.red   = [color.red   - minus * grad, 0].max
  1707.       color.green = [color.green - minus * grad, 0].max
  1708.       color.blue  = [color.blue  - minus * grad, 0].max
  1709.       rect.y += rect.height
  1710.       clear_rect(rect)
  1711.       fill_rect(rect, color)
  1712.       color.red   = [color.red   - minus * grad, 0].max
  1713.       color.green = [color.green - minus * grad, 0].max
  1714.       color.blue  = [color.blue  - minus * grad, 0].max
  1715.       rect.x += 1
  1716.       rect.y += rect.height
  1717.       rect.width -= 2
  1718.     end
  1719.   end
  1720. end

  1721. #==============================================================================
  1722. # ■ [追加]:Sprite_TargetCursor
  1723. #------------------------------------------------------------------------------
  1724. #  対象選択されているバトラーや行動選択中のアクターを示すアローカーソルです。
  1725. #==============================================================================
  1726. class Sprite_TargetCursor < Sprite
  1727.   #--------------------------------------------------------------------------
  1728.   # ● クラス変数
  1729.   #--------------------------------------------------------------------------
  1730.   @@cursor_cache = nil
  1731.   #--------------------------------------------------------------------------
  1732.   # ● 公開インスタンス変数
  1733.   #--------------------------------------------------------------------------
  1734.   attr_accessor :battler     # バトラー
  1735.   attr_accessor :blink       # 点滅(対象の選択中)
  1736.   #--------------------------------------------------------------------------
  1737.   # ● オブジェクト初期化
  1738.   #--------------------------------------------------------------------------
  1739.   def initialize(viewport = nil)
  1740.     super(viewport)
  1741.     @wait = LNX11::CURSOR_ANI_SPEED
  1742.     @speed = [LNX11::CURSOR_SPEED, 1].max
  1743.     @battler = nil
  1744.     @sub_cursor = []
  1745.     @blink = false
  1746.     self.bitmap = cursor_bitmap
  1747.     partition = self.bitmap.width / self.height
  1748.     self.src_rect.set(0, 0, self.width / partition, self.height)
  1749.     self.ox = self.width / 2
  1750.     self.oy = self.height / 2
  1751.     self.x = @rx = @tx = 0
  1752.     self.y = @ry = @ty = 0
  1753.     self.z = 98
  1754.     self.visible = false
  1755.   end
  1756.   #--------------------------------------------------------------------------
  1757.   # ● 解放
  1758.   #--------------------------------------------------------------------------  
  1759.   def dispose
  1760.     dispose_subcursor
  1761.     super
  1762.   end
  1763.   #--------------------------------------------------------------------------
  1764.   # ● サブカーソル作成
  1765.   #  メンバー全体にカーソルを表示するために複数のカーソルを作成します。
  1766.   #--------------------------------------------------------------------------  
  1767.   def create_subcursor(members)
  1768.     return unless @sub_cursor.empty?
  1769.     members.each_with_index do |battler, i|
  1770.       @sub_cursor[i] = Sprite_TargetCursor.new(self.viewport)
  1771.       @sub_cursor[i].set(@rx, @ry)
  1772.       @sub_cursor[i].set(battler, true)
  1773.     end
  1774.   end
  1775.   #--------------------------------------------------------------------------
  1776.   # ● サブカーソル解放
  1777.   #--------------------------------------------------------------------------  
  1778.   def dispose_subcursor
  1779.     @sub_cursor.each {|sprite| sprite.dispose }
  1780.     @sub_cursor = []
  1781.   end
  1782.   #--------------------------------------------------------------------------
  1783.   # ● サブカーソル更新
  1784.   #--------------------------------------------------------------------------  
  1785.   def update_subcursor
  1786.     @sub_cursor.each {|sprite| sprite.update }
  1787.   end
  1788.   #--------------------------------------------------------------------------
  1789.   # ● ビットマップの設定
  1790.   #--------------------------------------------------------------------------
  1791.   def cursor_bitmap
  1792.     if !LNX11::CURSOR_NAME.empty?
  1793.       return Cache.system(LNX11::CURSOR_NAME)
  1794.     else
  1795.       # カーソルファイル名が指定されていなければRGSS側で生成
  1796.       return @@cursor_cache if @@cursor_cache && !@@cursor_cache.disposed?
  1797.       @@cursor_cache = Bitmap.new(32, 32)
  1798.       color = Color.new(0, 0, 0)
  1799.       @@cursor_cache.lnx_cursor_triangle(26, color, 2)
  1800.       2.times {@@cursor_cache.blur}
  1801.       color.set(255, 255, 255)
  1802.       @@cursor_cache.lnx_cursor_triangle(24, color, 1, 0.5)
  1803.       tone = LNX11::CURSOR_TONE ? LNX11::CURSOR_TONE : $game_system.window_tone
  1804.       r = 118 + tone.red
  1805.       g = 118 + tone.green
  1806.       b = 118 + tone.blue
  1807.       color.set(r, g, b, 232)
  1808.       @@cursor_cache.lnx_cursor_triangle(20, color,  0)
  1809.       @@cursor_cache.lnx_cursor_triangle(20, color,  1)
  1810.       p "LNX11a:カーソルビットマップを作成しました。"
  1811.       return @@cursor_cache
  1812.     end
  1813.   end
  1814.   #--------------------------------------------------------------------------
  1815.   # ● カーソルの表示
  1816.   #--------------------------------------------------------------------------
  1817.   def show
  1818.     self.x = @rx = @tx
  1819.     self.y = @ry = @ty
  1820.     self.visible = true
  1821.   end
  1822.   #--------------------------------------------------------------------------
  1823.   # ● カーソルの非表示
  1824.   #--------------------------------------------------------------------------
  1825.   def hide
  1826.     dispose_subcursor
  1827.     @battler = nil
  1828.     self.visible = false
  1829.   end
  1830.   #--------------------------------------------------------------------------
  1831.   # ● 移動平均
  1832.   #--------------------------------------------------------------------------
  1833.   def sma(a, b, p)
  1834.     # a = 目標位置 b = 現在地
  1835.     return a if a == b || (a - b).abs < 0.3 || p == 1
  1836.     result = ((a + b * (p.to_f - 1)) / p.to_f)
  1837.     return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result
  1838.   end
  1839.   #--------------------------------------------------------------------------
  1840.   # ● フレーム更新
  1841.   #--------------------------------------------------------------------------
  1842.   def update
  1843.     update_subcursor
  1844.     self.opacity = @sub_cursor.empty? ? 255 : 0
  1845.     return if !visible || !@sub_cursor.empty?
  1846.     super
  1847.     # 点滅
  1848.     if LNX11::CURSOR_BLINK
  1849.       self.blend_type = @blink && Graphics.frame_count / 3 % 2 == 0 ? 1 : 0
  1850.     end
  1851.     # アニメーションを進める
  1852.     @wait -= 1
  1853.     if @wait <= 0
  1854.       @wait += LNX11::CURSOR_ANI_SPEED
  1855.       self.src_rect.x += self.width
  1856.       self.src_rect.x = 0 if self.src_rect.x >= self.bitmap.width
  1857.     end
  1858.     # カーソルの座標を更新
  1859.     set_xy if @battler && @sub_cursor.empty?
  1860.     self.x = @rx = sma(@tx, @rx, @speed)
  1861.     self.y = @ry = sma(@ty, @ry, @speed)
  1862.   end
  1863.   #--------------------------------------------------------------------------
  1864.   # ● カーソル位置の設定
  1865.   #--------------------------------------------------------------------------
  1866.   def set(*args)
  1867.     if args[0].is_a?(Numeric)
  1868.       # 引数一つ目が数値なら、XY指定
  1869.       @battler = nil
  1870.       set_xy(args[0], args[1])
  1871.       @blink = args[2] ? args[2] : false
  1872.     else
  1873.       # バトラーorシンボル指定
  1874.       if @battler != args[0]
  1875.         @battler = args[0]
  1876.         dispose_subcursor
  1877.         case args[0]
  1878.         when :party        ; create_subcursor($game_party.members)
  1879.         when :troop        ; create_subcursor($game_troop.alive_members)
  1880.         when :troop_random ; create_subcursor($game_troop.alive_members)
  1881.         else ; args[0] ? set_xy : hide
  1882.         end
  1883.       end
  1884.       @blink = args[1] ? args[1] : false
  1885.     end
  1886.     # スピードが1かカーソルが非表示なら表示に変える
  1887.     show if @sub_cursor.empty? && (@speed == 1 || !visible)
  1888.   end
  1889.   #--------------------------------------------------------------------------
  1890.   # ● カーソル位置をバトラーの位置に設定
  1891.   #--------------------------------------------------------------------------
  1892.   def set_xy(x = nil, y = nil)
  1893.     if x
  1894.       # 直接指定
  1895.       x += LNX11::CURSOR_OFFSET[:x]
  1896.       y += LNX11::CURSOR_OFFSET[:y]
  1897.     else
  1898.       # バトラーの座標
  1899.       x = @battler.screen_x + LNX11::CURSOR_OFFSET[:x]
  1900.       y = @battler.screen_y_top + LNX11::CURSOR_OFFSET[:y]
  1901.     end
  1902.     @tx = x
  1903.     minmax = LNX11::CURSOR_MINMAX
  1904.     @ty = [[y, minmax[:min] + self.oy].max, minmax[:max]].min
  1905.   end
  1906. end

  1907. #==============================================================================
  1908. # ■ [追加]:Sprite_OneLine_BattleLog
  1909. #------------------------------------------------------------------------------
  1910. #  バトルログを動的に表示するスプライトです。単体では1行しか表示できませんが、
  1911. # 複数同時に扱うことで複数行の表示を実装しています。
  1912. #==============================================================================

  1913. class Sprite_OneLine_BattleLog < Sprite
  1914.   @@grad_cache = nil
  1915.   #--------------------------------------------------------------------------
  1916.   # ● 公開インスタンス変数
  1917.   #--------------------------------------------------------------------------
  1918.   attr_accessor   :position # 表示位置(行)
  1919.   #--------------------------------------------------------------------------
  1920.   # ● オブジェクト初期化
  1921.   #--------------------------------------------------------------------------
  1922.   def initialize(width, height, max_line_number)
  1923.     super(nil)
  1924.     @rx = @ry = 0
  1925.     @line_height = height
  1926.     @max_line_number = max_line_number
  1927.     @position = -1
  1928.     @visible = true
  1929.     self.ox = -LNX11::STORAGE_OFFSET[:x]
  1930.     self.oy = -LNX11::STORAGE_OFFSET[:y]
  1931.     self.opacity = 0
  1932.     self.z = 96
  1933.     self.bitmap = Bitmap.new(width * 0.75, height)
  1934.   end
  1935.   #--------------------------------------------------------------------------
  1936.   # ● 解放
  1937.   #--------------------------------------------------------------------------  
  1938.   def dispose
  1939.     self.bitmap.dispose
  1940.     super
  1941.   end
  1942.   #--------------------------------------------------------------------------
  1943.   # ● スプライトの表示
  1944.   #--------------------------------------------------------------------------  
  1945.   def show
  1946.     @visible = true
  1947.   end
  1948.   #--------------------------------------------------------------------------
  1949.   # ● スプライトの非表示
  1950.   #--------------------------------------------------------------------------  
  1951.   def hide
  1952.     @visible = false
  1953.     @position = -1
  1954.   end
  1955.   #--------------------------------------------------------------------------
  1956.   # ● 表示しているか?
  1957.   #--------------------------------------------------------------------------  
  1958.   def visible?
  1959.     @visible
  1960.   end
  1961.   #--------------------------------------------------------------------------
  1962.   # ● フレーム更新
  1963.   #--------------------------------------------------------------------------
  1964.   def update
  1965.     return if self.opacity == 0
  1966.     self.opacity += @visible && @position >= 0 ? 24 : -24
  1967.     self.visible = self.opacity > 0
  1968.     return unless @visible # 不可視状態なら座標を更新しない
  1969.     @ry = (target_y + (@ry * 5)) / 6.0 if target_y < @ry
  1970.     @rx += 2 if @rx < 0
  1971.     self.x = @rx
  1972.     self.y = @ry
  1973.   end
  1974.   #--------------------------------------------------------------------------
  1975.   # ● テキストの描画
  1976.   #  自身が持つ Bitmap で描画するのではなく、Window の contents から
  1977.   # コピーします(Sprite からでは Window_Base#draw_text_ex が扱えないため)。
  1978.   #--------------------------------------------------------------------------
  1979.   def set_text(window, position)
  1980.     self.bitmap.clear
  1981.     # 横グラデーション
  1982.     if @@grad_cache && !@@grad_cache.disposed?
  1983.       self.bitmap.blt(0, 0, @@grad_cache, self.bitmap.rect)
  1984.     else
  1985.       color = LNX11::STORAGE_GRADIENT_COLOR
  1986.       fillrect = self.bitmap.rect
  1987.       fillrect.width /= 2
  1988.       self.bitmap.gradient_fill_rect(fillrect, color[0], color[1])
  1989.       @@grad_cache = self.bitmap.clone
  1990.     end
  1991.     # contents からコピー
  1992.     self.bitmap.blt(4, 0, window.contents, self.bitmap.rect)
  1993.     self.opacity = 1
  1994.     @rx = -8
  1995.     @position = position
  1996.     @ry = target_y
  1997.   end
  1998.   #--------------------------------------------------------------------------
  1999.   # ● 位置の繰り上げ
  2000.   #--------------------------------------------------------------------------
  2001.   def up_position
  2002.     @position -= 1
  2003.   end
  2004.   #--------------------------------------------------------------------------
  2005.   # ● メッセージが空か?(表示待ち)
  2006.   #--------------------------------------------------------------------------
  2007.   def mes_empty?
  2008.     @position < 0
  2009.   end
  2010.   #--------------------------------------------------------------------------
  2011.   # ● 移動するべき Y 座標
  2012.   #--------------------------------------------------------------------------
  2013.   def target_y
  2014.     @position * @line_height
  2015.   end
  2016. end

  2017. #==============================================================================
  2018. # ■ Window_BattleLog
  2019. #------------------------------------------------------------------------------
  2020. #  戦闘の進行を実況表示するウィンドウです。
  2021. #==============================================================================

  2022. class Window_BattleLog < Window_Selectable
  2023.   #--------------------------------------------------------------------------
  2024.   # ● [エイリアス]:オブジェクト初期化
  2025.   #--------------------------------------------------------------------------
  2026.   alias :lnx11a_initialize :initialize
  2027.   def initialize
  2028.     lnx11a_initialize
  2029.     # バトルログタイプが 1 以上なら非表示にする
  2030.     @storage_number = 0
  2031.     hide if LNX11::BATTLELOG_TYPE >= 1
  2032.     BattleManager.log_window = self
  2033.   end
  2034.   #--------------------------------------------------------------------------
  2035.   # ● [追加]:文章の配列のクリア
  2036.   #--------------------------------------------------------------------------
  2037.   def lines_clear
  2038.     @lines.clear if LNX11::BATTLELOG_TYPE == 1
  2039.   end
  2040.   #--------------------------------------------------------------------------
  2041.   # ● [追加]:指定ウェイト
  2042.   #--------------------------------------------------------------------------
  2043.   def abs_wait(wait)
  2044.     @method_wait.call(wait) if @method_wait
  2045.   end
  2046.   #--------------------------------------------------------------------------
  2047.   # ● [再定義]:メッセージ速度の取得
  2048.   #--------------------------------------------------------------------------
  2049.   def message_speed
  2050.     return 20
  2051.   end
  2052.   #--------------------------------------------------------------------------
  2053.   # ● [再定義]:エフェクト実行が終わるまでウェイト
  2054.   #--------------------------------------------------------------------------
  2055.   def wait_for_effect
  2056.     return if LNX11::BATTLELOG_TYPE > 0
  2057.     @method_wait_for_effect.call if @method_wait_for_effect
  2058.   end
  2059.   #--------------------------------------------------------------------------
  2060.   # ● [追加]:アニメーションのウェイト用メソッドの設定
  2061.   #--------------------------------------------------------------------------
  2062.   def method_wait_for_animation=(method)
  2063.     @method_wait_for_animation = method
  2064.   end
  2065.   #--------------------------------------------------------------------------
  2066.   # ● [追加]:アニメーション再生が終わるまでウェイト
  2067.   #--------------------------------------------------------------------------
  2068.   def wait_for_animation
  2069.     @method_wait_for_animation.call if @method_wait_for_animation
  2070.   end
  2071.   
  2072.   #--------------------------------------------------------------------------
  2073.   # ● [エイリアス]:ウィンドウ高さの取得
  2074.   #--------------------------------------------------------------------------
  2075.   alias :lnx11a_window_height :window_height
  2076.   def window_height
  2077.     LNX11::BATTLELOG_TYPE == 1 ? fitting_height(1) : lnx11a_window_height
  2078.   end
  2079.   #--------------------------------------------------------------------------
  2080.   # ● [エイリアス]:最大行数の取得
  2081.   #--------------------------------------------------------------------------
  2082.   alias :lnx11a_max_line_number :max_line_number
  2083.   def max_line_number
  2084.     num = LNX11::STORAGE_LINE_NUMBER
  2085.     LNX11::BATTLELOG_TYPE == 1 ? num : lnx11a_max_line_number
  2086.   end
  2087.   #--------------------------------------------------------------------------
  2088.   # ● [オーバーライド]:行の高さを取得
  2089.   #--------------------------------------------------------------------------
  2090.   def line_height
  2091.     LNX11::BATTLELOG_TYPE == 1 ? LNX11::STORAGE_LINE_HEIGHT : super
  2092.   end
  2093.   #--------------------------------------------------------------------------
  2094.   # ● [オーバーライド]:フォント設定のリセット
  2095.   #--------------------------------------------------------------------------
  2096.   def reset_font_settings
  2097.     super
  2098.     return unless LNX11::BATTLELOG_TYPE == 1
  2099.     contents.font.size = LNX11::STORAGE_FONT[:size]
  2100.     contents.font.out_color.set(LNX11::STORAGE_FONT[:out_color])
  2101.   end
  2102.   #--------------------------------------------------------------------------
  2103.   # ● [エイリアス]:データ行数の取得
  2104.   #--------------------------------------------------------------------------
  2105.   alias :lnx11a_line_number :line_number
  2106.   def line_number
  2107.     return 0 if LNX11::BATTLELOG_TYPE == 2
  2108.     LNX11::BATTLELOG_TYPE == 1 ? @storage_number : lnx11a_line_number
  2109.   end
  2110.   #--------------------------------------------------------------------------
  2111.   # ● [再定義]:背景スプライトの作成
  2112.   #--------------------------------------------------------------------------
  2113.   alias :lnx11a_create_back_sprite :create_back_sprite
  2114.   def create_back_sprite
  2115.     if LNX11::BATTLELOG_TYPE == 1
  2116.       # 蓄積型
  2117.       create_message_sprite
  2118.     else
  2119.       # 背景
  2120.       lnx11a_create_back_sprite
  2121.     end
  2122.   end
  2123.   #--------------------------------------------------------------------------
  2124.   # ● [再定義]:背景スプライトの解放
  2125.   #--------------------------------------------------------------------------
  2126.   alias :lnx11a_dispose_back_sprite :dispose_back_sprite
  2127.   def dispose_back_sprite
  2128.     if LNX11::BATTLELOG_TYPE == 1
  2129.       # 蓄積型
  2130.       dispose_message_sprite
  2131.     else
  2132.       # 背景
  2133.       lnx11a_dispose_back_sprite
  2134.     end
  2135.   end
  2136.   #--------------------------------------------------------------------------
  2137.   # ● [追加]:メッセージスプライトの作成
  2138.   #--------------------------------------------------------------------------
  2139.   def create_message_sprite
  2140.     # メッセージスプライト 行数分だけ作成する
  2141.     @mes_position = 0 # 次にメッセージを表示させる位置
  2142.     @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME # ログが進行するまでの時間
  2143.     @mes_sprites = Array.new(max_line_number + 1) {
  2144.     Sprite_OneLine_BattleLog.new(self.width, line_height, max_line_number)}
  2145.   end
  2146.   #--------------------------------------------------------------------------
  2147.   # ● [追加]:メッセージスプライトの解放
  2148.   #--------------------------------------------------------------------------
  2149.   def dispose_message_sprite
  2150.     @mes_sprites.each {|sprite| sprite.dispose }
  2151.   end
  2152.   #--------------------------------------------------------------------------
  2153.   # ● [追加]:メッセージスプライトを表示
  2154.   #--------------------------------------------------------------------------
  2155.   def show_message_sprite
  2156.     @mes_sprites.each {|sprite| sprite.show }
  2157.   end
  2158.   #--------------------------------------------------------------------------
  2159.   # ● [追加]:メッセージスプライトを非表示
  2160.   #--------------------------------------------------------------------------
  2161.   def hide_message_sprite
  2162.     @mes_sprites.each {|sprite| sprite.hide }
  2163.     @mes_position = 0
  2164.   end
  2165.   #--------------------------------------------------------------------------
  2166.   # ● [追加]:メッセージスプライトを一つ進める
  2167.   #--------------------------------------------------------------------------
  2168.   def up_message_sprite
  2169.     @mes_sprites.each {|sprite| sprite.up_position }
  2170.   end
  2171.   #--------------------------------------------------------------------------
  2172.   # ● [追加]:空のメッセージスプライトを返す
  2173.   #--------------------------------------------------------------------------
  2174.   def empty_message_sprite
  2175.     @mes_sprites.each {|sprite| return sprite if sprite.mes_empty? }
  2176.     @mes_sprites[0]
  2177.   end
  2178.   #--------------------------------------------------------------------------
  2179.   # ● [追加]:メッセージスプライトの更新
  2180.   #--------------------------------------------------------------------------
  2181.   def update_message_sprite
  2182.     # バトルログ消去フラグが有効
  2183.     if $game_temp.battlelog_clear
  2184.       $game_temp.battlelog_clear = false
  2185.       # スプライトが表示されていれば非表示にする
  2186.       if @mes_sprites[0].visible?
  2187.         hide_message_sprite
  2188.         lines_clear
  2189.       end
  2190.     end
  2191.     # ログの自動進行
  2192.     @mesup_count -= 1
  2193.     if @mesup_count <= 0 && @mes_position > 0
  2194.       up_message_sprite
  2195.       @mes_position -= 1
  2196.       @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME
  2197.     end
  2198.     @mes_sprites.each {|sprite| sprite.update }
  2199.   end
  2200.   #--------------------------------------------------------------------------
  2201.   # ● [追加]:メッセージスプライトのリフレッシュ
  2202.   #--------------------------------------------------------------------------
  2203.   def refresh_message_sprite
  2204.     # 文章が無ければ何もしない
  2205.     return if @lines.empty?
  2206.     # スプライトを表示する
  2207.     show_message_sprite unless @mes_sprites[0].visible?
  2208.     # 文章の描画
  2209.     contents.clear
  2210.     @lines[0] = last_text
  2211.     return if @lines[0].empty?
  2212.     draw_line(0)
  2213.     @storage_number += 1
  2214.     # ウィンドウの内容をスプライトにコピー
  2215.     empty_message_sprite.set_text(self, @mes_position)
  2216.     # スプライト位置の変動   
  2217.     if @mes_position < max_line_number
  2218.       @mes_position += 1
  2219.     elsif @mesup_count > 0
  2220.       up_message_sprite
  2221.     end
  2222.     @mesup_count = (LNX11::STORAGE_UP_MESSAGE_TIME * 1.5).truncate
  2223.   end  
  2224.   #--------------------------------------------------------------------------
  2225.   # ● [オーバーライド]:フレーム更新
  2226.   #--------------------------------------------------------------------------
  2227.   def update
  2228.     super
  2229.     update_message_sprite if LNX11::BATTLELOG_TYPE == 1
  2230.   end
  2231.   #--------------------------------------------------------------------------
  2232.   # ● [エイリアス]:リフレッシュ
  2233.   #--------------------------------------------------------------------------
  2234.   alias :lnx11a_refresh :refresh
  2235.   def refresh
  2236.     return if LNX11::BATTLELOG_TYPE == 2
  2237.     LNX11::BATTLELOG_TYPE == 1 ? refresh_message_sprite : lnx11a_refresh
  2238.   end
  2239.   #--------------------------------------------------------------------------
  2240.   # ● [エイリアス]:クリア
  2241.   #--------------------------------------------------------------------------
  2242.   alias :lnx11a_clear :clear
  2243.   def clear
  2244.     return if LNX11::BATTLELOG_TYPE == 2
  2245.     LNX11::BATTLELOG_TYPE == 1 ? @storage_number = 0 : lnx11a_clear
  2246.   end
  2247.   #--------------------------------------------------------------------------
  2248.   # ● [エイリアス]:一行戻る
  2249.   #--------------------------------------------------------------------------
  2250.   alias :lnx11a_back_one :back_one
  2251.   def back_one
  2252.     if LNX11::BATTLELOG_TYPE == 1
  2253.       # 蓄積型
  2254.       @storage_number = [@storage_number - 1, 0].max
  2255.     else
  2256.       # 通常
  2257.       lnx11a_back_one
  2258.     end
  2259.   end
  2260.   #--------------------------------------------------------------------------
  2261.   # ● [エイリアス]:指定した行に戻る
  2262.   #--------------------------------------------------------------------------
  2263.   alias :lnx11a_back_to :back_to
  2264.   def back_to(line_number)
  2265.     if LNX11::BATTLELOG_TYPE == 1
  2266.       # 蓄積型
  2267.       @storage_number -= 1 while @storage_number > line_number
  2268.     else
  2269.       # 通常
  2270.       lnx11a_back_to(line_number)
  2271.     end
  2272.   end
  2273.   #--------------------------------------------------------------------------
  2274.   # ● [エイリアス]:ウェイト
  2275.   #--------------------------------------------------------------------------
  2276.   alias :lnx11a_wait :wait
  2277.   def wait
  2278.     return if LNX11::BATTLELOG_TYPE == 2
  2279.     # 元のメソッドを呼ぶ
  2280.     lnx11a_wait
  2281.   end
  2282.   #--------------------------------------------------------------------------
  2283.   # ● [エイリアス]:スキル/アイテム使用の表示
  2284.   #  使用時アニメーションの処理を追加します。
  2285.   #--------------------------------------------------------------------------
  2286.   alias :lnx11a_display_use_item :display_use_item
  2287.   def display_use_item(subject, item)
  2288.     if item.use_animation > 0
  2289.       # 使用時アニメーションが設定されていれば再生
  2290.       subject.animation_id = item.use_animation
  2291.       subject.animation_mirror = false
  2292.     end
  2293.     # 元のメソッドを呼ぶ
  2294.     lnx11a_display_use_item(subject, item)
  2295.     # アニメーションのウェイト
  2296.     wait_for_animation if item.use_animation > 0
  2297.   end
  2298.   #--------------------------------------------------------------------------
  2299.   # ● [追加]:ポップアップデータの取得
  2300.   #--------------------------------------------------------------------------
  2301.   def popup_data
  2302.     $game_temp.popup_data
  2303.   end
  2304.   #--------------------------------------------------------------------------
  2305.   # ● [エイリアス]:反撃の表示
  2306.   #--------------------------------------------------------------------------
  2307.   alias :lnx11a_display_counter :display_counter
  2308.   def display_counter(target, item)
  2309.     # ポップアップ
  2310.     popup_data.popup_text(target, :counter)
  2311.     # 元のメソッドを呼ぶ
  2312.     lnx11a_display_counter(target, item)
  2313.     # ポップアップウェイト
  2314.     popup_data.add_wait
  2315.   end
  2316.   #--------------------------------------------------------------------------
  2317.   # ● [エイリアス]:反射の表示
  2318.   #--------------------------------------------------------------------------
  2319.   alias :lnx11a_display_reflection :display_reflection
  2320.   def display_reflection(target, item)
  2321.     # ポップアップ
  2322.     popup_data.popup_text(target, :reflection)
  2323.     # 元のメソッドを呼ぶ
  2324.     lnx11a_display_reflection(target, item)
  2325.     # ポップアップウェイト
  2326.     popup_data.add_wait
  2327.   end
  2328.   #--------------------------------------------------------------------------
  2329.   # ● [エイリアス]:身代わりの表示
  2330.   #--------------------------------------------------------------------------
  2331.   alias :lnx11a_display_substitute :display_substitute
  2332.   def display_substitute(substitute, target)
  2333.     # ポップアップ
  2334.     popup_data.popup_text(substitute, :substitute)
  2335.     # 元のメソッドを呼ぶ
  2336.     lnx11a_display_substitute(substitute, target)
  2337.     # ポップアップウェイト
  2338.     popup_data.add_wait
  2339.   end
  2340.   #--------------------------------------------------------------------------
  2341.   # ● [エイリアス]:失敗の表示
  2342.   #--------------------------------------------------------------------------
  2343.   alias :lnx11a_display_failure :display_failure
  2344.   def display_failure(target, item)
  2345.     if target.result.hit? && !target.result.success
  2346.       # ポップアップ (ミスと同じ扱いにする)
  2347.       popup_data.popup_miss(target, item)
  2348.     end
  2349.     # 元のメソッドを呼ぶ
  2350.     lnx11a_display_failure(target, item)
  2351.     # ポップアップウェイト
  2352.     popup_data.add_wait
  2353.   end
  2354.   #--------------------------------------------------------------------------
  2355.   # ● [エイリアス]:ミスの表示
  2356.   #--------------------------------------------------------------------------
  2357.   alias :lnx11a_display_miss :display_miss
  2358.   def display_miss(target, item)
  2359.     # ポップアップ
  2360.     popup_data.popup_miss(target, item)
  2361.     # 元のメソッドを呼ぶ   
  2362.     lnx11a_display_miss(target, item)
  2363.     # ポップアップウェイト
  2364.     popup_data.add_wait
  2365.   end
  2366.   #--------------------------------------------------------------------------
  2367.   # ● [エイリアス]:回避の表示
  2368.   #--------------------------------------------------------------------------
  2369.   alias :lnx11a_display_evasion :display_evasion
  2370.   def display_evasion(target, item)
  2371.     # ポップアップ (ミスと同じ扱いにする)
  2372.     popup_data.popup_miss(target, item)
  2373.     # 元のメソッドを呼ぶ   
  2374.     lnx11a_display_evasion(target, item)
  2375.     # ポップアップウェイト
  2376.     popup_data.add_wait
  2377.   end
  2378.   #--------------------------------------------------------------------------
  2379.   # ● [エイリアス]:HP ダメージ表示
  2380.   #--------------------------------------------------------------------------
  2381.   alias :lnx11a_display_hp_damage :display_hp_damage
  2382.   def display_hp_damage(target, item)
  2383.     # ポップアップ
  2384.     popup_data.popup_hp_damage(target, item)
  2385.     # 元のメソッドを呼ぶ
  2386.     lnx11a_display_hp_damage(target, item)
  2387.     # ポップアップウェイト
  2388.     popup_data.add_wait
  2389.   end
  2390.   #--------------------------------------------------------------------------
  2391.   # ● [エイリアス]:MP ダメージ表示
  2392.   #--------------------------------------------------------------------------
  2393.   alias :lnx11a_display_mp_damage :display_mp_damage
  2394.   def display_mp_damage(target, item)
  2395.     # ポップアップ
  2396.     popup_data.popup_mp_damage(target, item)
  2397.     # 元のメソッドを呼ぶ
  2398.     lnx11a_display_mp_damage(target, item)
  2399.     # ポップアップウェイト
  2400.     popup_data.add_wait
  2401.   end
  2402.   #--------------------------------------------------------------------------
  2403.   # ● [エイリアス]:TP ダメージ表示
  2404.   #--------------------------------------------------------------------------
  2405.   alias :lnx11a_display_tp_damage :display_tp_damage
  2406.   def display_tp_damage(target, item)
  2407.     # ポップアップ
  2408.     popup_data.popup_tp_damage(target, item)
  2409.     # 元のメソッドを呼ぶ
  2410.     lnx11a_display_tp_damage(target, item)
  2411.     # ポップアップウェイト
  2412.     popup_data.add_wait
  2413.   end
  2414.   #--------------------------------------------------------------------------
  2415.   # ● [エイリアス]:ステート付加の表示
  2416.   #--------------------------------------------------------------------------
  2417.   alias :lnx11a_display_added_states :display_added_states
  2418.   def display_added_states(target)
  2419.     # ポップアップ
  2420.     popup_data.popup_added_states(target)
  2421.     # 元のメソッドを呼ぶ
  2422.     lnx11a_display_added_states(target)
  2423.   end
  2424.   #--------------------------------------------------------------------------
  2425.   # ● [エイリアス]:ステート解除の表示
  2426.   #--------------------------------------------------------------------------
  2427.   alias :lnx11a_display_removed_states :display_removed_states
  2428.   def display_removed_states(target)
  2429.     # ポップアップ
  2430.     popup_data.popup_removed_states(target)
  2431.     # 元のメソッドを呼ぶ
  2432.     lnx11a_display_removed_states(target)
  2433.   end
  2434.   #--------------------------------------------------------------------------
  2435.   # ● [エイリアス]:能力強化/弱体の表示(個別)
  2436.   #--------------------------------------------------------------------------
  2437.   alias :lnx11a_display_buffs :display_buffs
  2438.   def display_buffs(target, buffs, fmt)
  2439.     # ポップアップ
  2440.     popup_data.popup_buffs(target, buffs, fmt)
  2441.     # 元のメソッドを呼ぶ
  2442.     lnx11a_display_buffs(target, buffs, fmt)
  2443.   end
  2444. end

  2445. #==============================================================================
  2446. # ■ RPG::BaseItem
  2447. #------------------------------------------------------------------------------
  2448. #  アクター、職業、スキル、アイテム、武器、防具、敵キャラ、およびステートの
  2449. # スーパークラス。
  2450. #==============================================================================

  2451. class RPG::BaseItem  
  2452.   #--------------------------------------------------------------------------
  2453.   # ● [追加]:バトラーグラフィックファイル名を取得
  2454.   #--------------------------------------------------------------------------
  2455.   def default_battler_graphic
  2456.     # キャッシュがある場合、それを返す
  2457.     return @default_battler_graphic if @default_battler_graphic
  2458.     # メモ取得
  2459.     re = LNX11::RE_BATTLER =~ note
  2460.     @default_battler_graphic = re ? $1 : ""
  2461.   end
  2462.   #--------------------------------------------------------------------------
  2463.   # ● [追加]:敵キャラの通常攻撃アニメの取得
  2464.   #--------------------------------------------------------------------------
  2465.   def atk_animation
  2466.     # キャッシュがある場合、それを返す
  2467.     return @atk_animation if @atk_animation
  2468.     # メモ取得
  2469.     re = LNX11::RE_ATK_ANIMATION =~ note
  2470.     @atk_animation = re ? $1.to_i : 1
  2471.   end
  2472. end

  2473. #==============================================================================
  2474. # ■ RPG::UsableItem
  2475. #------------------------------------------------------------------------------
  2476. #  スキルとアイテムのスーパークラス。
  2477. #==============================================================================
  2478. class RPG::UsableItem < RPG::BaseItem
  2479.   #--------------------------------------------------------------------------
  2480.   # ● [エイリアス]:対象の選択操作が必要か否かを取得
  2481.   #--------------------------------------------------------------------------
  2482.   alias :lnx11a_need_selection? :need_selection?
  2483.   def need_selection?
  2484.     LNX11::FIX_TARGET_CHECKE && scope > 0 ? true : lnx11a_need_selection?
  2485.   end
  2486.   #--------------------------------------------------------------------------
  2487.   # ● [追加]:使用時アニメの取得
  2488.   #--------------------------------------------------------------------------
  2489.   def use_animation
  2490.     # キャッシュがある場合、それを返す
  2491.     return @use_animation if @use_animation
  2492.     # メモ取得
  2493.     re = LNX11::RE_USE_ANIMATION =~ note
  2494.     @use_animation = re ? $1.to_i : 0
  2495.   end
  2496.   #--------------------------------------------------------------------------
  2497.   # ● [追加]:簡易ヘルプ非表示の取得
  2498.   #--------------------------------------------------------------------------
  2499.   def no_display
  2500.     # キャッシュがある場合、それを返す
  2501.     return @no_display if @no_display
  2502.     # メモ取得
  2503.     re = LNX11::RE_USABLEITEM_NO_DISPLAY =~ note
  2504.     @no_display = re ? true : false
  2505.   end
  2506.   #--------------------------------------------------------------------------
  2507.   # ● [追加]:使用時追加ウェイトの取得
  2508.   #--------------------------------------------------------------------------
  2509.   def display_wait
  2510.     # キャッシュがある場合、それを返す
  2511.     return @display_wait if @display_wait
  2512.     # メモ取得
  2513.     re = LNX11::RE_DISPLAY_WAIT =~ note
  2514.     @display_wait = re ? $1.to_i : LNX11::HELPDISPLAT_WAIT
  2515.   end
  2516.   #--------------------------------------------------------------------------
  2517.   # ● [追加]:終了時追加ウェイトの取得
  2518.   #--------------------------------------------------------------------------
  2519.   def end_wait
  2520.     # キャッシュがある場合、それを返す
  2521.     return @end_wait if @end_wait
  2522.     # メモ取得
  2523.     re = LNX11::RE_END_WAIT =~ note
  2524.     @end_wait = re ? $1.to_i : LNX11::HELPDISPLAT_END_WAIT
  2525.   end
  2526.   #--------------------------------------------------------------------------
  2527.   # ● [追加]:簡易ヘルプ説明を取得
  2528.   #--------------------------------------------------------------------------
  2529.   def short_description
  2530.     # キャッシュがある場合、それを返す
  2531.     return @short_description if @short_description
  2532.     # メモ取得
  2533.     re = LNX11::RE_SHORT_DESCRIPTION =~ note
  2534.     @short_description = re ? $1 : ""
  2535.   end
  2536. end

  2537. #==============================================================================
  2538. # ■ RPG::State
  2539. #------------------------------------------------------------------------------
  2540. #  ステートのデータクラス。
  2541. #==============================================================================

  2542. class RPG::State < RPG::BaseItem
  2543.   #--------------------------------------------------------------------------
  2544.   # ● [追加]:ステートアニメの取得
  2545.   #--------------------------------------------------------------------------
  2546.   def state_animation
  2547.     # キャッシュがある場合、それを返す
  2548.     return @state_animation if @state_animation
  2549.     # メモ取得
  2550.     re = LNX11::RE_STATE_ANIMATION =~ note
  2551.     @state_animation = re ? $1.to_i : 0
  2552.   end
  2553.   #--------------------------------------------------------------------------
  2554.   # ● [追加]:ポップアップ表示名の取得
  2555.   # <<ver1.10>>
  2556.   #  このメソッドは付加/解除ポップアップ表示名が設定されていない場合のみ
  2557.   # 呼び出されるようになりました。
  2558.   #--------------------------------------------------------------------------
  2559.   def display_name
  2560.     # キャッシュがある場合、それを返す
  2561.     return @display_name if @display_name
  2562.     # メモ取得
  2563.     re = LNX11::RE_STATE_DISPLAY =~ note
  2564.     @display_name = re ? $1 : name
  2565.   end
  2566.   #--------------------------------------------------------------------------
  2567.   # ● [追加]:付加ポップアップ表示名の取得 <<ver1.10>>
  2568.   #--------------------------------------------------------------------------
  2569.   def add_display_name
  2570.     # キャッシュがある場合、それを返す
  2571.     return @add_display_name if @add_display_name
  2572.     # メモ取得
  2573.     re = LNX11::RE_STATE_ADD_DISPLAY =~ note
  2574.     @add_display_name = re ? $1 : display_name
  2575.   end
  2576.   #--------------------------------------------------------------------------
  2577.   # ● [追加]:解除ポップアップ表示名の取得 <<ver1.10>>
  2578.   #--------------------------------------------------------------------------
  2579.   def remove_display_name
  2580.     # キャッシュがある場合、それを返す
  2581.     return @remove_display_name if @remove_display_name
  2582.     # メモ取得
  2583.     re = LNX11::RE_STATE_REM_DISPLAY =~ note
  2584.     @remove_display_name = re ? $1 : display_name
  2585.   end
  2586.   #--------------------------------------------------------------------------
  2587.   # ● [追加]:ポップアップ非表示の取得
  2588.   #--------------------------------------------------------------------------
  2589.   def no_display?
  2590.     # キャッシュがある場合、それを返す
  2591.     return @no_display if @no_display
  2592.     # 付加/解除のどちらかで設定されていれば無視する
  2593.     if LNX11::RE_STATE_ADD_NO_DISPLAY =~ note ||
  2594.        LNX11::RE_STATE_REM_NO_DISPLAY =~ note
  2595.       return @no_display = false
  2596.     end
  2597.     # メモ取得
  2598.     re = LNX11::RE_STATE_NO_DISPLAY =~ note
  2599.     @no_display = re ? true : false
  2600.   end
  2601.   #--------------------------------------------------------------------------
  2602.   # ● [追加]:付加ポップアップ非表示の取得
  2603.   #--------------------------------------------------------------------------
  2604.   def add_no_display?
  2605.     return true if no_display?
  2606.     # キャッシュがある場合、それを返す
  2607.     return @add_no_display if @add_no_display
  2608.     # メモ取得
  2609.     re = LNX11::RE_STATE_ADD_NO_DISPLAY =~ note
  2610.     @add_no_display = re ? true : false
  2611.   end
  2612.   #--------------------------------------------------------------------------
  2613.   # ● [追加]:解除ポップアップ非表示の取得
  2614.   #--------------------------------------------------------------------------
  2615.   def remove_no_display?
  2616.     return true if no_display?
  2617.     # キャッシュがある場合、それを返す
  2618.     return @remove_no_display if @remove_no_display
  2619.     # メモ取得
  2620.     re = LNX11::RE_STATE_REM_NO_DISPLAY =~ note
  2621.     @remove_no_display = re ? true : false
  2622.   end
  2623.   #--------------------------------------------------------------------------
  2624.   # ● [追加]:有利なステートの取得
  2625.   #--------------------------------------------------------------------------
  2626.   def advantage?
  2627.     # キャッシュがある場合、それを返す
  2628.     return @advantage if @advantage
  2629.     # メモ取得
  2630.     re = LNX11::RE_STATE_ADVANTAGE =~ note
  2631.     @advantage = re ? true : false
  2632.   end
  2633.   #--------------------------------------------------------------------------
  2634.   # ● [追加]:ポップアップタイプの取得
  2635.   #--------------------------------------------------------------------------
  2636.   def popup_type
  2637.     # キャッシュがある場合、それを返す
  2638.     return @popup_type if @popup_type != nil
  2639.     # 付加/解除のどちらかで設定されていれば無視する
  2640.     if LNX11::RE_STATE_ADD_TYPE =~ note ||
  2641.        LNX11::RE_STATE_REM_TYPE =~ note
  2642.       return @popup_type = false
  2643.     end
  2644.     # メモ取得
  2645.     re = LNX11::RE_STATE_TYPE =~ note
  2646.     @popup_type = re ? $1.to_i : false
  2647.   end
  2648.   #--------------------------------------------------------------------------
  2649.   # ● [追加]:付加ポップアップタイプの取得
  2650.   #--------------------------------------------------------------------------
  2651.   def add_popup_type
  2652.     return popup_type if popup_type
  2653.     # キャッシュがある場合、それを返す
  2654.     return @add_popup_type if @add_popup_type != nil
  2655.     # メモ取得
  2656.     re = LNX11::RE_STATE_ADD_TYPE =~ note
  2657.     @add_popup_type = re ? $1.to_i : false
  2658.   end
  2659.   #--------------------------------------------------------------------------
  2660.   # ● [追加]:解除ポップアップタイプの取得
  2661.   #--------------------------------------------------------------------------
  2662.   def remove_popup_type
  2663.     return popup_type if popup_type
  2664.     # キャッシュがある場合、それを返す
  2665.     return @remove_popup_type if @remove_popup_type != nil
  2666.     # メモ取得
  2667.     re = LNX11::RE_STATE_REM_TYPE =~ note
  2668.     @remove_popup_type = re ? $1.to_i : false
  2669.   end
  2670.   #--------------------------------------------------------------------------
  2671.   # ● [追加]:修飾文字非表示の取得
  2672.   #--------------------------------------------------------------------------
  2673.   def no_decoration?
  2674.     # キャッシュがある場合、それを返す
  2675.     return @no_decoration if @no_decoration
  2676.     # 付加/解除のどちらかで設定されていれば無視する
  2677.     if LNX11::RE_STATE_ADD_NO_DECORATION =~ note ||
  2678.        LNX11::RE_STATE_REM_NO_DECORATION =~ note
  2679.       return @no_decoration = false
  2680.     end
  2681.     # メモ取得
  2682.     re = LNX11::RE_STATE_NO_DECORATION =~ note
  2683.     @no_decoration = re ? true : false
  2684.   end
  2685.   #--------------------------------------------------------------------------
  2686.   # ● [追加]:付加修飾文字非表示の取得
  2687.   #--------------------------------------------------------------------------
  2688.   def add_no_decoration?
  2689.     return true if no_decoration?
  2690.     # キャッシュがある場合、それを返す
  2691.     return @add_no_decoration if @add_no_decoration
  2692.     # メモ取得
  2693.     re = LNX11::RE_STATE_ADD_NO_DECORATION =~ note
  2694.     @add_no_decoration = re ? true : false
  2695.   end
  2696.   #--------------------------------------------------------------------------
  2697.   # ● [追加]:解除修飾文字非表示の取得
  2698.   #--------------------------------------------------------------------------
  2699.   def remove_no_decoration?
  2700.     return true if no_decoration?
  2701.     # キャッシュがある場合、それを返す
  2702.     return @remove_no_decoration if @remove_no_decoration
  2703.     # メモ取得
  2704.     re = LNX11::RE_STATE_REM_NO_DECORATION =~ note
  2705.     @remove_no_decoration = re ? true : false
  2706.   end
  2707. end

  2708. #==============================================================================
  2709. # ■ BattleManager
  2710. #------------------------------------------------------------------------------
  2711. #  戦闘の進行を管理するモジュールです。
  2712. #==============================================================================

  2713. class << BattleManager
  2714.   #--------------------------------------------------------------------------
  2715.   # ● [追加]:公開インスタンス変数
  2716.   #--------------------------------------------------------------------------
  2717.   attr_reader   :preemptive             # 先制攻撃フラグ
  2718.   attr_reader   :surprise               # 不意打ちフラグ
  2719.   attr_accessor :log_window             # バトルログウィンドウ
  2720.   attr_accessor :update_for_wait_method # ウェイト中のフレーム更新
  2721.   attr_accessor :helpdisplay_set_method        # 簡易ヘルプ表示
  2722.   attr_accessor :helpdisplay_clear_method      # 簡易ヘルプ消去
  2723.   attr_accessor :helpdisplay_wait_short_method # 簡易ヘルプ・短時間ウェイト
  2724.   #--------------------------------------------------------------------------
  2725.   # ● [追加]:簡易ヘルプ表示
  2726.   #--------------------------------------------------------------------------
  2727.   def helpdisplay_set(*args)
  2728.     @helpdisplay_set_method.call(*args) if @helpdisplay_set_method
  2729.   end
  2730.   #--------------------------------------------------------------------------
  2731.   # ● [追加]:簡易ヘルプ消去
  2732.   #--------------------------------------------------------------------------
  2733.   def helpdisplay_clear(*args)
  2734.     @helpdisplay_clear_method.call(*args) if @helpdisplay_clear_method
  2735.   end
  2736.   #--------------------------------------------------------------------------
  2737.   # ● [追加]:簡易ヘルプ・短時間ウェイト
  2738.   #--------------------------------------------------------------------------
  2739.   def helpdisplay_wait_short
  2740.     @helpdisplay_wait_short_method.call if @helpdisplay_wait_short_method
  2741.   end
  2742.   #--------------------------------------------------------------------------
  2743.   # ● [追加]:キー入力待ち
  2744.   #--------------------------------------------------------------------------
  2745.   def helpdisplay_wait_input
  2746.     return if $game_message.helpdisplay_texts.empty?
  2747.     return if LNX11::MESSAGE_TYPE == 0
  2748.     return if !@helpdisplay_wait_input || !@update_for_wait_method
  2749.     update_for_wait_method.call while !Input.press?(:B) && !Input.press?(:C)
  2750.   end
  2751.   #--------------------------------------------------------------------------
  2752.   # ● [追加]:メッセージ進行の SE 再生
  2753.   #--------------------------------------------------------------------------
  2754.   def messagedisplay_se_play
  2755.     return if !@helpdisplay_se
  2756.     @helpdisplay_se.play  
  2757.     @helpdisplay_se = nil if @helpdisplay_se == LNX11::LEVELUP_SE
  2758.   end
  2759.   #--------------------------------------------------------------------------
  2760.   # ● [追加]:メッセージ進行
  2761.   #--------------------------------------------------------------------------
  2762.   def process_messagedisplay(wait)
  2763.     return if $game_message.helpdisplay_texts.empty?
  2764.     return if LNX11::MESSAGE_TYPE == 0
  2765.     $game_temp.battlelog_clear = true
  2766.     BattleManager.log_window.update
  2767.     if LNX11::BATTLELOG_TYPE == 2 || LNX11::MESSAGE_TYPE == 2
  2768.       # 簡易ヘルプ
  2769.       $game_message.helpdisplay_texts.each do |text|
  2770.         helpdisplay_wait_short
  2771.         messagedisplay_se_play
  2772.         helpdisplay_set(text, wait)
  2773.         helpdisplay_wait_input
  2774.       end
  2775.       helpdisplay_clear
  2776.     elsif LNX11::BATTLELOG_TYPE == 0
  2777.       # VXAceデフォルト
  2778.       BattleManager.log_window.clear
  2779.       $game_message.helpdisplay_texts.each do |text|
  2780.         messagedisplay_se_play
  2781.         BattleManager.log_window.add_text(text)
  2782.         BattleManager.log_window.abs_wait(wait)
  2783.         helpdisplay_wait_input
  2784.         max = BattleManager.log_window.max_line_number
  2785.         # 表示がいっぱいになったら消去
  2786.         if BattleManager.log_window.line_number >= max
  2787.           BattleManager.log_window.clear
  2788.         end
  2789.       end
  2790.       BattleManager.log_window.clear
  2791.     elsif LNX11::BATTLELOG_TYPE == 1
  2792.       # 蓄積型
  2793.       $game_message.helpdisplay_texts.each do |text|
  2794.         messagedisplay_se_play
  2795.         BattleManager.log_window.add_text(text)
  2796.         BattleManager.log_window.abs_wait(wait)
  2797.         helpdisplay_wait_input
  2798.       end
  2799.       $game_temp.battlelog_clear = true
  2800.       BattleManager.log_window.update
  2801.     end
  2802.     $game_message.helpdisplay_texts.clear
  2803.   end
  2804.   #--------------------------------------------------------------------------
  2805.   # ● [エイリアス]:メッセージ表示が終わるまでウェイト
  2806.   #--------------------------------------------------------------------------
  2807.   alias :lnx11a_wait_for_message :wait_for_message
  2808.   def wait_for_message
  2809.     # 簡易ヘルプ表示
  2810.     process_messagedisplay(@helpdisplay_wait ? @helpdisplay_wait : 60)
  2811.     return if $game_message.texts.empty?
  2812.     # 元のメソッドを呼ぶ
  2813.     lnx11a_wait_for_message
  2814.   end  
  2815.   #--------------------------------------------------------------------------
  2816.   # ● [エイリアス]:戦闘開始
  2817.   #--------------------------------------------------------------------------
  2818.   alias :lnx11a_battle_start :battle_start
  2819.   def battle_start   
  2820.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:battle_start][0]
  2821.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:battle_start][1]
  2822.     # メッセージウィンドウへのテキスト追加を禁止する
  2823.     $game_message.add_disabled
  2824.     # 元のメソッドを呼ぶ
  2825.     lnx11a_battle_start
  2826.     # メッセージウィンドウへのテキスト追加を許可する
  2827.     $game_message.add_enabled
  2828.     @helpdisplay_wait = nil
  2829.     @helpdisplay_wait_input = nil
  2830.   end
  2831.   #--------------------------------------------------------------------------
  2832.   # ● [エイリアス]:勝利の処理
  2833.   #--------------------------------------------------------------------------
  2834.   alias :lnx11a_process_victory :process_victory
  2835.   def process_victory
  2836.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:victory][0]
  2837.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:victory][1]
  2838.     # メッセージウィンドウへのテキスト追加を禁止する
  2839.     $game_message.add_disabled
  2840.     # 元のメソッドを呼ぶ
  2841.     success = lnx11a_process_victory
  2842.     # メッセージウィンドウへのテキスト追加を許可する
  2843.     $game_message.add_enabled
  2844.     @helpdisplay_wait = nil
  2845.     @helpdisplay_wait_input = nil
  2846.     return success
  2847.   end
  2848.   #--------------------------------------------------------------------------
  2849.   # ● [エイリアス]:逃走の処理
  2850.   #--------------------------------------------------------------------------
  2851.   alias :lnx11a_process_escape :process_escape
  2852.   def process_escape
  2853.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:escape][0]
  2854.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:escape][1]
  2855.     # メッセージウィンドウへのテキスト追加を禁止する
  2856.     $game_message.add_disabled
  2857.     # 元のメソッドを呼ぶ
  2858.     success = lnx11a_process_escape
  2859.     # メッセージウィンドウへのテキスト追加を許可する
  2860.     $game_message.add_enabled
  2861.     @helpdisplay_wait = nil
  2862.     @helpdisplay_wait_input = nil
  2863.     return success
  2864.   end
  2865.   #--------------------------------------------------------------------------
  2866.   # ● [エイリアス]:敗北の処理
  2867.   #--------------------------------------------------------------------------
  2868.   alias :lnx11a_process_defeat :process_defeat
  2869.   def process_defeat
  2870.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:defeat][0]
  2871.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:defeat][1]
  2872.     # メッセージウィンドウへのテキスト追加を禁止する
  2873.     $game_message.add_disabled
  2874.     # 元のメソッドを呼ぶ
  2875.     success = lnx11a_process_defeat
  2876.     # メッセージウィンドウへのテキスト追加を許可する
  2877.     $game_message.add_enabled
  2878.     @helpdisplay_wait = nil
  2879.     @helpdisplay_wait_input = nil
  2880.     return success
  2881.   end
  2882.   #--------------------------------------------------------------------------
  2883.   # ● [エイリアス]:ドロップアイテムの獲得と表示
  2884.   #--------------------------------------------------------------------------
  2885.   alias :lnx11a_gain_drop_items :gain_drop_items
  2886.   def gain_drop_items
  2887.     helpdisplay_clear
  2888.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:drop_item][0]
  2889.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:drop_item][1]
  2890.     @helpdisplay_se = LNX11::DROPITEM_SE
  2891.     # 元のメソッドを呼ぶ
  2892.     lnx11a_gain_drop_items
  2893.     @helpdisplay_wait = nil
  2894.     @helpdisplay_wait_input = nil
  2895.     @helpdisplay_se = nil
  2896.   end
  2897.   #--------------------------------------------------------------------------
  2898.   # ● [再定義]:経験値の獲得とレベルアップの表示
  2899.   #--------------------------------------------------------------------------
  2900.   def gain_exp
  2901.     @helpdisplay_wait = LNX11::MESSAGE_WAIT[:levelup][0]
  2902.     @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:levelup][1]
  2903.     $game_party.all_members.each do |actor|
  2904.       @helpdisplay_se = LNX11::LEVELUP_SE
  2905.       actor.gain_exp($game_troop.exp_total)
  2906.       # レベルアップ毎にメッセージ表示ウェイト
  2907.       wait_for_message
  2908.     end
  2909.     @helpdisplay_wait = nil
  2910.     @helpdisplay_wait_input = nil
  2911.     @helpdisplay_se = nil
  2912.   end
  2913. end

  2914. #==============================================================================
  2915. # ■ Game_Temp
  2916. #------------------------------------------------------------------------------
  2917. #  セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
  2918. # スタンスは $game_temp で参照されます。
  2919. #==============================================================================

  2920. class Game_Temp
  2921.   #--------------------------------------------------------------------------
  2922.   # ● [追加]:公開インスタンス変数
  2923.   #--------------------------------------------------------------------------
  2924.   attr_accessor :popup_data            # ポップアップスプライト
  2925.   attr_accessor :actor_battler_graphic # アクターのバトラーグラフィック
  2926.   attr_accessor :battlelog_clear       # バトルログ消去フラグ
  2927.   attr_accessor :target_cursor_sprite  # ターゲットカーソルスプライト
  2928.   attr_accessor :last_target_cursor    # 対象選択のカーソル記憶
  2929.   #--------------------------------------------------------------------------
  2930.   # ● [エイリアス]:オブジェクト初期化
  2931.   #--------------------------------------------------------------------------
  2932.   alias :lnx11a_initialize :initialize
  2933.   def initialize
  2934.     # 元のメソッドを呼ぶ
  2935.     lnx11a_initialize
  2936.     # 追加
  2937.     @popup_data = nil
  2938.     @actor_battler_graphic = []
  2939.     @battlelog_clear = false
  2940.     @battle_status_refresh = nil
  2941.     @target_cursor_sprite = nil
  2942.     clear_last_target_cursor
  2943.   end
  2944.   #--------------------------------------------------------------------------
  2945.   # ● [追加]:バトルステータス更新メソッドの設定
  2946.   #--------------------------------------------------------------------------
  2947.   def method_battle_status_refresh=(method)
  2948.     @battle_status_refresh = method
  2949.   end
  2950.   #--------------------------------------------------------------------------
  2951.   # ● [追加]:バトルステータス更新
  2952.   #--------------------------------------------------------------------------
  2953.   def battle_status_refresh
  2954.     return unless $game_party.in_battle
  2955.     @battle_status_refresh.call if @battle_status_refresh
  2956.   end
  2957.   #--------------------------------------------------------------------------
  2958.   # ● [追加]:対象選択のカーソル記憶をクリア
  2959.   #--------------------------------------------------------------------------
  2960.   def clear_last_target_cursor
  2961.     @last_target_cursor = {:actor => nil, :enemy => nil}
  2962.   end
  2963. end

  2964. #==============================================================================
  2965. # ■ Game_Action
  2966. #------------------------------------------------------------------------------
  2967. #  戦闘行動を扱うクラスです。
  2968. #==============================================================================

  2969. class Game_Action
  2970.   #--------------------------------------------------------------------------
  2971.   # ● [エイリアス]:ターゲットの配列作成
  2972.   #--------------------------------------------------------------------------
  2973.   alias :lnx11a_make_targets :make_targets
  2974.   def make_targets   
  2975.     if LNX11::TROOP_X_SORT
  2976.       # 元のメソッドを呼んでソート
  2977.       return lnx11a_make_targets.sort {|a,b| a.screen_x <=> b.screen_x}
  2978.     else
  2979.       return lnx11a_make_targets
  2980.     end
  2981.   end
  2982. end

  2983. #==============================================================================
  2984. # ■ Game_ActionResult
  2985. #------------------------------------------------------------------------------
  2986. #  戦闘行動の結果を扱うクラスです。属性に関する結果を追加します。
  2987. #==============================================================================

  2988. class Game_ActionResult
  2989.   #--------------------------------------------------------------------------
  2990.   # ● 公開インスタンス変数
  2991.   #--------------------------------------------------------------------------
  2992.   attr_accessor :element_rate               # 属性修正値
  2993.   #--------------------------------------------------------------------------
  2994.   # ● ダメージ値のクリア
  2995.   #--------------------------------------------------------------------------
  2996.   alias :lnx11a_clear_damage_values :clear_damage_values
  2997.   def clear_damage_values
  2998.     # 元のメソッドを呼ぶ
  2999.     lnx11a_clear_damage_values
  3000.     # 属性修正値をクリア
  3001.     @element_rate = 1.0
  3002.   end
  3003.   #--------------------------------------------------------------------------
  3004.   # ● [追加]:属性修正値の取得
  3005.   #--------------------------------------------------------------------------
  3006.   def element_rate
  3007.     return @element_rate if @element_rate
  3008.     @element_rate = 1.0
  3009.   end
  3010. end

  3011. #==============================================================================
  3012. # ■ Game_BattlerBase
  3013. #------------------------------------------------------------------------------
  3014. #  バトラーを扱う基本のクラスです。
  3015. #==============================================================================

  3016. class Game_BattlerBase
  3017.   #--------------------------------------------------------------------------
  3018.   # ● [追加]:ポップアップデータの取得
  3019.   #--------------------------------------------------------------------------
  3020.   def popup_data
  3021.     $game_temp.popup_data
  3022.   end
  3023.   #--------------------------------------------------------------------------
  3024.   # ● [エイリアス]:スキル使用コストの支払い
  3025.   #--------------------------------------------------------------------------
  3026.   alias :lnx11a_pay_skill_cost :pay_skill_cost
  3027.   def pay_skill_cost(skill)
  3028.     rmp = self.mp
  3029.     rtp = self.tp
  3030.     # 元のメソッドを呼ぶ   
  3031.     lnx11a_pay_skill_cost(skill)
  3032.     return unless $game_party.in_battle
  3033.     # ポップアップ
  3034.     popup_data.popup_regenerate_mp(self, (rmp - self.mp).truncate, true)
  3035.     popup_data.popup_regenerate_tp(self, (rtp - self.tp).truncate, true)
  3036.   end
  3037. end

  3038. #==============================================================================
  3039. # ■ Game_Battler
  3040. #------------------------------------------------------------------------------
  3041. #  スプライトに関するメソッドを追加したバトラーのクラスです。
  3042. #==============================================================================

  3043. class Game_Battler < Game_BattlerBase
  3044.   #--------------------------------------------------------------------------
  3045.   # ● 公開インスタンス変数
  3046.   #--------------------------------------------------------------------------
  3047.   attr_accessor :loop_animation_id     # ループアニメーション ID
  3048.   attr_accessor :loop_animation_mirror # ループアニメーション 左右反転フラグ
  3049.   #--------------------------------------------------------------------------
  3050.   # ● [エイリアス]:スプライトのエフェクトをクリア
  3051.   #--------------------------------------------------------------------------
  3052.   alias :lnx11a_clear_sprite_effects :clear_sprite_effects
  3053.   def clear_sprite_effects
  3054.     # 元のメソッドを呼ぶ
  3055.     lnx11a_clear_sprite_effects
  3056.     @loop_animation_id = 0
  3057.     @loop_animation_mirror = false
  3058.   end
  3059.   #--------------------------------------------------------------------------
  3060.   # ● [再定義]:アニメーション ID の設定
  3061.   #--------------------------------------------------------------------------  
  3062.   def animation_id=(id)
  3063.     return unless battle_member?
  3064.     @animation_id = id
  3065.   end
  3066.   #--------------------------------------------------------------------------
  3067.   # ● [追加]:ステートのループアニメーションの設定
  3068.   #--------------------------------------------------------------------------
  3069.   def set_state_animation
  3070.     # 表示優先度が高いステートを優先
  3071.     sort_states
  3072.     anime = @states.collect {|id| $data_states[id].state_animation }
  3073.     anime.delete(0)
  3074.     @loop_animation_id = anime[0] ? anime[0] : 0
  3075.   end
  3076.   #--------------------------------------------------------------------------
  3077.   # ● [エイリアス]:ステート情報をクリア
  3078.   #--------------------------------------------------------------------------
  3079.   alias :lnx11a_clear_states :clear_states
  3080.   def clear_states
  3081.     # 元のメソッドを呼ぶ
  3082.     lnx11a_clear_states
  3083.     # ステートアニメ設定
  3084.     set_state_animation
  3085.   end
  3086.   #--------------------------------------------------------------------------
  3087.   # ● [エイリアス]:ステートの付加
  3088.   #--------------------------------------------------------------------------
  3089.   alias :lnx11a_add_state :add_state
  3090.   def add_state(state_id)
  3091.     # 元のメソッドを呼ぶ
  3092.     lnx11a_add_state(state_id)
  3093.     # ステートアニメ設定
  3094.     set_state_animation
  3095.   end
  3096.   #--------------------------------------------------------------------------
  3097.   # ● [エイリアス]:ステートの解除
  3098.   #--------------------------------------------------------------------------
  3099.   alias :lnx11a_remove_state :remove_state
  3100.   def remove_state(state_id)
  3101.     # 元のメソッドを呼ぶ
  3102.     lnx11a_remove_state(state_id)
  3103.     # ステートアニメ設定
  3104.     set_state_animation
  3105.   end
  3106.   #--------------------------------------------------------------------------
  3107.   # ● [追加]:ポップアップディレイの取得
  3108.   #--------------------------------------------------------------------------
  3109.   def popup_delay
  3110.     return @popup_delay if @popup_delay
  3111.     popup_delay_clear
  3112.   end
  3113.   #--------------------------------------------------------------------------
  3114.   # ● [追加]:ポップアップディレイの設定
  3115.   #--------------------------------------------------------------------------
  3116.   def popup_delay=(delay)
  3117.     @popup_delay = delay
  3118.   end
  3119.   #--------------------------------------------------------------------------
  3120.   # ● [追加]:ポップアップディレイの設定
  3121.   #--------------------------------------------------------------------------
  3122.   def popup_delay_clear
  3123.     @popup_delay = Array.new(16) { 0 }
  3124.   end
  3125.   #--------------------------------------------------------------------------
  3126.   # ● [エイリアス]:スキル/アイテムの属性修正値を取得
  3127.   #  弱点/耐性の判定を追加します。
  3128.   #--------------------------------------------------------------------------
  3129.   alias :lnx11a_item_element_rate :item_element_rate
  3130.   def item_element_rate(user, item)
  3131.     # 元のメソッドを呼ぶ
  3132.     rate = lnx11a_item_element_rate(user, item)
  3133.     return rate unless $game_party.in_battle
  3134.     # レートを結果に保存する
  3135.     @result.element_rate = rate
  3136.     rate
  3137.   end
  3138.   #--------------------------------------------------------------------------
  3139.   # ● [エイリアス]:ダメージの処理
  3140.   #  吸収による回復のポップアップを生成します。
  3141.   #--------------------------------------------------------------------------
  3142.   alias :lnx11a_execute_damage :execute_damage
  3143.   def execute_damage(user)
  3144.     # 元のメソッドを呼ぶ
  3145.     lnx11a_execute_damage(user)
  3146.     return unless $game_party.in_battle
  3147.     # ポップアップ
  3148.     popup_data.popup_hp_drain(user, @result.hp_drain)
  3149.     popup_data.popup_mp_drain(user, @result.mp_drain)
  3150.   end
  3151.   #--------------------------------------------------------------------------
  3152.   # ● [エイリアス]:HP の再生
  3153.   #--------------------------------------------------------------------------
  3154.   alias :lnx11a_regenerate_hp :regenerate_hp
  3155.   def regenerate_hp
  3156.     # 元のメソッドを呼ぶ
  3157.     lnx11a_regenerate_hp
  3158.     return unless $game_party.in_battle
  3159.     # ポップアップ
  3160.     popup_data.popup_regenerate_hp(self, @result.hp_damage)
  3161.   end
  3162.   #--------------------------------------------------------------------------
  3163.   # ● [エイリアス]:MP の再生
  3164.   #--------------------------------------------------------------------------
  3165.   alias :lnx11a_regenerate_mp :regenerate_mp
  3166.   def regenerate_mp
  3167.     # 元のメソッドを呼ぶ
  3168.     lnx11a_regenerate_mp
  3169.     return unless $game_party.in_battle
  3170.     # ポップアップ
  3171.     popup_data.popup_regenerate_mp(self, @result.mp_damage)
  3172.   end
  3173.   #--------------------------------------------------------------------------
  3174.   # ● [エイリアス]:TP の再生
  3175.   #--------------------------------------------------------------------------
  3176.   alias :lnx11a_regenerate_tp :regenerate_tp
  3177.   def regenerate_tp
  3178.     rtp = self.tp.to_i
  3179.     # 元のメソッドを呼ぶ
  3180.     lnx11a_regenerate_tp
  3181.     return unless $game_party.in_battle
  3182.     # ポップアップ
  3183.     popup_data.popup_regenerate_tp(self, rtp - self.tp.to_i)
  3184.   end
  3185.   #--------------------------------------------------------------------------
  3186.   # ● 被ダメージによる TP チャージ
  3187.   #--------------------------------------------------------------------------
  3188.   alias :lnx11a_charge_tp_by_damage :charge_tp_by_damage
  3189.   def charge_tp_by_damage(damage_rate)
  3190.     rtp = self.tp.to_i
  3191.     # 元のメソッドを呼ぶ
  3192.     lnx11a_charge_tp_by_damage(damage_rate)
  3193.     return unless $game_party.in_battle
  3194.     # ポップアップ
  3195.     popup_data.popup_tp_charge(self, rtp - self.tp.to_i)
  3196.   end
  3197.   #--------------------------------------------------------------------------
  3198.   # ● [エイリアス]:スキル/アイテムの使用者側への効果(TP 得)
  3199.   #--------------------------------------------------------------------------
  3200.   alias :lnx11a_item_user_effect :item_user_effect
  3201.   def item_user_effect(user, item)
  3202.     rtp = user.tp.to_i
  3203.     # 元のメソッドを呼ぶ
  3204.     lnx11a_item_user_effect(user, item)
  3205.     return unless $game_party.in_battle
  3206.     # ポップアップ
  3207.     popup_data.popup_tp_gain(user, rtp - user.tp.to_i)
  3208.   end
  3209.   #--------------------------------------------------------------------------
  3210.   # ● [追加]:高さの取得
  3211.   #--------------------------------------------------------------------------
  3212.   def bitmap_height
  3213.     return @bitmap_height if @bitmap_height
  3214.     @bitmap_height = 0
  3215.   end
  3216.   #--------------------------------------------------------------------------
  3217.   # ● [追加]:高さの設定
  3218.   #--------------------------------------------------------------------------
  3219.   def bitmap_height=(y)
  3220.     @bitmap_height = y
  3221.   end
  3222.   #--------------------------------------------------------------------------
  3223.   # ● [追加]:バトル画面 Y 座標(頭上)の取得
  3224.   #--------------------------------------------------------------------------
  3225.   def screen_y_top
  3226.     screen_y - @bitmap_height
  3227.   end
  3228.   #--------------------------------------------------------------------------
  3229.   # ● [追加]:バトル画面 Y 座標(中心)の取得
  3230.   #--------------------------------------------------------------------------
  3231.   def screen_y_center
  3232.     screen_y - @bitmap_height / 2
  3233.   end
  3234. end

  3235. #==============================================================================
  3236. # ■ Game_Actor
  3237. #------------------------------------------------------------------------------
  3238. #  アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
  3239. # の内部で使用され、Game_Party クラス($game_party)からも参照されます。
  3240. #==============================================================================

  3241. class Game_Actor < Game_Battler
  3242.   #--------------------------------------------------------------------------
  3243.   # ● [追加]:公開インスタンス変数
  3244.   #--------------------------------------------------------------------------
  3245.   attr_accessor :battler_graphic_name    # 後指定のバトラーグラフィック
  3246.   attr_accessor :refresh_battler_graphic # バトラーグラフィックの更新フラグ
  3247.   attr_accessor :screen_x                # バトル画面 X 座標
  3248.   attr_accessor :screen_y                # バトル画面 Y 座標
  3249.   attr_accessor :last_actor_command      # 最後に選択したコマンド
  3250.   #--------------------------------------------------------------------------
  3251.   # ● [再定義]:スプライトを使うか?
  3252.   #--------------------------------------------------------------------------
  3253.   def use_sprite?
  3254.     return true # 使う
  3255.   end
  3256.   #--------------------------------------------------------------------------
  3257.   # ● [追加]:バトル画面 Z 座標の取得
  3258.   #--------------------------------------------------------------------------
  3259.   def screen_z
  3260.     return $game_party.members_screen_z[0] if index == nil
  3261.     return $game_party.members_screen_z[index] # Game_EnemyのZ座標は100
  3262.   end
  3263.   #--------------------------------------------------------------------------
  3264.   # ● [エイリアス]:ダメージ効果の実行
  3265.   #--------------------------------------------------------------------------
  3266.   alias :lnx11a_perform_damage_effect :perform_damage_effect
  3267.   def perform_damage_effect
  3268.     # 元のメソッドを呼ぶ
  3269.     lnx11a_perform_damage_effect
  3270.     # シェイクを無効にしている場合、シェイクをクリア
  3271.     $game_troop.screen.clear_shake if LNX11::DISABLED_DAMAGE_SHAKE
  3272.   end
  3273.   #--------------------------------------------------------------------------
  3274.   # ● [再定義]:コラプス効果の実行
  3275.   #  アクターの[特徴>その他>消滅エフェクト]の設定を適用するようにします。
  3276.   #  処理内容は Game_Enemy のものとほぼ同一です。
  3277.   #--------------------------------------------------------------------------
  3278.   def perform_collapse_effect
  3279.     if $game_party.in_battle
  3280.       case collapse_type
  3281.       when 0
  3282.         @sprite_effect_type = :collapse
  3283.         Sound.play_actor_collapse
  3284.       when 1
  3285.         @sprite_effect_type = :boss_collapse
  3286.         Sound.play_boss_collapse1
  3287.       when 2
  3288.         @sprite_effect_type = :instant_collapse
  3289.       end
  3290.     end
  3291.   end
  3292.   #--------------------------------------------------------------------------
  3293.   # ● [追加]:グラフィック設定の配列を返す
  3294.   #--------------------------------------------------------------------------
  3295.   def graphic_name_index
  3296.     case LNX11::DEFAULT_BATTLER_GRAPHIC
  3297.     when 0 ; [@face_name, @face_index]
  3298.     when 1 ; [@character_name, @character_index]
  3299.     end
  3300.   end
  3301.   #--------------------------------------------------------------------------
  3302.   # ● [エイリアス]:グラフィックの変更
  3303.   #--------------------------------------------------------------------------
  3304.   alias :lnx11a_set_graphic :set_graphic
  3305.   def set_graphic(*args)
  3306.     face = graphic_name_index
  3307.     # 元のメソッドを呼ぶ
  3308.     lnx11a_set_graphic(*args)
  3309.     @refresh_battler_graphic = (face != graphic_name_index)
  3310.   end
  3311.   #--------------------------------------------------------------------------
  3312.   # ● [追加]:デフォルトバトラーグラフィックの取得
  3313.   #--------------------------------------------------------------------------
  3314.   def facebattler
  3315.     $game_temp.actor_battler_graphic[id]
  3316.   end
  3317.   def facebattler=(bitmap)
  3318.     facebattler.dispose if facebattler && !facebattler.disposed?
  3319.     $game_temp.actor_battler_graphic[id] = bitmap
  3320.   end
  3321.   #--------------------------------------------------------------------------
  3322.   # ● [追加]:後指定のバトラーグラフィックファイル名の取得
  3323.   #--------------------------------------------------------------------------
  3324.   def battler_graphic_name
  3325.     return @battler_graphic_name if @battler_graphic_name != nil
  3326.     @battler_graphic_name = ""
  3327.   end
  3328.   #--------------------------------------------------------------------------
  3329.   # ● [追加]:後指定のバトラーグラフィックファイル名の指定
  3330.   #--------------------------------------------------------------------------
  3331.   def battler_graphic_name=(filename)
  3332.     @battler_graphic_name = filename
  3333.     @refresh_battler_graphic = true
  3334.   end
  3335.   #--------------------------------------------------------------------------
  3336.   # ● [追加]:顔グラフィックを描画して返す
  3337.   #  処理内容は Window_Base の draw_face に準じたものです。
  3338.   #--------------------------------------------------------------------------
  3339.   def draw_face(face_name, face_index, enabled = true)
  3340.     fw = 96
  3341.     fh = 96
  3342.     # ビットマップを作成して返す
  3343.     bitmap = Cache.face(face_name)
  3344.     rect = Rect.new(face_index % 4 * fw, face_index / 4 * fh, fw, fh)
  3345.     face = Bitmap.new(fw, fh)
  3346.     color = LNX11::DEFAULT_BG_COLOR
  3347.     face.gradient_fill_rect(face.rect, color[0], color[1], true)
  3348.     face.blt(0, 0, bitmap, rect)
  3349.     bitmap.dispose
  3350.     face
  3351.   end
  3352.   #--------------------------------------------------------------------------
  3353.   # ● [追加]:歩行グラフィックを描画して返す
  3354.   #  処理内容は Window_Base の draw_character に準じたものです。
  3355.   #--------------------------------------------------------------------------
  3356.   def draw_character(character_name, character_index)
  3357.     return unless character_name
  3358.     bitmap = Cache.character(character_name)
  3359.     sign = character_name[/^[\!\$]./]
  3360.     if sign && sign.include?('MOG_Battler_Motion脚本[code]#==============================================================================
  3361. # +++ MOG - Battler Motion (v3.1) +++
  3362. #==============================================================================
  3363. # By Moghunter
  3364. # https://atelierrgss.wordpress.com/
  3365. #==============================================================================
  3366. # Adiciona efeitos de animações nos sprites dos battlers.
  3367. # ● Animação inicial (entrada)de batalha.
  3368. # ● Animação de espera.
  3369. # ● Animação de ação.
  3370. # ● Animação de dano.
  3371. # ● Animação de colapso.
  3372. #==============================================================================

  3373. #==============================================================================
  3374. # ● Histórico (Version History)
  3375. #==============================================================================
  3376. # v3.1 - Melhoria do animação após morte (MOG Sprite Actor)
  3377. #      - Correção de não conseguir salvar o jogo.
  3378. #      - Correção do glitch atacar o battler morto em multiplas ações.
  3379. # v3.0 - Adição do movimento de ir até o alvo e executar a ação.
  3380. #      - Compatibilidade com MOG Sprite Actor.
  3381. #      - Opção de definir a posição do inimigo além do limite do database.
  3382. #==============================================================================

  3383. $imported = {} if $imported.nil?
  3384. $imported[:mog_battler_motion] = true

  3385. #==============================================================================
  3386. # ● CONFIGURAÇÃO
  3387. #==============================================================================
  3388. # ■ Animação inicial de entrada ao começar a batalha.
  3389. #==============================================================================
  3390. # Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
  3391. #
  3392. # <Motion Appear = X>
  3393. #
  3394. # X = 0
  3395. # Battler desliza horizontalmente.
  3396. #
  3397. # X = 1
  3398. # Battler desliza verticalmente.
  3399. #
  3400. # X = 2
  3401. # Battler rola (Cambalhota O_o) pela tela.
  3402. #
  3403. # X = 3
  3404. # Zoom IN
  3405. #
  3406. # X = 4
  3407. # Zoom Out
  3408. #
  3409. # X = 5
  3410. # Efeito de emergir do solo.
  3411. #
  3412. #==============================================================================
  3413. # ■ Animações dos battlers em modo espera.
  3414. #==============================================================================
  3415. # Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
  3416. #
  3417. # <Motion Standby = X>
  3418. #
  3419. # X = 0
  3420. # Ativa o efeito do battler respirando.
  3421. #
  3422. # X = 1
  3423. # Ativa o efeito do battler levitando.
  3424. #
  3425. # X = 2
  3426. # Ativa o efeito do battler movimentando para os lados.
  3427. #
  3428. #==============================================================================
  3429. # ■ Animações dos battlers em modo de ação.
  3430. #==============================================================================
  3431. # Coloque as seguintes Tags na caixa de notas de itens ou habilidades.
  3432. #
  3433. # <Motion Action = X>
  3434. #
  3435. # X = 0
  3436. # Ativa o efeito de ação de zoom.
  3437. #
  3438. # X = 1
  3439. # Ativa o efeito de ação de pular.
  3440. #
  3441. # X = 2
  3442. # Ativa o efeito de girar para a esquerda.
  3443. #
  3444. # X = 3
  3445. # Ativa o efeito de girar para a direita.
  3446. #
  3447. # X = 4
  3448. # Ativa o efeito de tremer.
  3449. #
  3450. # X = 5
  3451. # Ativa o efeito de ação frontal.
  3452. #
  3453. # X = 6
  3454. # Ativa o efeito de dar um passo para esquerda.
  3455. #
  3456. # X = 7
  3457. # Ativa o efeito de de dar um passo para direita.
  3458. #
  3459. #==============================================================================
  3460. # ■ Animações dos battlers em Colapso.
  3461. #==============================================================================
  3462. # Coloque as seguintes Tags na caixa de notas dos inimigos ou personagens.
  3463. #
  3464. # <Motion Collapse = X>
  3465. #
  3466. # X = 0
  3467. # Ativa colapso na vertical.
  3468. #
  3469. # X = 1
  3470. # Ativa o colapso na horizontal.
  3471. #
  3472. # X = 2
  3473. # Ativa o colapso em Zoom OUT.
  3474. #
  3475. # X = 3
  3476. # Ativa o colapso em Zoom IN.
  3477. #
  3478. # X = 4
  3479. # Ativa o colapso em Zoom IN e Zoom OUT.
  3480. #
  3481. # X = 5
  3482. # Ativa o colapso em Modo Boss.
  3483. #
  3484. # X = 6
  3485. # Não ativa colapso.(Do nothing)
  3486. #
  3487. #==============================================================================
  3488. # ■ Ativar animação de dano em condições maléficas.
  3489. #==============================================================================
  3490. # Coloque a seguinte Tag na caixa de notas de condições para ativar o efeito
  3491. # de dano.
  3492. #
  3493. # <Bad State>
  3494. #
  3495. #==============================================================================
  3496. # ■ Definir uma posição específica do battler inimigo
  3497. #==============================================================================
  3498. # Para definir uma posição do inimigo na tela use a Tag abaixo na caixa
  3499. # dos inimigos
  3500. #
  3501. # <Screen X Y = 150 - 400>
  3502. #
  3503. #==============================================================================
  3504. module MOG_BATTLER_MOTION

  3505.   #============================================================================
  3506.   #Ativar o efeito no aliados.
  3507.   #============================================================================
  3508.   ENABLE_ACTOR_MOTION = true
  3509.   
  3510.   #============================================================================
  3511.   #Ativar o efeito nos inimigos
  3512.   #============================================================================
  3513.   ENABLE_ENEMY_MOTION = true
  3514.   
  3515.   #============================================================================
  3516.   #Definição da velocidade do efeito de respirar.
  3517.   #============================================================================
  3518.   BREATH_EFFECT_SPEED = 1  #Default 1
  3519.   
  3520.   #============================================================================
  3521.   #Definição do limite de zoom do efeito de respirar.
  3522.   #============================================================================
  3523.   BREATH_EFFECT_RANGE = [0.92, 1.00] #Default [0.92, 1.00]
  3524.   
  3525.   #============================================================================
  3526.   # Ativar a função mirror dependendo do lado do oponente.
  3527.   #============================================================================
  3528.   BATTLER_MIRROR_DIRECTION = true
  3529.   
  3530. end

  3531. #==============================================================================
  3532. # ■ Game_Temp
  3533. #==============================================================================
  3534. class Game_Temp
  3535.   
  3536.   attr_accessor :battler_in_motion
  3537.   attr_accessor :bact_wait_d
  3538.   attr_accessor :bact_phase
  3539.   
  3540.   #--------------------------------------------------------------------------
  3541.   # ● Initialize
  3542.   #--------------------------------------------------------------------------      
  3543.   alias mog_battler_motion_initialize initialize
  3544.   def initialize
  3545.       @battler_in_motion = false ; @bact_wait_d = 0 ; @bact_phase = [0,0]
  3546.       mog_battler_motion_initialize
  3547.   end  
  3548.   
  3549. end

  3550. #==============================================================================
  3551. # ■ Game_Battler
  3552. #==============================================================================
  3553. class Game_Battler < Game_BattlerBase
  3554.   
  3555.    attr_accessor :motion_start
  3556.    attr_accessor :motion_stand
  3557.    attr_accessor :motion_action
  3558.    attr_accessor :motion_damage
  3559.    attr_accessor :motion_collapse
  3560.    attr_accessor :motion_move
  3561.    attr_accessor :motion_org_pos
  3562.    attr_accessor :motion_bms
  3563.    attr_accessor :bact_action
  3564.    attr_accessor :bact_skill
  3565.    
  3566.   #--------------------------------------------------------------------------
  3567.   # ● Initialize
  3568.   #--------------------------------------------------------------------------      
  3569.    alias mog_motion_animation_initialize initialize
  3570.    def initialize
  3571.        mog_motion_animation_initialize
  3572.        @motion_start = -1
  3573.        @motion_stand = [-1,0]
  3574.        @motion_action = [-1,0]
  3575.        @motion_collapse = [7,0]
  3576.        @motion_damage = [0,0]
  3577.        @motion_move = [false,0,0]
  3578.        @motion_org_pos = [0,0]
  3579.        @motion_bms = [0,false]
  3580.        bact_action_clear
  3581.    end     

  3582.   #--------------------------------------------------------------------------
  3583.   # ● Bact Action Clear
  3584.   #--------------------------------------------------------------------------      
  3585.   def bact_action_clear
  3586.       @bact_action = [false,0,0] ; @bact_skill = nil
  3587.   end   

  3588.   #--------------------------------------------------------------------------
  3589.   # ● Added New State
  3590.   #--------------------------------------------------------------------------  
  3591.   alias mog_motion_animation_add_new_state add_new_state
  3592.   def add_new_state(state_id)
  3593.       mog_motion_animation_add_new_state(state_id)
  3594.       self.motion_damage[0] = 1 if $data_states[state_id].note =~ /<Bad State>/
  3595.   end   

  3596.   #--------------------------------------------------------------------------
  3597.   # ● Move To
  3598.   #--------------------------------------------------------------------------  
  3599.   def move_to(x,y)
  3600.       return if self.dead?
  3601.       @motion_move = [true,x,y]
  3602.   end
  3603.   
  3604.   #--------------------------------------------------------------------------
  3605.   # ● Set Original Position
  3606.   #--------------------------------------------------------------------------  
  3607.   def set_org_pos
  3608.       scx = self.screen_x rescue 0
  3609.       scy = self.screen_y rescue 0   
  3610.       @motion_opos = [scx,scy]
  3611.   end
  3612.   
  3613.   #--------------------------------------------------------------------------
  3614.   # ● Return Org
  3615.   #--------------------------------------------------------------------------  
  3616.   def return_org
  3617.       return if self.dead?
  3618.       @motion_move = [true,@motion_opos[0],@motion_opos[1]]   
  3619.   end
  3620.    
  3621. end

  3622. #==============================================================================
  3623. # ■ Game_Enemy
  3624. #==============================================================================
  3625. class Game_Enemy < Game_Battler
  3626.    
  3627.   #--------------------------------------------------------------------------
  3628.   # ● Initialize
  3629.   #--------------------------------------------------------------------------
  3630.   alias mog_motion_animation_enemy_initialize initialize
  3631.   def initialize(index, enemy_id)
  3632.       mog_motion_animation_enemy_initialize(index, enemy_id)
  3633.       setup_motion_animation(enemy_id)
  3634.   end
  3635.   
  3636.   #--------------------------------------------------------------------------
  3637.   # ● Setup Motion Animation
  3638.   #--------------------------------------------------------------------------  
  3639.   def setup_motion_animation(enemy_id)
  3640.       self.motion_stand[0] = $1.to_i if  enemy.note =~ /<Motion Standby = (\d+)>/i
  3641.       self.motion_collapse[0] = $1.to_i if  enemy.note =~ /<Motion Collapse = (\d+)>/i
  3642.       self.motion_start =  $1.to_i if  enemy.note =~ /<Motion Appear = (\d+)>/i
  3643.   end
  3644. end

  3645. #==============================================================================
  3646. # ■ Game Actor
  3647. #==============================================================================
  3648. class Game_Actor < Game_Battler

  3649.   #--------------------------------------------------------------------------
  3650.   # ● Setup
  3651.   #--------------------------------------------------------------------------
  3652.   alias mog_motion_animation_actor_setup setup
  3653.   def setup(actor_id)
  3654.       mog_motion_animation_actor_setup(actor_id)
  3655.       self.motion_stand[0] = $1.to_i if  actor.note =~ /<Motion Standby = (\d+)>/i
  3656.       self.motion_collapse[0] = $1.to_i if  actor.note =~ /<Motion Collapse = (\d+)>/i      
  3657.       self.motion_start =  $1.to_i if  actor.note =~ /<Motion Appear = (\d+)>/i  
  3658.   end

  3659. end

  3660. #==============================================================================
  3661. # ■ Game_Battler
  3662. #==============================================================================
  3663. class Game_Battler < Game_BattlerBase
  3664.   
  3665.   #--------------------------------------------------------------------------
  3666.   # ● Execute Damage
  3667.   #--------------------------------------------------------------------------  
  3668.   alias mog_battler_motion_execute_damage execute_damage
  3669.   def execute_damage(user)
  3670.       mog_battler_motion_execute_damage(user)
  3671.       self.motion_damage[0] = 1 if @result.hp_damage > 0
  3672.   end
  3673.   
  3674. end

  3675. #==============================================================================
  3676. # ■ Spriteset Battle
  3677. #==============================================================================
  3678. class Spriteset_Battle
  3679.   
  3680.   #--------------------------------------------------------------------------
  3681.   # * Update
  3682.   #--------------------------------------------------------------------------
  3683.   alias mog_battler_motion_update update
  3684.   def update
  3685.       $game_temp.battler_in_motion = false
  3686.       mog_battler_motion_update
  3687.   end
  3688.   
  3689.   #--------------------------------------------------------------------------
  3690.   # * Animation?
  3691.   #--------------------------------------------------------------------------
  3692.   alias mog_battler_motion_animation? animation?
  3693.   def animation?
  3694.       return true if $game_temp.battler_in_motion
  3695.       mog_battler_motion_animation?
  3696.   end
  3697.   #--------------------------------------------------------------------------
  3698.   # * Effect?
  3699.   #--------------------------------------------------------------------------
  3700.   alias mog_battler_motion_effect? effect?
  3701.   def effect?
  3702.       return true if $game_temp.battler_in_motion
  3703.       mog_battler_motion_effect?
  3704.   end
  3705.   
  3706. end


  3707. #==============================================================================
  3708. #==============================================================================
  3709. # ● INITIAL ●
  3710. #==============================================================================
  3711. #==============================================================================

  3712. #==============================================================================
  3713. # ■ Sprite Battler
  3714. #==============================================================================
  3715. class Sprite_Battler < Sprite_Base

  3716.   #--------------------------------------------------------------------------
  3717.   # ● Can Update Motion?
  3718.   #--------------------------------------------------------------------------   
  3719.   def can_update_motion?
  3720.       return true
  3721.   end   
  3722.   
  3723.   #--------------------------------------------------------------------------
  3724.   # ● Update Position
  3725.   #--------------------------------------------------------------------------  
  3726.   alias mog_motion_animation_update_position update_position
  3727.   def update_position
  3728.       active_battler_motion      
  3729.       if @battler_motion_active
  3730.          update_motion_animation
  3731.          self.z = @battler.screen_z rescue nil
  3732.          self.z += 20 if @battler.bact_data[1] != nil and [email protected]_data[6]
  3733.          return
  3734.       end      
  3735.       mog_motion_animation_update_position
  3736.       self.z += 20 if @battler.bact_data[1] != nil and [email protected]_data[6]
  3737.   end  
  3738.   
  3739.   #--------------------------------------------------------------------------
  3740.   # ● Active Battler Motion
  3741.   #--------------------------------------------------------------------------   
  3742.   def active_battler_motion
  3743.       return if @motion_initial_base != nil or bitmap == nil
  3744.       return if @battler == nil
  3745.       return if [email protected]?
  3746.       @motion_initial_base = true
  3747.       @battler_motion_active = true if can_update_battler_motion?
  3748.   end  
  3749.   
  3750.   #--------------------------------------------------------------------------
  3751.   # ● Can Update Battler Motion
  3752.   #--------------------------------------------------------------------------      
  3753.   def can_update_battler_motion?
  3754.       return false if @battler == nil
  3755.       return false if @battler.dead?
  3756.       return false if [email protected]_sprite?
  3757.       return false if @battler.screen_x == nil
  3758.       return false if @battler.is_a?(Game_Actor) and !MOG_BATTLER_MOTION::ENABLE_ACTOR_MOTION
  3759.       return false if @battler.is_a?(Game_Enemy) and !MOG_BATTLER_MOTION::ENABLE_ENEMY_MOTION
  3760.       return false if $imported[:mog_sprite_actor] and @battler.is_a?(Game_Actor)
  3761.       return true
  3762.   end
  3763.    
  3764.   #--------------------------------------------------------------------------
  3765.   # ● Update Motion Animation
  3766.   #--------------------------------------------------------------------------   
  3767.   def update_motion_animation
  3768.       setup_initial_motion
  3769.       execute_start_animation
  3770.       return if @wait_motion_start
  3771.       if can_execute_collapse?
  3772.          execute_motion_collapse
  3773.       else
  3774.          if can_update_motion?
  3775.             execute_motion_move_to if can_update_move_to?
  3776.             execute_motion_damage
  3777.             execute_motion_idle if can_update_idle?
  3778.             execute_motion_action if can_update_action?
  3779.          end
  3780.       end
  3781.   end
  3782.   
  3783.   #--------------------------------------------------------------------------
  3784.   # ● Setup Initial Motion
  3785.   #--------------------------------------------------------------------------      
  3786.   def setup_initial_motion
  3787.       return if @motion_initial != nil
  3788.       @motion_initial = true
  3789.       @collapse_done = false
  3790.       @motion_speed = 0
  3791.       @start_speed = [0,0]      
  3792.       @battler.motion_collapse[1] = 0
  3793.       self.x = @battler.screen_x rescue 0
  3794.       self.y = @battler.screen_y rescue 0
  3795.       self.z = @battler.screen_z rescue 100
  3796.       @battler.motion_bms = [0,false]
  3797.       @battler.set_org_pos      
  3798.       setup_motion_stand
  3799.       @original_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,255]
  3800.       setup_motion_start
  3801.       setup_motion_damage            
  3802.       setup_motion_action
  3803.   end  

  3804.   #--------------------------------------------------------------------------
  3805.   # ● Return Set
  3806.   #--------------------------------------------------------------------------         
  3807.   def return_set(value)
  3808.       self.x = value[0]
  3809.       self.y = value[1]
  3810.       self.zoom_x = value[2]
  3811.       self.zoom_y = value[3]
  3812.       self.mirror = value[4]
  3813.       self.angle = value[5]
  3814.       self.opacity = value[6]      
  3815.   end  

  3816.   #--------------------------------------------------------------------------
  3817.   # ● setup_motion_start
  3818.   #--------------------------------------------------------------------------            
  3819.   def setup_motion_start
  3820.       @wait_motion_start = true
  3821.       @scr_rect_speed = 1      
  3822.       case @battler.motion_start
  3823.          when 0  
  3824.             self.x = 0 - (self.bitmap.width + rand(100))
  3825.          when 1
  3826.             self.y = 0 - (self.bitmap.height + rand(100))
  3827.          when 2   
  3828.             self.angle = 360
  3829.             self.x = 0 - self.bitmap.width
  3830.          when 3   
  3831.             self.zoom_x = 1.5 + (rand(10) / 100.0)
  3832.             self.zoom_y = self.zoom_x
  3833.             self.opacity = 0
  3834.          when 4
  3835.             self.zoom_x = 0.2 + (rand(10) / 100.0)
  3836.             self.zoom_y = self.zoom_x
  3837.             self.opacity = 0
  3838.          when 5   
  3839.             self.src_rect.y = -self.bitmap.height
  3840.             @scr_rect_speed = self.bitmap.height / 40
  3841.             @scr_rect_speed = 1 if @scr_rect_speed <= 0
  3842.          else   
  3843.            @wait_motion_start = false
  3844.       end   
  3845.   end  
  3846.   
  3847.   #--------------------------------------------------------------------------
  3848.   # ● Execute Start Animation
  3849.   #--------------------------------------------------------------------------         
  3850.   def execute_start_animation
  3851.       return if !@wait_motion_start
  3852.       $game_temp.battler_in_motion = true
  3853.       s_x = 1 + ((self.x - @original_set[0]).abs / (20 + @start_speed[0]))
  3854.       s_y = 1 + ((self.y - @original_set[1]).abs / (20 + @start_speed[1]))      
  3855.       if self.x < @original_set[0]
  3856.          self.x += s_x
  3857.          self.x = @original_set[0] if self.x >= @original_set[0]
  3858.       elsif self.x > @original_set[0]
  3859.          self.x -= s_x
  3860.          self.x = @original_set[0] if self.x <= @original_set[0]
  3861.       end
  3862.       if self.y < @original_set[1]
  3863.          self.y += s_y
  3864.          self.y = @original_set[1] if self.y > @original_set[1]
  3865.       elsif self.y > @original_set[1]
  3866.          self.y -= s_y
  3867.          self.y = @original_set[1] if self.y < @original_set[1]
  3868.       end
  3869.       if self.zoom_x != @original_set[2]
  3870.          if self.zoom_x > @original_set[2]
  3871.             self.zoom_x -= 0.01
  3872.             self.zoom_x = @original_set[2] if self.zoom_x < @original_set[2]
  3873.          elsif self.zoom_x < @original_set[2]
  3874.             self.zoom_x += 0.01
  3875.             self.zoom_x = @original_set[2] if self.zoom_x > @original_set[2]
  3876.          end         
  3877.       end  
  3878.       if self.zoom_y != @original_set[3]
  3879.          if self.zoom_y > @original_set[3]
  3880.             self.zoom_y -= 0.01
  3881.             self.zoom_y = @original_set[3] if self.zoom_y < @original_set[3]
  3882.          elsif self.zoom_y < @original_set[3]
  3883.             self.zoom_y += 0.01
  3884.             self.zoom_y = @original_set[3] if self.zoom_y > @original_set[3]
  3885.          end         
  3886.       end        
  3887.       self.opacity += 10
  3888.       if self.angle > 0
  3889.          self.angle -= 5
  3890.          self.angle = @original_set[5] if self.angle < @original_set[5]
  3891.       end
  3892.       if self.src_rect.y != 0
  3893.          self.src_rect.y += @scr_rect_speed
  3894.          self.src_rect.y = 0 if self.src_rect.y > 0
  3895.       end
  3896.       if sprite_original_set?  
  3897.          @wait_motion_start = false
  3898.          @battler.motion_bms[1] = true
  3899.          self.src_rect.y = 0
  3900.       end   
  3901.   end  
  3902.   
  3903.   #--------------------------------------------------------------------------
  3904.   # ● Sprite original Set?
  3905.   #--------------------------------------------------------------------------         
  3906.   def sprite_original_set?
  3907.       return false if self.x != @original_set[0]
  3908.       return false if self.y != @original_set[1]   
  3909.       return false if self.zoom_x != @original_set[2]
  3910.       return false if self.zoom_y != @original_set[3]        
  3911.       return false if self.mirror != @original_set[4]
  3912.       return false if self.angle != @original_set[5]
  3913.       return false if self.opacity != @original_set[6]     
  3914.       return false if self.src_rect.y != 0      
  3915.       return true
  3916.   end  
  3917.    
  3918. end

  3919. #==============================================================================
  3920. #==============================================================================
  3921. # ● MOVE TO ●
  3922. #==============================================================================
  3923. #==============================================================================

  3924. #==============================================================================
  3925. # ■ Sprite Battler
  3926. #==============================================================================
  3927. class Sprite_Battler < Sprite_Base
  3928.   
  3929.   #--------------------------------------------------------------------------
  3930.   # ● Can Update Move_to
  3931.   #--------------------------------------------------------------------------   
  3932.   def can_update_move_to?
  3933.       return false if [email protected]_move[0]
  3934.       return true
  3935.   end  
  3936.   
  3937.   #--------------------------------------------------------------------------
  3938.   # ● Execute Motion Move_to
  3939.   #--------------------------------------------------------------------------        
  3940.   def execute_motion_move_to      
  3941.       $game_temp.battler_in_motion = true
  3942.       execute_motion_mv(0,self.x,@battler.motion_move[1])
  3943.       execute_motion_mv(1,self.y,@battler.motion_move[2])
  3944.       mv_clear
  3945.   end
  3946.    
  3947.   #--------------------------------------------------------------------------
  3948.   # ● MV Clear
  3949.   #--------------------------------------------------------------------------      
  3950.   def mv_clear
  3951.       return if self.x != @battler.motion_move[1]
  3952.       return if self.y != @battler.motion_move[2]
  3953.       @battler.motion_move[0] = false
  3954.   end
  3955.       
  3956.   #--------------------------------------------------------------------------
  3957.   # ● Execute Motion Mv
  3958.   #--------------------------------------------------------------------------      
  3959.   def execute_motion_mv(type,cp,np)
  3960.       sp = 2 + ((cp - np).abs / 20)
  3961.       if cp > np
  3962.          cp -= sp
  3963.          cp = np if cp < np
  3964.       elsif cp < np
  3965.          cp += sp
  3966.          cp = np if cp > np
  3967.       end     
  3968.       self.x = cp if type == 0
  3969.       self.y = cp if type == 1
  3970.   end   
  3971.   
  3972. end

  3973. #==============================================================================
  3974. #==============================================================================
  3975. # ● DAMAGE ●
  3976. #==============================================================================
  3977. #==============================================================================

  3978. #==============================================================================
  3979. # ■ Sprite Battler
  3980. #==============================================================================
  3981. class Sprite_Battler < Sprite_Base

  3982.   #--------------------------------------------------------------------------
  3983.   # ● Can Update Damage
  3984.   #--------------------------------------------------------------------------   
  3985.   def can_update_damage?
  3986.       return false if @battler.motion_damage[1] == 0
  3987.       return false if @battler.motion_move[0]
  3988.       return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp > 0
  3989.       return true
  3990.   end   
  3991.   
  3992.   #--------------------------------------------------------------------------
  3993.   # ● Setup Initial Motion
  3994.   #--------------------------------------------------------------------------        
  3995.   def execute_motion_damage
  3996.       damage_refresh
  3997.       update_motion_damage if can_update_damage?
  3998.   end

  3999.   #--------------------------------------------------------------------------
  4000.   # ● Setup Motion Damage
  4001.   #--------------------------------------------------------------------------        
  4002.   def setup_motion_damage     
  4003.       @battler.motion_damage = [0,0]
  4004.       @damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  4005.   end  
  4006.   
  4007.   #--------------------------------------------------------------------------
  4008.   # ● Damage Refresh
  4009.   #--------------------------------------------------------------------------         
  4010.   def damage_refresh
  4011.       return if @battler.motion_damage[0] == 0
  4012.       if @battler.motion_damage[1] == 0
  4013.          @damage_pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  4014.       end
  4015.       @battler.motion_damage[0] = 0
  4016.       @battler.motion_damage[1] = 45
  4017.   end
  4018.   
  4019.   #--------------------------------------------------------------------------
  4020.   # ● Update Motion Damage
  4021.   #--------------------------------------------------------------------------            
  4022.   def update_motion_damage
  4023.       return if @damage_pre_set.nil?
  4024.       self.x = @damage_pre_set[0] + rand(@battler.motion_damage[1])
  4025.       @battler.motion_damage[1] -= 1
  4026.       if @battler.motion_damage[1] == 0
  4027.          if $imported[:mog_battle_hud_ex] != nil and @battler.is_a?(Game_Actor)
  4028.             return_set(@original_set)
  4029.          else  
  4030.             return_set(@damage_pre_set)
  4031.          end   
  4032.       end  
  4033.   end
  4034.    
  4035. end

  4036. #==============================================================================
  4037. #==============================================================================
  4038. # ● IDLE ●
  4039. #==============================================================================
  4040. #==============================================================================


  4041. #==============================================================================
  4042. # ■ Sprite Battler
  4043. #==============================================================================
  4044. class Sprite_Battler < Sprite_Base
  4045.   
  4046.   #--------------------------------------------------------------------------
  4047.   # ● Can Update idle
  4048.   #--------------------------------------------------------------------------   
  4049.   def can_update_idle?
  4050.       return false if @old_motion_action != -1
  4051.       return false if @battler.motion_damage[1] > 0
  4052.       return false if @battler.motion_move[0]
  4053.       return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp > 0
  4054.       return true
  4055.   end      

  4056.   #--------------------------------------------------------------------------
  4057.   # ● Setup Motion Stand
  4058.   #--------------------------------------------------------------------------        
  4059.   def setup_motion_stand
  4060.       @breath_range = [MOG_BATTLER_MOTION::BREATH_EFFECT_RANGE[0],
  4061.                        MOG_BATTLER_MOTION::BREATH_EFFECT_RANGE[1],0,
  4062.                        MOG_BATTLER_MOTION::BREATH_EFFECT_SPEED]
  4063.       @float_range = [@battler.screen_y - 10, @battler.screen_y + 10]
  4064.       @side_range = [@battler.screen_x - 10, @battler.screen_x + 10]
  4065.       @battler.motion_stand[1] = 0
  4066.       case @battler.motion_stand[0]
  4067.          when 0
  4068.              self.zoom_y = @breath_range[0] + (rand(10) / 100.0)
  4069.              @battler.motion_stand[1] = rand(2)
  4070.          when 1
  4071.              self.y += 10 - rand(20)
  4072.              @battler.motion_stand[1] = rand(2)
  4073.          when 2
  4074.              self.x += 10 - rand(20)
  4075.              @battler.motion_stand[1] = rand(2)            
  4076.       end
  4077.   end
  4078.    
  4079.   #--------------------------------------------------------------------------
  4080.   # ● Execute Motion Animation
  4081.   #--------------------------------------------------------------------------        
  4082.   def execute_motion_idle
  4083.       case @battler.motion_stand[0]
  4084.          when 0
  4085.              update_motion_breath
  4086.          when 1  
  4087.              update_motion_float
  4088.          when 2
  4089.              update_motion_side
  4090.       end        
  4091.   end  
  4092.   
  4093.   #--------------------------------------------------------------------------
  4094.   # ● Update Motion Breath
  4095.   #--------------------------------------------------------------------------         
  4096.   def update_motion_breath  
  4097.       @breath_range[2] += 1
  4098.       return if @breath_range[2] < @breath_range[3]
  4099.       @breath_range[2] = 0
  4100.       case @battler.motion_stand[1]
  4101.          when 0
  4102.            self.zoom_y -= 0.002
  4103.            if self.zoom_y <= @breath_range[0]
  4104.               @battler.motion_stand[1] = 1
  4105.               self.zoom_y = @breath_range[0]
  4106.            end   
  4107.          when 1  
  4108.            self.zoom_y += 0.002
  4109.            if self.zoom_y >= @breath_range[1]
  4110.               @battler.motion_stand[1] = 0
  4111.               self.zoom_y = @breath_range[1]
  4112.            end   
  4113.       end
  4114.   end  
  4115.   
  4116.   #--------------------------------------------------------------------------
  4117.   # ● Update Motion Float
  4118.   #--------------------------------------------------------------------------         
  4119.   def update_motion_float
  4120.       @motion_speed += 1
  4121.       return if @motion_speed < 5
  4122.       @motion_speed = 0
  4123.       case @battler.motion_stand[1]
  4124.            when 0
  4125.                 self.y -= 1
  4126.                 @battler.motion_bms[0] -= 1
  4127.                 if self.y < @float_range[0]
  4128.                    self.y = @float_range[0]
  4129.                    @battler.motion_bms[0] += 1
  4130.                    @battler.motion_stand[1] = 1
  4131.                 end   
  4132.            when 1  
  4133.                 self.y += 1
  4134.                 @battler.motion_bms[0] += 1
  4135.                 if self.y > @float_range[1]
  4136.                    self.y = @float_range[1]
  4137.                    @battler.motion_bms[0] -= 1
  4138.                    @battler.motion_stand[1] = 0
  4139.                 end                  
  4140.       end
  4141.   end   
  4142.   
  4143.   #--------------------------------------------------------------------------
  4144.   # ● Update Motion Side
  4145.   #--------------------------------------------------------------------------         
  4146.   def update_motion_side
  4147.       @motion_speed += 1
  4148.       return if @motion_speed < 5
  4149.       @motion_speed = 0
  4150.       case @battler.motion_stand[1]
  4151.            when 0
  4152.                 self.x -= 1
  4153.                 if self.x < @side_range[0]
  4154.                    self.x = @side_range[0]
  4155.                    @battler.motion_stand[1] = 1
  4156.                 end   
  4157.            when 1  
  4158.                 self.x += 1
  4159.                 if self.x > @side_range[1]
  4160.                    self.x = @side_range[1]
  4161.                    @battler.motion_stand[1] = 0
  4162.                 end                  
  4163.       end
  4164.   end     
  4165.   
  4166. end

  4167. #==============================================================================
  4168. #==============================================================================
  4169. # ● ACTION ●
  4170. #==============================================================================
  4171. #==============================================================================

  4172. #==============================================================================
  4173. # ■ Game Action
  4174. #==============================================================================
  4175. class Game_Action
  4176.   
  4177.   #--------------------------------------------------------------------------
  4178.   # ● Prepare
  4179.   #--------------------------------------------------------------------------                  
  4180.   alias mog_motion_action_prepare prepare
  4181.   def prepare
  4182.       mog_motion_action_prepare   
  4183.       set_motion_action
  4184.   end
  4185.    
  4186.   #--------------------------------------------------------------------------
  4187.   # ● Set Motion Action
  4188.   #--------------------------------------------------------------------------                    
  4189.   def set_motion_action
  4190.       return if @item.object == nil or subject == nil
  4191.       subject.motion_action[0] = $1.to_i if @item.object.note =~ /<Motion Action = (\d+)>/i
  4192.   end
  4193.   
  4194. end

  4195. #==============================================================================
  4196. # ■ Sprite Battler
  4197. #==============================================================================
  4198. class Sprite_Battler < Sprite_Base
  4199.   
  4200.   #--------------------------------------------------------------------------
  4201.   # ● Can Update Action
  4202.   #--------------------------------------------------------------------------   
  4203.   def can_update_action?
  4204.       return false if @battler.motion_damage[1] > 0
  4205.       return false if @battler.motion_move[0]
  4206.       return false if $imported[:mog_battle_camera] and $game_temp.bc_wait_cp > 0
  4207.       return true
  4208.   end      
  4209.   
  4210.   #--------------------------------------------------------------------------
  4211.   # ● Setup Motion Action
  4212.   #--------------------------------------------------------------------------        
  4213.   def setup_motion_action
  4214.       @battler.motion_action = [-1,0]
  4215.       @old_motion_action = @battler.motion_action[0]
  4216.       @pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  4217.   end

  4218.   #--------------------------------------------------------------------------
  4219.   # ● Refresh Action
  4220.   #--------------------------------------------------------------------------         
  4221.   def refresh_action
  4222.       return if @old_motion_action == @battler.motion_action[0]
  4223.       if @old_motion_action == -1
  4224.          @pre_set = [self.x, self.y, self.zoom_x,self.zoom_y,self.mirror,self.angle,self.opacity]
  4225.       end
  4226.       @battler.motion_action[1] = 0  
  4227.       return_set(@pre_set)
  4228.       @old_motion_action = @battler.motion_action[0]
  4229.       self.src_rect.y =  0
  4230.   end  
  4231.   
  4232.   #--------------------------------------------------------------------------
  4233.   # ● Execute Motion Action
  4234.   #--------------------------------------------------------------------------            
  4235.   def execute_motion_action
  4236.       refresh_action
  4237.       update_motion_action
  4238.   end  
  4239.   
  4240.   #--------------------------------------------------------------------------
  4241.   # ● Update Motion Action
  4242.   #--------------------------------------------------------------------------              
  4243.   def update_motion_action
  4244.       return if @battler.motion_action[0] == -1
  4245.       $game_temp.battler_in_motion = true
  4246.       @battler.motion_action[1] += 1
  4247.       case @battler.motion_action[0]
  4248.            when -2
  4249.               end_action
  4250.            when 0
  4251.               update_motion_zoom
  4252.            when 1
  4253.               update_motion_jump
  4254.            when 2  
  4255.               update_motion_round_right
  4256.            when 3
  4257.               update_motion_round_left
  4258.            when 4
  4259.               update_motion_shake
  4260.            when 5
  4261.               update_motion_front
  4262.            when 6   
  4263.               update_motion_step_left
  4264.            when 7
  4265.               update_motion_step_right              
  4266.       end
  4267.   end
  4268.   
  4269.   #--------------------------------------------------------------------------
  4270.   # ● Update Motion Step Left
  4271.   #--------------------------------------------------------------------------                  
  4272.   def update_motion_step_left
  4273.       case @battler.motion_action[1]
  4274.            when 1..20
  4275.                 self.x -= 2
  4276.            when 21..40  
  4277.                 self.x += 2           
  4278.            else
  4279.            end_action
  4280.       end   
  4281.    
  4282.   end  
  4283.   
  4284.   #--------------------------------------------------------------------------
  4285.   # ● Update Motion Step Right
  4286.   #--------------------------------------------------------------------------                  
  4287.   def update_motion_step_right
  4288.       case @battler.motion_action[1]
  4289.            when 1..20
  4290.                 self.x += 2
  4291.            when 21..40  
  4292.                 self.x -= 2           
  4293.            else
  4294.         end_action   
  4295.       end   
  4296.   end   
  4297.   
  4298.   #--------------------------------------------------------------------------
  4299.   # ● Update Motion Shake
  4300.   #--------------------------------------------------------------------------               
  4301.   def update_motion_shake      
  4302.       self.x = @pre_set[0] + rand(@battler.motion_action[1]) if can_update_motion_shake?
  4303.       end_action if @battler.motion_action[1] > 40
  4304.   end   
  4305.   
  4306.   #--------------------------------------------------------------------------
  4307.   # ● Can Update Motion Shake?
  4308.   #--------------------------------------------------------------------------                  
  4309.   def can_update_motion_shake?
  4310.       if $imported[:mog_battle_hud_ex] !=nil
  4311.          return false if @battler.is_a?(Game_Actor)
  4312.       end
  4313.       return true  
  4314.   end  
  4315.   
  4316.   #--------------------------------------------------------------------------
  4317.   # ● Update Motion Zoom
  4318.   #--------------------------------------------------------------------------               
  4319.   def update_motion_zoom
  4320.       case @battler.motion_action[1]
  4321.         when 1..20
  4322.            self.zoom_x += 0.01
  4323.            self.zoom_y += 0.01
  4324.         when 21..40
  4325.            self.zoom_x -= 0.01
  4326.            self.zoom_y -= 0.01         
  4327.         else  
  4328.         end_action   
  4329.       end
  4330.   end
  4331.   
  4332.   #--------------------------------------------------------------------------
  4333.   # ● Update Motion Jump
  4334.   #--------------------------------------------------------------------------                  
  4335.   def update_motion_jump
  4336.       case @battler.motion_action[1]
  4337.         when 1..20
  4338.             self.y -= 9
  4339.             self.zoom_x += 0.01
  4340.             self.zoom_y += 0.01
  4341.             self.mirror = true
  4342.             self.angle += 9
  4343.         when 21..40
  4344.             self.y += 9
  4345.             self.zoom_x -= 0.01
  4346.             self.zoom_y -= 0.01            
  4347.             self.mirror = false
  4348.             self.angle += 9
  4349.         else  
  4350.         self.angle = 0
  4351.         end_action   
  4352.       end      
  4353.   end
  4354.   
  4355.   #--------------------------------------------------------------------------
  4356.   # ● Update Motion Front
  4357.   #--------------------------------------------------------------------------                  
  4358.   def update_motion_front
  4359.       case @battler.motion_action[1]
  4360.         when 1..20
  4361.             self.y += 3
  4362.             self.zoom_x += 0.02
  4363.             self.zoom_y += 0.02
  4364.         when 21..40
  4365.             self.y -= 3
  4366.             self.zoom_x -= 0.02
  4367.             self.zoom_y -= 0.02            
  4368.         else  
  4369.         end_action   
  4370.       end      
  4371.   end
  4372.   
  4373.   #--------------------------------------------------------------------------
  4374.   # ● Update Motion Round Left
  4375.   #--------------------------------------------------------------------------                    
  4376.   def update_motion_round_left
  4377.       case @battler.motion_action[1]
  4378.         when 1..15
  4379.             self.y += 3
  4380.             self.x -= 3
  4381.             self.mirror = false
  4382.         when 16..30
  4383.             self.x += 6
  4384.             self.mirror = true
  4385.         when 31..45
  4386.             self.y -= 3
  4387.             self.x -= 3
  4388.             self.mirror = false
  4389.         else  
  4390.         end_action  
  4391.       end        
  4392.   end
  4393.   
  4394.   #--------------------------------------------------------------------------
  4395.   # ● Update Motion Round Right
  4396.   #--------------------------------------------------------------------------                    
  4397.   def update_motion_round_right
  4398.       case @battler.motion_action[1]
  4399.         when 1..15
  4400.             self.y += 3
  4401.             self.x += 3
  4402.             self.mirror = true
  4403.         when 16..30
  4404.             self.x -= 6
  4405.              self.mirror = false
  4406.         when 31..45
  4407.             self.y -= 3
  4408.             self.x += 3
  4409.             self.mirror = true
  4410.         else  
  4411.         end_action   
  4412.       end   
  4413.   end  
  4414.   
  4415.   #--------------------------------------------------------------------------
  4416.   # ● End Action
  4417.   #--------------------------------------------------------------------------                     
  4418.   def end_action
  4419.       if $imported[:mog_battle_hud_ex] != nil and @battler.is_a?(Game_Actor)
  4420.          return_set(@original_set)
  4421.       else  
  4422.          return_set(@pre_set)  
  4423.       end
  4424.       @battler.motion_action = [-1,0]
  4425.   end  
  4426.   
  4427. end

  4428. #==============================================================================
  4429. #==============================================================================
  4430. # ● COLLAPSE ●
  4431. #==============================================================================
  4432. #==============================================================================

  4433. #==============================================================================
  4434. # ■ Sprite Battler
  4435. #==============================================================================
  4436. class Sprite_Battler < Sprite_Base

  4437.   #--------------------------------------------------------------------------
  4438.   # ● Can Update Action
  4439.   #--------------------------------------------------------------------------   
  4440.   def can_update_collapse?
  4441.       return true
  4442.   end      
  4443.   
  4444.   #--------------------------------------------------------------------------
  4445.   # ● Update Blink
  4446.   #--------------------------------------------------------------------------      
  4447.   alias mog_motion_animation_update_blink update_blink
  4448.   def update_blink
  4449.       return if @battler.dead?
  4450.       mog_motion_animation_update_blink
  4451.   end
  4452.   
  4453.   #--------------------------------------------------------------------------
  4454.   # ● Update Collapse
  4455.   #--------------------------------------------------------------------------
  4456.   def update_collapse
  4457.   end
  4458.   
  4459.   #--------------------------------------------------------------------------
  4460.   # ● Execute Motion Collapse
  4461.   #--------------------------------------------------------------------------   
  4462.   def execute_motion_collapse
  4463.       collapse_end if self.opacity == 0
  4464.       @battler.motion_collapse[1] += 1      
  4465.       case @battler.motion_collapse[0]
  4466.            when 0;     update_collapse_vertical
  4467.            when 1;     update_collapse_horizontal
  4468.            when 2;     update_collapse_zoom_out
  4469.            when 3;     update_collapse_zoom_in
  4470.            when 4;     update_collapse_zoom_in_out
  4471.            when 5;     update_collapse_boss_2
  4472.            when 6;     update_collpase_do_nothing
  4473.            else ;      update_collapse_normal
  4474.       end
  4475.         
  4476.   end

  4477.   #--------------------------------------------------------------------------
  4478.   # ● Can Execute Collapse
  4479.   #--------------------------------------------------------------------------      
  4480.   def can_execute_collapse?
  4481.       return false if [email protected]?
  4482.       return false if @collapse_done
  4483.       return true
  4484.   end
  4485.   
  4486.   #--------------------------------------------------------------------------
  4487.   # ● Update Collapse Vertical
  4488.   #--------------------------------------------------------------------------        
  4489.   def update_collapse_vertical
  4490.       self.zoom_y += 0.1
  4491.       self.zoom_x -= 0.02         
  4492.       self.opacity -= 3   
  4493.   end
  4494.   
  4495.   #--------------------------------------------------------------------------
  4496.   # ● Update Collapse Horizontal
  4497.   #--------------------------------------------------------------------------         
  4498.   def update_collapse_horizontal
  4499.       self.zoom_x += 0.1
  4500.       self.zoom_y -= 0.02      
  4501.       self.opacity -= 3      
  4502.   end
  4503.      
  4504.   #--------------------------------------------------------------------------
  4505.   # ● Update Collapse Zoom Out
  4506.   #--------------------------------------------------------------------------            
  4507.   def update_collapse_zoom_out     
  4508.       self.zoom_x += 0.02
  4509.       self.zoom_y += 0.02     
  4510.       self.opacity -= 4   
  4511.   end
  4512.       
  4513.   #--------------------------------------------------------------------------
  4514.   # ● Update Collapse Zoom IN
  4515.   #--------------------------------------------------------------------------              
  4516.   def update_collapse_zoom_in
  4517.       self.zoom_x -= 0.01
  4518.       self.zoom_y -= 0.01      
  4519.       self.opacity -= 4            
  4520.   end
  4521.   
  4522.   #--------------------------------------------------------------------------
  4523.   # ● Update Collapse Zoom IN OUT
  4524.   #--------------------------------------------------------------------------               
  4525.   def update_collapse_zoom_in_out
  4526.       case @battler.motion_collapse[1]
  4527.            when 0..30
  4528.                 self.zoom_x += 0.1
  4529.                 self.zoom_y -= 0.02
  4530.                 self.opacity -= 2
  4531.            else  
  4532.                 self.zoom_y += 0.5
  4533.                 self.zoom_x -= 0.2
  4534.                 self.opacity -= 10
  4535.       end      
  4536.   end
  4537.      
  4538.   #--------------------------------------------------------------------------
  4539.   # ● Update Collapse Boss 2
  4540.   #--------------------------------------------------------------------------                  
  4541.   def update_collapse_boss_2
  4542.       self.x = @original_set[0] + rand(10)
  4543.       self.src_rect.y -= 1
  4544.       self.opacity = 0 if self.src_rect.y < -self.bitmap.height
  4545.   end
  4546.       
  4547.   #--------------------------------------------------------------------------
  4548.   # ● Update Collapse do nothing
  4549.   #--------------------------------------------------------------------------                    
  4550.   def update_collpase_do_nothing
  4551.   end  
  4552.   
  4553.   #--------------------------------------------------------------------------
  4554.   # ● Update Collapse Normal
  4555.   #--------------------------------------------------------------------------                    
  4556.   def update_collapse_normal
  4557.       self.opacity -= 3
  4558.       self.blend_type = 1
  4559.   end  
  4560.   
  4561.   #--------------------------------------------------------------------------
  4562.   # ● Collapse End
  4563.   #--------------------------------------------------------------------------      
  4564.   def collapse_end
  4565.       @collapse_done = true
  4566.       return_set(@original_set)
  4567.       self.src_rect.y = -self.bitmap.height unless @battler.motion_collapse[0] == 6
  4568.   end  

  4569.   #--------------------------------------------------------------------------
  4570.   # ● Revert to Normal
  4571.   #--------------------------------------------------------------------------        
  4572.   alias mog_battler_motion_revert_to_normal revert_to_normal
  4573.   def revert_to_normal
  4574.       if @collapse_done
  4575.          @collapse_done = false
  4576.          return_set(@original_set)
  4577.       end
  4578.       mog_battler_motion_revert_to_normal
  4579.   end  
  4580.   
  4581. end

  4582. #===============================================================================
  4583. # ■ Game Battler
  4584. #===============================================================================
  4585. class Game_Battler < Game_BattlerBase
  4586.   
  4587.   attr_accessor :bact_data
  4588.   attr_accessor :bact_sprite
  4589.   attr_accessor :pre_target
  4590.   
  4591.   #--------------------------------------------------------------------------
  4592.   # ● Initialize
  4593.   #--------------------------------------------------------------------------      
  4594.   alias mog_bact_data_motion_initialize initialize
  4595.   def initialize
  4596.       bact_clear
  4597.       mog_bact_data_motion_initialize
  4598.   end
  4599.   
  4600.   #--------------------------------------------------------------------------
  4601.   # ● Bact Clear
  4602.   #--------------------------------------------------------------------------      
  4603.   def bact_clear
  4604.       @bact_data = [0,nil,nil,nil,false,false,0,0] ; @pre_target = nil  
  4605.   end
  4606.   
  4607. end

  4608. #==============================================================================
  4609. # ■ Sprite Battler
  4610. #==============================================================================
  4611. class Sprite_Battler < Sprite_Base
  4612.   
  4613.   #--------------------------------------------------------------------------
  4614.   # ● Initialize
  4615.   #--------------------------------------------------------------------------      
  4616.   alias mog_bact_motion_initialize initialize
  4617.   def initialize(viewport, battler = nil)
  4618.       @jump_count = 0 ; @jump_peak = 0 ; @move_wait_d = 0 ; @battler_dir = [false,0]
  4619.       mog_bact_motion_initialize(viewport, battler)
  4620.       if @battler.is_a?(Game_Enemy) and @battler.enemy.note =~ /<Screen X Y = \s*(\-*\d+)\s* - \s*(\-*\d+)\s*>/
  4621.          @battler.screen_x = $1.to_i ; @battler.screen_y = $2.to_i
  4622.       end        
  4623.   end   
  4624.       
  4625.   #--------------------------------------------------------------------------
  4626.   # ● Update Position
  4627.   #--------------------------------------------------------------------------  
  4628.   alias mog_bact_motion_update_position update_position
  4629.   def update_position     
  4630.       if battler_in_motion? ; battler_in_motion ; return ; end
  4631.       if escape_phase? ; update_escape_phase ; return ; end
  4632.       mog_bact_motion_update_position   
  4633.   end
  4634.   
  4635.   #--------------------------------------------------------------------------
  4636.   # ● Battler In Motion
  4637.   #--------------------------------------------------------------------------      
  4638.   def battler_in_motion?
  4639.       return false if @battler == nil
  4640.       return false if @battler.bact_data[0] == 0
  4641.       return false if $imported[:mog_animation_plus] and $game_temp.ani_plus_wait
  4642.       return true
  4643.   end
  4644.   
  4645.   #--------------------------------------------------------------------------
  4646.   # ● Escape Phase
  4647.   #--------------------------------------------------------------------------  
  4648.   def escape_phase?
  4649.       return false if !$imported[:mog_sprite_actor]
  4650.       return false if !MOG_SPRITE_ACTOR::ESCAPE_ANIMATION
  4651.       return false if @battler == nil
  4652.       return false if @battler.is_a?(Game_Enemy)
  4653.       return false if @battler.dead?
  4654.       return false if $game_temp.bact_phase[0] != 1
  4655.       return true
  4656.   end  

  4657.   #--------------------------------------------------------------------------
  4658.   # ● Battler In Motion
  4659.   #--------------------------------------------------------------------------      
  4660.   def battler_in_motion
  4661.       old_x = self.x ; old_y = self.y
  4662.       np = [@battler.bact_data[1],@battler.bact_data[2]]
  4663.       set_move_duration(np) if @battler.bact_data[5]
  4664.       update_jump(np)
  4665.       if @pre_set != nil and @battler.is_a?(Game_Enemy) and @battler.bact_data[0] == 2
  4666.          self.zoom_x -= 0.01 if self.zoom_x > @pre_set[2]
  4667.          self.zoom_y -= 0.01 if self.zoom_y > @pre_set[3]   
  4668.       end   
  4669.       if @move_wait_d == 0
  4670.          end_bact_move(np) if self.x == np[0] and self.y == np[1]
  4671.          if $imported[:mog_sprite_actor] and [email protected]?
  4672.             @battler.step_animation if @battler.bact_data[6] if (old_x != self.x) or (old_y != self.y)
  4673.             @battler.bact_sprite[3] = 2 if @wp_index > 0
  4674.          end
  4675.       end
  4676.       self.z = @battler.screen_z
  4677.       self.z += 20 if [email protected]_data[6]
  4678.       update_in_motion_end
  4679.   end

  4680.   #--------------------------------------------------------------------------
  4681.   # ● Update In Motion End
  4682.   #--------------------------------------------------------------------------      
  4683.   def update_in_motion_end
  4684.       return if @move_wait_d == 0
  4685.       @move_wait_d -= 1
  4686.       return if @move_wait_d > 0
  4687.       @battler.bact_data[0] = 0      
  4688.   end
  4689.   
  4690.   #--------------------------------------------------------------------------
  4691.   # ● End Bact Move
  4692.   #--------------------------------------------------------------------------      
  4693.   def end_bact_move(np)
  4694.       self.angle = 0 unless @battler.dead?
  4695.       @battler.screen_x = np[0] ; @battler.screen_y = np[1]
  4696.       if @battler.motion_damage[1] > 0
  4697.          @battler.motion_damage = [0,0] ; update_motion_damage               
  4698.       end  
  4699.       if @pre_set != nil
  4700.          @pre_set[0] = self.x ; @pre_set[1] = self.y
  4701.          end_action if @battler.bact_data[0] == 2
  4702.          self.angle = 0
  4703.       end   
  4704.       @move_wait_d = (@battler.bact_data[6] or @battler.bact_data[0] == 2) ? 10 : 1
  4705.       @battler.bact_sprite[3] = 0 if $imported[:mog_sprite_actor]
  4706.       if @battler.bact_data[0] == 1
  4707.          @battler.bact_action[0] = true
  4708.       elsif @battler.bact_data[0] == 2
  4709.          @battler.bact_action_clear
  4710.          self.mirror = @battler_dir[0]
  4711.          @battler.bact_sprite[0] = @battler_dir[1]
  4712.          @battler_dir = [false,4]
  4713.          @battler.bact_sprite_need_refresh = true if @battler.is_a?(Game_Actor)
  4714.       end         
  4715.   end
  4716.         
  4717.   #--------------------------------------------------------------------------
  4718.   # ● Set Move Duration
  4719.   #--------------------------------------------------------------------------      
  4720.   def set_move_duration(np)      
  4721.       set_bact_angle_m
  4722.       self.mirror = false if @battler.bact_data[0] == 2
  4723.       if @battler.motion_damage[1] > 0
  4724.          @battler.motion_damage = [0,0] ; update_motion_damage   
  4725.       end
  4726.       @battler.motion_damage = [0,0]
  4727.       @battler.bact_data[5] = false
  4728.       x_plus = (self.x - np[0]).abs ; y_plus = (self.y - np[1]).abs
  4729.       p = 0
  4730.       p = @battler.is_a?(Game_Actor) ? 500 : 0 if $imported[:mog_sprite_actor]
  4731.       e = @battler.bact_data[6] ? 200 + p : 5
  4732.       distance = Math.sqrt(x_plus + y_plus + e).round
  4733.       @jump_peak = (distance * 80 / 100).truncate
  4734.       @jump_count = @jump_peak * 2
  4735.       if @pre_set != nil
  4736.          @pre_set[0] = self.x ; @pre_set[1] = self.y ; @pre_set[4] = self.mirror
  4737.       end   
  4738.       @battler.bact_sprite[3] = 2 if $imported[:mog_sprite_actor]  
  4739.       @battler.bact_action_clear if @battler.bact_data[0] == 2
  4740.       @wp_index = 0 if @battler.bact_data[0] == 1      
  4741.   end
  4742.   
  4743.   #--------------------------------------------------------------------------
  4744.   # ● Set Bact Angle M
  4745.   #--------------------------------------------------------------------------      
  4746.   def set_bact_angle_m
  4747.       @battler_dir = [self.mirror,@battler.bact_sprite[0]] if @battler.bact_data[0] == 1  
  4748.       return if @battler.bact_data[6] and [2,4].include?(@battler.bact_sprite[5])
  4749.       if @battler.bact_data[7] >= 0 ; else
  4750.          self.angle = @battler.bact_data[0] == 2 ? 350 : 5
  4751.          self.mirror = true if @battler.is_a?(Game_Enemy) and MOG_BATTLER_MOTION::BATTLER_MIRROR_DIRECTION
  4752.          @battler.bact_sprite[0] = 4 unless [2,8].include?( @battler.bact_sprite[0])
  4753.       end
  4754.   end
  4755.   
  4756.   #--------------------------------------------------------------------------
  4757.   # ● Update Jump
  4758.   #--------------------------------------------------------------------------      
  4759.   def update_jump(np)
  4760.       @jump_count -= 1 if @jump_count > 0
  4761.       self.x = (self.x * @jump_count + np[0]) / (@jump_count + 1.0)
  4762.       self.y = ((self.y * @jump_count + np[1]) / (@jump_count + 1.0)) - jump_height
  4763.   end
  4764.   
  4765.   #--------------------------------------------------------------------------
  4766.   # ● Jump Height
  4767.   #--------------------------------------------------------------------------      
  4768.   def jump_height
  4769.       return 0 if @battler.bact_data[6]
  4770.       return (@jump_peak * @jump_peak - (@jump_count - @jump_peak).abs ** 2) / 40
  4771.   end
  4772.   

  4773.   #--------------------------------------------------------------------------
  4774.   # ● Can Update Battler Motion
  4775.   #--------------------------------------------------------------------------      
  4776.   alias mog_bact_can_update_battler_motion? can_update_battler_motion?
  4777.   def can_update_battler_motion?
  4778.       return false if @battler.bact_data[0] != 0
  4779.       mog_bact_can_update_battler_motion?
  4780.   end
  4781.    
  4782.   #--------------------------------------------------------------------------
  4783.   # ● Can Update idle
  4784.   #--------------------------------------------------------------------------   
  4785.   alias mog_bact_can_update_idle? can_update_idle?
  4786.   def can_update_idle?
  4787.       return false if @battler.bact_data[1] != nil
  4788.       mog_bact_can_update_idle?
  4789.   end   

  4790. end  

  4791. #===============================================================================
  4792. # ■ Scene Battle
  4793. #===============================================================================
  4794. class Scene_Battle < Scene_Base
  4795.   
  4796.   #--------------------------------------------------------------------------
  4797.   # ● Execute Action
  4798.   #--------------------------------------------------------------------------      
  4799.   alias mog_bact_execute_action execute_action
  4800.   def execute_action
  4801.       @cp_members = []
  4802.       if @subject != nil
  4803.          @subject.bact_action_clear
  4804.          item = @subject.current_action.item rescue nil
  4805.          @subject.bact_skill = item if item != nil
  4806.          if $imported[:mog_atb_system] and execute_cooperation_skill?
  4807.             @cp_members = current_cp_members
  4808.             for battler in @cp_members
  4809.                 battler.bact_skill = item if item != nil
  4810.            end
  4811.          end         
  4812.       end
  4813.       execute_bact_move if execute_bact_move?
  4814.       if $imported[:mog_sprite_actor] and $imported[:mog_animation_plus]
  4815.          $game_temp.ani_plus_wait = false  ; execute_cast_animation
  4816.       end
  4817.       mog_bact_execute_action
  4818.   end
  4819.   
  4820.   #--------------------------------------------------------------------------
  4821.   # ● Execute Bact Move
  4822.   #--------------------------------------------------------------------------      
  4823.   def execute_bact_move?
  4824.       item = @subject.current_action.item rescue nil
  4825.       return false if item == nil
  4826.       return false if item.is_a?(RPG::Skill) and @subject.is_a?(Game_Actor) and item.id == @subject.guard_skill_id
  4827.       targets = @subject.current_action.make_targets.compact rescue nil
  4828.       @subject.pre_target = targets
  4829.       for battler in @cp_members ; battler.pre_target = targets ; end      
  4830.       scy = @subject.screen_x rescue nil ; scx = targets[0].screen_x rescue nil
  4831.       return false if scx == nil or scy == nil
  4832.       return false if $imported[:mog_battle_hud_ex] and SceneManager.face_battler?
  4833.       return false if @act_enabled != nil
  4834.       return true
  4835.   end

  4836.   #--------------------------------------------------------------------------
  4837.   # ● Long Range?
  4838.   #--------------------------------------------------------------------------      
  4839.   def long_range?(item)
  4840.       return false if item == nil
  4841.       if @subject.is_a?(Game_Actor) and item.is_a?(RPG::Skill) and
  4842.          item.id == @subject.attack_skill_id and  @subject.equips[0] != nil
  4843.       return true if @subject.equips[0].note =~ /<Icon Angle = (\d+)>/i
  4844.       end  
  4845.       return false if item.note =~ /<Move to Target>/
  4846.       return true if [2,8,10].include?(item.scope)      
  4847.       return true
  4848.   end

  4849.   #--------------------------------------------------------------------------
  4850.   # ● Set BC Skill Type
  4851.   #--------------------------------------------------------------------------   
  4852.   def set_bc_skill_type
  4853.       item = @subject.current_action.item rescue nil
  4854.       return if item == nil
  4855.       return if item.is_a?(RPG::Skill) and item.stype_id != 1
  4856.       return if item.is_a?(RPG::Item) and item.itype_id != 1
  4857.       targets = @subject.current_action.make_targets.compact
  4858.       set_battle_camera_animation(targets, item.animation_id)
  4859.   end
  4860.   #--------------------------------------------------------------------------
  4861.   # ● Execute Bact Move
  4862.   #--------------------------------------------------------------------------      
  4863.   def execute_bact_move
  4864.       return if @subject.bact_skill == nil
  4865.       @act_enabled = true
  4866.       item = @subject.bact_skill
  4867.       if $imported[:mog_sprite_actor] and @subject.is_a?(Game_Actor) and long_range?(item)
  4868.           execute_bact_move_sprite_actor
  4869.       else   
  4870.          unless @subject.is_a?(Game_Enemy) and long_range?(item)
  4871.          targets = @subject.current_action.make_targets.compact
  4872.          @subject.bact_data = [1,targets[0].screen_x,targets[0].screen_y,@subject.screen_x,@subject.screen_y,0,0,0]
  4873.          @subject.bact_data[5] = true
  4874.          @subject.bact_data[6] = false
  4875.          @subject.bact_data[7] = targets[0].screen_x - @subject.screen_x
  4876.          if @cp_members != nil
  4877.          for battler in @cp_members            
  4878.              battler.bact_data = [1,targets[0].screen_x,targets[0].screen_y,battler.screen_x,battler.screen_y,0,0,0]
  4879.              battler.bact_data[5] = true
  4880.              battler.bact_data[6] = false
  4881.              battler.bact_data[7] = targets[0].screen_x - battler.screen_x
  4882.           end         
  4883.           end
  4884.           execute_action_bact
  4885.          end
  4886.       end      
  4887.   end   
  4888.   
  4889.   #--------------------------------------------------------------------------
  4890.   # ● Execute Bact Move Sprite Actor
  4891.   #--------------------------------------------------------------------------      
  4892.   def execute_bact_move_sprite_actor
  4893.       ns = $imported[:mog_sprite_actor] ? $game_party.battlers_m_steps : 32
  4894.       if @subject.is_a?(Game_Enemy)
  4895.          targets = @subject.pre_target rescue nil
  4896.          targets = @subject.current_action.make_targets.compact if targets == nil
  4897.          if [2,8].include?($game_party.battle_members[0].bact_sprite[0])
  4898.             if targets[0].screen_y >= @subject.screen_y ; @subject.bact_sprite[0] = 2; end
  4899.             if targets[0].screen_y < @subject.screen_y ; @subject.bact_sprite[0] = 8; end
  4900.          else  
  4901.             if targets[0].screen_x >= @subject.screen_x ; @subject.bact_sprite[0] = 6; end
  4902.             if targets[0].screen_x < @subject.screen_x ; @subject.bact_sprite[0] = 4; end
  4903.          end
  4904.       end
  4905.       case @subject.bact_sprite[0]
  4906.            when 2 ; x = @subject.screen_x ; y = @subject.screen_y + ns
  4907.            when 4 ; x = @subject.screen_x - ns ; y = @subject.screen_y            
  4908.            when 6 ; x = @subject.screen_x + ns ; y = @subject.screen_y            
  4909.            when 8 ; x = @subject.screen_x ; y = @subject.screen_y - ns
  4910.       end      
  4911.       @subject.bact_data = [1,x,y,@subject.screen_x,@subject.screen_y,0,0,0,0]
  4912.       @subject.bact_data[5] = true ; @subject.bact_data[6] = true  
  4913.       for battler in @cp_members
  4914.           case battler.bact_sprite[0]
  4915.                when 2 ; x = battler.screen_x ; y = battler.screen_y + ns
  4916.                when 4 ; x = battler.screen_x - ns ; y = battler.screen_y            
  4917.                when 6 ; x = battler.screen_x + ns ; y = battler.screen_y            
  4918.                when 8 ; x = battler.screen_x ; y = battler.screen_y - ns
  4919.           end         
  4920.           battler.bact_data = [1,x,y,battler.screen_x,battler.screen_y,0,0,0,0]
  4921.           battler.bact_data[5] = true
  4922.           battler.bact_data[6] = true   
  4923.       end
  4924.       execute_action_bact  
  4925.   end
  4926.          
  4927.   #--------------------------------------------------------------------------
  4928.   # ● Process Action End
  4929.   #--------------------------------------------------------------------------      
  4930.   alias mog_bact_process_action_end process_action_end
  4931.   def process_action_end
  4932.       process_wait_end
  4933.       process_bact_end if @subject.bact_data[1] != nil
  4934.       @subject.bact_action_clear
  4935.       @subject.pre_target = nil
  4936.       if @cp_members != nil
  4937.       for battler in @cp_members
  4938.           battler.bact_action_clear
  4939.           battler.pre_target = nil
  4940.       end
  4941.       end
  4942.       mog_bact_process_action_end
  4943.       @act_enabled = nil
  4944.   end
  4945.   
  4946.   #--------------------------------------------------------------------------
  4947.   # ● Turn End
  4948.   #--------------------------------------------------------------------------
  4949.   alias mog_bact_turn_end turn_end
  4950.   def turn_end
  4951.       @subject.return_to_orign if @subject.is_a?(Game_Actor) and $imported[:mog_sprite_actor]
  4952.       if @cp_members != nil
  4953.       for battler in @cp_members
  4954.           battler.return_to_orign if $imported[:mog_sprite_actor]
  4955.       end
  4956.       end      
  4957.       mog_bact_turn_end
  4958.   end
  4959.   
  4960.   #--------------------------------------------------------------------------
  4961.   # ● Process Wait End
  4962.   #--------------------------------------------------------------------------      
  4963.   def process_wait_end
  4964.       return if $game_temp.bact_wait_d == 0
  4965.       loop do ; update_basic ; $game_temp.bact_wait_d -= 1
  4966.       break if $game_temp.bact_wait_d == 0 ; end   
  4967.   end
  4968.   
  4969.   #--------------------------------------------------------------------------
  4970.   # ● Process Bact End
  4971.   #--------------------------------------------------------------------------      
  4972.   def process_bact_end      
  4973.       @subject.bact_data[0] = 2
  4974.       @subject.bact_data[1] = @subject.bact_data[3]
  4975.       @subject.bact_data[2] = @subject.bact_data[4]
  4976.       @subject.bact_data[5] = true
  4977.       if @cp_members != nil
  4978.       for battler in @cp_members
  4979.           battler.bact_data[0] = 2
  4980.           battler.bact_data[1] = battler.bact_data[3]
  4981.           battler.bact_data[2] = battler.bact_data[4]
  4982.           battler.bact_data[5] = true
  4983.           battler.bact_sprite_need_refresh = true
  4984.       end      
  4985.       end
  4986.       execute_action_bact unless @subject.is_a?(Game_Actor) and $game_party.all_dead?
  4987.       @subject.bact_clear
  4988.       if @cp_members != nil
  4989.       for battler in @cp_members ; battler.bact_clear ; end
  4990.       end
  4991.   end     
  4992.       
  4993.   #--------------------------------------------------------------------------
  4994.   # ● Execute Action Bact
  4995.   #--------------------------------------------------------------------------      
  4996.   def execute_action_bact
  4997.       return if @subject == nil      
  4998.       loop do ; update_basic ; break if @subject.bact_data[0] == 0 ; end
  4999.   end
  5000.   
  5001.   #--------------------------------------------------------------------------
  5002.   # ● Execute Cooperation Skill?
  5003.   #--------------------------------------------------------------------------  
  5004.   def execute_cooperation_skill?
  5005.       return false if [email protected]_a?(Game_Actor)
  5006.       item = @subject.bact_skill rescue nil
  5007.       return false if item == nil
  5008.       return false if !BattleManager.cskill_usable?(item.id,@subject.id)
  5009.       return true
  5010.   end  

  5011.   #--------------------------------------------------------------------------
  5012.   # ● Use Item
  5013.   #--------------------------------------------------------------------------  
  5014.   alias mog_bact2_use_item use_item
  5015.   def use_item
  5016.       target = @subject.pre_target[0] rescue nil
  5017.       if target != nil and target.dead?
  5018.           return unless target.is_a?(Game_Actor) and @subject.is_a?(Game_Actor)
  5019.       end
  5020.       mog_bact2_use_item
  5021.       if $imported[:mog_sprite_actor] and @subject != nil and @subject.is_a?(Game_Actor)
  5022.          $game_temp.bact_wait_d = 20
  5023.       end
  5024.   end  
  5025.   
  5026. end

  5027. #===============================================================================
  5028. # ■ Game Action
  5029. #===============================================================================
  5030. class Game_Action

  5031.   #--------------------------------------------------------------------------
  5032.   # ● Clear
  5033.   #--------------------------------------------------------------------------
  5034.   alias mog_bact_clear clear
  5035.   def clear
  5036.       @subject.pre_target = nil rescue nil
  5037.       mog_bact_clear
  5038.   end  
  5039.    
  5040.   #--------------------------------------------------------------------------
  5041.   # ● Make Targets
  5042.   #--------------------------------------------------------------------------
  5043.   alias mog_bact_make_targets make_targets
  5044.   def make_targets
  5045.       return @subject.pre_target if @subject != nil and @subject.pre_target != nil
  5046.       mog_bact_make_targets
  5047.   end

  5048. end
复制代码
)
      cw = bitmap.width / 3
      ch = bitmap.height / 4
    else
      cw = bitmap.width / 12
      ch = bitmap.height / 8
    end
    n = character_index
    src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
    character = Bitmap.new(cw, ch)
    color = LNX11::DEFAULT_BG_COLOR
    character.gradient_fill_rect(character.rect, color[0], color[1], true)
    character.blt(0, 0, bitmap, src_rect)
    character
  end
  #--------------------------------------------------------------------------
  # ● [追加]:デフォルトバトラーグラフィック設定
  #--------------------------------------------------------------------------
  def default_battler_graphic
    case LNX11::DEFAULT_BATTLER_GRAPHIC
    when 0 # 顔グラフィック
      self.facebattler = draw_face(@face_name, @face_index)
    when 1 # 歩行グラフィック
      self.facebattler = draw_character(@character_name, @character_index)
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトラーグラフィックの更新
  #  Sprite_Batter が利用するオブジェクトを更新します。
  #--------------------------------------------------------------------------
  def update_battler_graphic
    @battler_hue = 0
    if !battler_graphic_name.empty?
      # スクリプトで指定されている
      @battler_name = @battler_graphic_name
      dispose_facebattler
    elsif !actor.default_battler_graphic.empty?
      # メモで指定されている
      @battler_name = actor.default_battler_graphic
      dispose_facebattler
    else
      # 何も指定されていない
      @battler_name = ""
      default_battler_graphic
    end
    # 更新したので更新フラグを取り消す
    @refresh_battler_graphic = false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトラー用顔グラフィックの解放
  #--------------------------------------------------------------------------
  def dispose_facebattler
    return if self.facebattler == nil
    self.facebattler.dispose
    self.facebattler = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:レベルアップメッセージの表示
  #   レベルアップのポップアップを追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_display_level_up :display_level_up
  def display_level_up(new_skills)
    popup_data.popup_levelup(self) if $game_party.in_battle
    lnx11a_display_level_up(new_skills)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  敵キャラを扱うクラスです。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● [追加]:バトルメンバー判定
  #--------------------------------------------------------------------------
  def battle_member?
    true
  end
  #--------------------------------------------------------------------------
  # ● [追加]:通常攻撃 アニメーション ID の取得
  #--------------------------------------------------------------------------
  def atk_animation
    # メモを参照
    enemy.atk_animation
  end
end

#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
#  パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :actor_invisible     # アクター非表示
  attr_accessor :status_invisible    # バトルステータス非表示
  attr_accessor :actor_bg_invisible  # アクター背景非表示
  attr_accessor :last_party_command  # 最後に選択したパーティコマンド
  attr_accessor :members_screen_x          # バトルメンバー分のX座標配列
  attr_accessor :members_screen_x_nooffset # X:オフセットなし
  attr_accessor :members_screen_y          # バトルメンバー分のY座標配列
  attr_accessor :members_screen_z          # バトルメンバー分のZ座標配列
  #--------------------------------------------------------------------------
  # ● [追加]:バトルメンバーの座標設定
  #--------------------------------------------------------------------------
  def set_members_xyz
    return if members.size == 0
    # 座標をまとめて設定
    set_screen_x
    set_screen_y
    set_screen_z
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトルメンバーの座標設定
  #--------------------------------------------------------------------------
  def set_members_battle_graphic
    $game_party.battle_members.each {|actor| actor.update_battler_graphic}
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 X 座標の設定
  #  ここで設定した座標は Game_Actor や ステータス表示等で利用されます。
  #--------------------------------------------------------------------------
  def set_screen_x
    @members_screen_x = []
    @members_screen_x_nooffset = []
    padding = LNX11::ACTOR_PADDING[:side]
    if LNX11::ACTOR_CENTERING
      # アクターのセンタリングが有効
      a_spacing = LNX11::ACTOR_SPACING_ADJUST
      padding += (max_battle_members - battle_members.size) * a_spacing
      width = (Graphics.width - padding * 2) / battle_members.size
    else
      # アクターのセンタリングが無効
      width = (Graphics.width - padding * 2) / max_battle_members
    end
    battle_members.each_with_index do |actor, i|
      offset = LNX11::ACTOR_OFFSET[:x]
      @members_screen_x_nooffset = width * i + width / 2 + padding
      @members_screen_x = @members_screen_x_nooffset + offset
      actor.screen_x = @members_screen_x
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Y 座標の設定
  #  ここで設定した座標は Game_Actor や ステータス表示等で利用されます。
  #--------------------------------------------------------------------------
  def set_screen_y
    offset = LNX11::ACTOR_OFFSET[:y]
    ay = Graphics.height - LNX11::ACTOR_PADDING[:bottom] + offset
    @members_screen_y = Array.new(max_battle_members) {ay}
    battle_members.each {|actor| actor.screen_y = ay}
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Z 座標の設定
  #--------------------------------------------------------------------------
  def set_screen_z
    # 便宜上、XYと同じように配列を作成しておく
    az = LNX11::ACTOR_SCREEN_TONE ? 150 : -10
    @members_screen_z = Array.new(max_battle_members) {az}
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:戦闘開始処理
  #--------------------------------------------------------------------------
  def on_battle_start
    super
    # バトルステータスの更新
    $game_temp.battle_status_refresh
  end
end

#==============================================================================
# ■ Game_Troop
#------------------------------------------------------------------------------
#  敵グループおよび戦闘に関するデータを扱うクラスです。
#==============================================================================

class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● [エイリアス]:セットアップ
  #  敵グループの座標修正処理を追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_setup :setup
  def setup(*args)
    # 元のメソッドを呼ぶ
    lnx11a_setup(*args)
    # 敵グループの座標修正
    @enemies.each do |enemy|
      # X:解像度がデフォルトでない場合に位置を補正する
      if LNX11::TROOP_X_SCREEN_FIX
        enemy.screen_x *= Graphics.width.to_f / 544
        enemy.screen_x.truncate
      end
      enemy.screen_y += LNX11::TROOP_Y_OFFSET
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:敵キャラ名の配列取得
  #--------------------------------------------------------------------------
  alias :lnx11a_enemy_names :enemy_names
  def enemy_names
    LNX11::MESSAGE_WINDOW_ENEMY_NAMES ? lnx11a_enemy_names : []
  end
end

#==============================================================================
# ■ Game_Message
#------------------------------------------------------------------------------
#  文章や選択肢などを表示するメッセージウィンドウの状態を扱うクラスです。
#==============================================================================

class Game_Message
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :helpdisplay_texts        # 簡易ヘルプ配列
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ配列の取得
  #--------------------------------------------------------------------------
  def helpdisplay_texts
    return @helpdisplay_texts if @helpdisplay_texts
    @helpdisplay_texts = []
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:クリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear :clear
  def clear
    # 元のメソッドを呼ぶ
    lnx11a_clear
    @helpdisplay_texts = []
    @add_disabled = false
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:テキストの追加
  #--------------------------------------------------------------------------
  alias :lnx11a_add :add
  def add(text)
    # テキストの追加が禁止されてる場合、簡易ヘルプ表示用の配列に追加する
    if @add_disabled
      @helpdisplay_texts = [] unless @helpdisplay_texts
      @helpdisplay_texts.push(text)
    else
      # 元のメソッドを呼ぶ
      lnx11a_add(text)
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:テキスト追加の禁止
  #--------------------------------------------------------------------------
  def add_disabled
    return if LNX11::MESSAGE_TYPE == 0
    @add_disabled = true
  end
  #--------------------------------------------------------------------------
  # ● [追加]:テキスト追加の禁止
  #--------------------------------------------------------------------------
  def add_enabled
    return if LNX11::MESSAGE_TYPE == 0
    @add_disabled = false
  end
end

#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
#  バトラー表示用のスプライトです。
#==============================================================================

class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルのバトラーの取得
  #--------------------------------------------------------------------------
  def cursor_battler
    $game_temp.target_cursor_sprite.battler
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルの点滅状態に対応したシンボルを返す
  #--------------------------------------------------------------------------
  def cursor_effect
    $game_temp.target_cursor_sprite.blink ? :target_whiten : :command_whiten
  end
  #--------------------------------------------------------------------------
  # ● [追加]:対象選択フラッシュの設定
  #--------------------------------------------------------------------------
  def setup_cursor_effect
    if cursor_battler == @battler ||
       (cursor_battler == :party && @battler.actor?) ||
       ([:troop, :troop_random].include?(cursor_battler) && [email protected]?)
      if @effect_type == nil || @effect_type != cursor_effect
        start_effect(cursor_effect)
      end
    else
      # フラッシュエフェクト終了
      end_cursor_effect
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:対象選択フラッシュの終了
  #--------------------------------------------------------------------------
  def end_cursor_effect
    if [:target_whiten, :command_whiten].include?(@effect_type)
      @effect_type = nil
      @effect_duration = 0
      revert_to_normal
    end
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:アニメーションスプライトの設定
  #--------------------------------------------------------------------------
  def animation_set_sprites(frame)
    o = self.opacity
    self.opacity = 255 if !@battler_visible || @effect_duration > 0
    # スーパークラスのメソッドを呼ぶ
    super(frame)
    self.opacity = o
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:アニメーションの原点設定
  #--------------------------------------------------------------------------
  def set_animation_origin
    # スーパークラスのメソッドを呼ぶ
    super
    # 画面アニメーションがアクターに再生されたら
    if @animation.position == 3 && @battler != nil && @battler.actor?
      # アニメーションのY座標を修正
      @ani_oy += LNX11::SCREEN_ANIMATION_OFFSET
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:転送元ビットマップの更新
  #--------------------------------------------------------------------------
  alias :lnx11a_update_bitmap :update_bitmap
  def update_bitmap
    if @battler.actor? && @battler.refresh_battler_graphic
      # バトラーグラフィックが変更されていれば更新する
      @battler.update_battler_graphic
    end
    if @battler.actor? && @battler.facebattler != nil
      # バトラー用顔グラフィックが作成されていれば、
      # それを Sprite の Bitmap とする
      new_bitmap = @battler.facebattler
      if bitmap != new_bitmap
        self.bitmap = new_bitmap
        init_visibility
      end
    else
      # 元のメソッドを呼ぶ
      lnx11a_update_bitmap
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:新しいアニメーションの設定
  #--------------------------------------------------------------------------
  alias :lnx11a_setup_new_animation :setup_new_animation
  def setup_new_animation
    lnx11a_setup_new_animation
    # ループアニメーションの設定
    if @battler.loop_animation_id > 0 && (@loop_animation == nil ||
       @battler.loop_animation_id != @loop_animation.id)
      animation = $data_animations[@battler.loop_animation_id]
      mirror = @battler.loop_animation_mirror
      start_loop_animation(animation, mirror)
    elsif @battler.loop_animation_id == 0 && @loop_animation
      end_loop_animation
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:新しいエフェクトの設定
  #--------------------------------------------------------------------------
  alias :lnx11a_setup_new_effect :setup_new_effect
  def setup_new_effect
    # 元のメソッドを呼ぶ
    lnx11a_setup_new_effect
    # フラッシュエフェクト設定
    if @battler_visible && cursor_battler
      setup_cursor_effect
    else
      # フラッシュエフェクト終了
      end_cursor_effect
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:エフェクトの開始
  #--------------------------------------------------------------------------
  alias :lnx11a_start_effect :start_effect
  def start_effect(effect_type)
    # エフェクト開始の追加
    @effect_type = effect_type
    case @effect_type
    when :target_whiten
      @effect_duration = 40
      @battler_visible = true
    when :command_whiten
      @effect_duration = 80
      @battler_visible = true
    end
    # 元のメソッドを呼ぶ
    lnx11a_start_effect(effect_type)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:エフェクトの更新
  #--------------------------------------------------------------------------
  alias :lnx11a_update_effect :update_effect
  def update_effect
    # エフェクト更新の追加
    if @effect_duration > 0
      @effect_duration -= 1
      case @effect_type
      when :target_whiten
        update_target_whiten
      when :command_whiten
        update_command_whiten
      end
      @effect_duration += 1
    end
    # 元のメソッドを呼ぶ
    lnx11a_update_effect
  end
  #--------------------------------------------------------------------------
  # ● [追加]:対象選択フラッシュエフェクトの更新
  #--------------------------------------------------------------------------
  def update_target_whiten
    alpha = @effect_duration < 20 ? @effect_duration : 40 - @effect_duration
    self.color.set(255, 255, 255, 0)
    self.color.alpha = (alpha + 1) * 2
  end
  #--------------------------------------------------------------------------
  # ● [追加]:コマンド選択フラッシュエフェクトの更新
  #--------------------------------------------------------------------------
  def update_command_whiten
    alpha = @effect_duration < 40 ? @effect_duration : 80 - @effect_duration
    self.color.set(255, 255, 255, 0)
    self.color.alpha = alpha * 2
  end
  #--------------------------------------------------------------------------
  # ● [追加]:高さの取得
  #--------------------------------------------------------------------------
  def bitmap_height
    self.bitmap.height
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:位置の更新
  #--------------------------------------------------------------------------
  alias :lnx11a_update_position :update_position
  def update_position
    # 元のメソッドを呼ぶ
    lnx11a_update_position
    # 高さを更新
    @battler.bitmap_height = bitmap_height
    # 可視状態を更新
    self.visible = !$game_party.actor_invisible if @battler.actor?
  end
  if LNX11::ENHANCED_WHITEN
    # 白フラッシュを強めにする
    #------------------------------------------------------------------------
    # ● [再定義]:白フラッシュエフェクトの更新
    #------------------------------------------------------------------------
    def update_whiten
      self.color.set(255, 255, 255, 0)
      self.color.alpha = 192 - (16 - @effect_duration) * 12
    end
  end
  #--------------------------------------------------------------------------
  # ● ループアニメーションの追加
  #--------------------------------------------------------------------------
  #--------------------------------------------------------------------------
  # ● [追加]:クラス変数
  #--------------------------------------------------------------------------
  @@loop_ani_checker = []
  @@loop_ani_spr_checker = []
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize(viewport, battler = nil)
    # 元のメソッドを呼ぶ
    lnx11a_initialize(viewport, battler)
    # ループアニメの残り時間
    @loop_ani_duration = 0
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:解放
  #--------------------------------------------------------------------------
  alias :lnx11a_dispose :dispose
  def dispose
    # 元のメソッドを呼ぶ
    lnx11a_dispose
    # ループアニメを解放
    dispose_loop_animation
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:フレーム更新
  #--------------------------------------------------------------------------
  alias :lnx11a_update :update
  def update
    # 元のメソッドを呼ぶ
    lnx11a_update
    update_loop_animation
    @@loop_ani_checker.clear
    @@loop_ani_spr_checker.clear
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーション表示中判定
  #--------------------------------------------------------------------------
  def loop_animation?
    @loop_animation != nil
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの開始
  #--------------------------------------------------------------------------
  def start_loop_animation(animation, mirror = false)
    dispose_loop_animation
    @loop_animation = animation
    if @loop_animation
      @loop_ani_mirror = mirror
      set_loop_animation_rate
      @loop_ani_duration = @loop_animation.frame_max * @loop_ani_rate + 1
      load_loop_animation_bitmap
      make_loop_animation_sprites
      set_loop_animation_origin
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの速度を設定
  #--------------------------------------------------------------------------
  def set_loop_animation_rate
    if $lnx_include[:lnx09]
      # LNX09 を導入している
      default = LNX09::DEFAULT_BATTLE_SPEED_RATE
      if @loop_animation.speed_rate
        @loop_ani_rate = @loop_animation.speed_rate
      else
        @loop_ani_rate = default
      end
    else
      @loop_ani_rate = 4
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーション グラフィックの読み込み
  #--------------------------------------------------------------------------
  def load_loop_animation_bitmap
    animation1_name = @loop_animation.animation1_name
    animation1_hue = @loop_animation.animation1_hue
    animation2_name = @loop_animation.animation2_name
    animation2_hue = @loop_animation.animation2_hue
    @loop_ani_bitmap1 = Cache.animation(animation1_name, animation1_hue)
    @loop_ani_bitmap2 = Cache.animation(animation2_name, animation2_hue)
    if @@_reference_count.include?(@loop_ani_bitmap1)
      @@_reference_count[@loop_ani_bitmap1] += 1
    else
      @@_reference_count[@loop_ani_bitmap1] = 1
    end
    if @@_reference_count.include?(@loop_ani_bitmap2)
      @@_reference_count[@loop_ani_bitmap2] += 1
    else
      @@_reference_count[@loop_ani_bitmap2] = 1
    end
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションスプライトの作成
  #--------------------------------------------------------------------------
  def make_loop_animation_sprites
    @loop_ani_sprites = []
    if @use_sprite && !@@loop_ani_spr_checker.include?(@loop_animation)
      16.times do
        sprite = ::Sprite.new(viewport)
        sprite.visible = false
        @loop_ani_sprites.push(sprite)
      end
      if @loop_animation.position == 3
        @@loop_ani_spr_checker.push(@loop_animation)
      end
    end
    @loop_ani_duplicated = @@loop_ani_checker.include?(@loop_animation)
    if !@loop_ani_duplicated && @loop_animation.position == 3
      @@loop_ani_checker.push(@loop_animation)
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの原点設定
  #--------------------------------------------------------------------------
  def set_loop_animation_origin
    if @loop_animation.position == 3
      if viewport == nil
        @loop_ani_ox = Graphics.width / 2
        @loop_ani_oy = Graphics.height / 2
      else
        @loop_ani_ox = viewport.rect.width / 2
        @loop_ani_oy = viewport.rect.height / 2
      end
    else
      @loop_ani_ox = x - ox + width / 2
      @loop_ani_oy = y - oy + height / 2
      if @loop_animation.position == 0
        @loop_ani_oy -= height / 2
      elsif @loop_animation.position == 2
        @loop_ani_oy += height / 2
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの解放
  #--------------------------------------------------------------------------
  def dispose_loop_animation
    if @loop_ani_bitmap1
      @@_reference_count[@loop_ani_bitmap1] -= 1
      if @@_reference_count[@loop_ani_bitmap1] == 0
        @loop_ani_bitmap1.dispose
      end
    end
    if @loop_ani_bitmap2
      @@_reference_count[@loop_ani_bitmap2] -= 1
      if @@_reference_count[@loop_ani_bitmap2] == 0
        @loop_ani_bitmap2.dispose
      end
    end
    if @loop_ani_sprites
      @loop_ani_sprites.each {|sprite| sprite.dispose }
      @loop_ani_sprites = nil
      @loop_animation = nil
    end
    @loop_ani_bitmap1 = nil
    @loop_ani_bitmap2 = nil
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの更新
  #--------------------------------------------------------------------------
  def update_loop_animation
    return unless loop_animation?
    @loop_ani_duration -= 1
    if @loop_ani_duration % @loop_ani_rate == 0
      if @loop_ani_duration > 0
        frame_index = @loop_animation.frame_max
        speed = (@loop_ani_duration + @loop_ani_rate - 1) / @loop_ani_rate
        frame_index -= speed
        loop_animation_set_sprites(@loop_animation.frames[frame_index])
        @loop_animation.timings.each do |timing|
          loop_animation_process_timing(timing) if timing.frame == frame_index
        end
      else
        # 残り時間を再設定してループ
        @loop_ani_duration = @loop_animation.frame_max * @loop_ani_rate + 1
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションの終了
  #--------------------------------------------------------------------------
  def end_loop_animation
    dispose_loop_animation
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ループアニメーションスプライトの設定
  #     frame : フレームデータ(RPG::Animation::Frame)
  #--------------------------------------------------------------------------
  def loop_animation_set_sprites(frame)
    cell_data = frame.cell_data
    @loop_ani_sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      sprite.bitmap = pattern < 100 ? @loop_ani_bitmap1 : @loop_ani_bitmap2
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * 192,
        pattern % 100 / 5 * 192, 192, 192)
      if @loop_ani_mirror
        sprite.x = @loop_ani_ox - cell_data[i, 1]
        sprite.y = @loop_ani_oy + cell_data[i, 2]
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = @loop_ani_ox + cell_data[i, 1]
        sprite.y = @loop_ani_oy + cell_data[i, 2]
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + 316 + i
      sprite.ox = 96
      sprite.oy = 96
      sprite.zoom_x = cell_data[i, 3] / 100.0
      sprite.zoom_y = cell_data[i, 3] / 100.0
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:SE とフラッシュのタイミング処理
  #     timing : タイミングデータ(RPG::Animation::Timing)
  #--------------------------------------------------------------------------
  def loop_animation_process_timing(timing)
    timing.se.play unless @loop_ani_duplicated
    case timing.flash_scope
    when 1
      self.flash(timing.flash_color, timing.flash_duration * @loop_ani_rate)
    when 2
      if viewport && !@loop_ani_duplicated
        duration = timing.flash_duration * @loop_ani_rate
        viewport.flash(timing.flash_color, duration)
      end
    when 3
      self.flash(nil, timing.flash_duration * @loop_ani_rate)
    end
  end
end

#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  バトル画面のスプライトをまとめたクラスです。
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    # 元のメソッドを呼ぶ
    lnx11a_initialize
    # アクターエリアの背景の作成
    create_actor_background
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:解放
  #--------------------------------------------------------------------------
  alias :lnx11a_dispose :dispose
  def dispose
    # 元のメソッドを呼ぶ
    lnx11a_dispose
    # アクターエリアの背景の解放
    dispose_actor_background
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:フレーム更新
  #--------------------------------------------------------------------------
  alias :lnx11a_update :update
  def update
    # 元のメソッドを呼ぶ
    lnx11a_update
    # アクターエリアの背景の更新
    update_actor_background
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターのビューポート
  #--------------------------------------------------------------------------
  def actor_viewport
    LNX11::ACTOR_SCREEN_TONE ? @viewport1 : @viewport2
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターエリアの背景の作成
  #--------------------------------------------------------------------------
  def create_actor_background
    return if LNX11::ACTOR_BACKGROUND == 0
    viewport = actor_viewport
    height = LNX11::ACTOR_BACKGROUND_HEIGHT
    case LNX11::ACTOR_BACKGROUND
    when 1
      # グラデーション
      @actor_background = Sprite.new
      back = Bitmap.new(Graphics.width, height)
      color = LNX11::ACTOR_BG_GRADIENT_COLOR
      back.gradient_fill_rect(back.rect, color[0], color[1], true)
      @actor_background.bitmap = back
    when 2
      # ウィンドウ
      @actor_background = Window_Base.new(0, 0, Graphics.width, height)
    else
      if LNX11::ACTOR_BACKGROUND.is_a?(String)
        # ファイル指定
        @actor_background = Sprite.new
        @actor_background.bitmap = Cache.system(LNX11::ACTOR_BACKGROUND)
        @actor_background.x = Graphics.width / 2
        @actor_background.ox = @actor_background.bitmap.width / 2
        height = @actor_background.bitmap.height
      end
    end
    @actor_background.viewport = viewport
    @actor_background.y = Graphics.height - height
    @actor_background.z = viewport == @viewport1 ? 120 : -20
    update_actor_background
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターエリアの背景の解放
  #--------------------------------------------------------------------------
  def dispose_actor_background
    return unless @actor_background
    @actor_background.bitmap.dispose if @actor_background.is_a?(Sprite)
    @actor_background.dispose
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターエリアの背景の更新
  #--------------------------------------------------------------------------
  def update_actor_background
    return unless @actor_background
    @actor_background.visible = !$game_party.actor_bg_invisible
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:アクタースプライトの作成
  #--------------------------------------------------------------------------
  def create_actors
    # 座標とグラフィックの設定
    $game_party.set_members_xyz
    $game_party.set_members_battle_graphic
    # スプライトの作成
    viewport = actor_viewport
    @actor_sprites = $game_party.battle_members.collect do |actor|
      Sprite_Battler.new(viewport, actor)
    end
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:アクタースプライトの更新
  #--------------------------------------------------------------------------
  def update_actors
    @actor_sprites.each {|sprite| sprite.update }
  end
end

#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプのメソッド設定
  #--------------------------------------------------------------------------
  def set_helpdisplay_methods
    BattleManager.update_for_wait_method = method(:update_for_wait)
    BattleManager.helpdisplay_set_method = method(:helpdisplay_set)
    BattleManager.helpdisplay_clear_method = method(:helpdisplay_clear)
    BattleManager.helpdisplay_wait_short_method=method(:helpdisplay_wait_short)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ表示
  #--------------------------------------------------------------------------
  def helpdisplay_set(item, duration = nil)
    @wait_short_disabled = false
    @targethelp_window.show.set_item(item)
    @targethelp_window.update
    wait(duration ? duration : 20)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ消去
  #--------------------------------------------------------------------------
  def helpdisplay_clear(duration = nil)
    return if !@targethelp_window.visible
    @wait_short_disabled = false
    @targethelp_window.clear
    @targethelp_window.hide
    wait(duration ? duration : 10)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ・短時間ウェイト
  #--------------------------------------------------------------------------
  def helpdisplay_wait_short
    return if !@targethelp_window.visible || @wait_short_disabled
    @wait_short_disabled = true # 連続で短時間ウェイトが実行されないように
    @targethelp_window.clear
    abs_wait_short
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトラーのエフェクト実行中?
  #--------------------------------------------------------------------------
  def battler_effect?
    @spriteset.effect?
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:コマンド[逃げる]
  #--------------------------------------------------------------------------
  alias :lnx11a_command_escape :command_escape
  def command_escape
    @party_command_window.close
    @party_command_window.openness = 0 if LNX11::MESSAGE_TYPE == 2
    @status_window.unselect
    # 元のメソッドを呼ぶ
    lnx11a_command_escape
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテムの使用
  #--------------------------------------------------------------------------
  alias :lnx11a_use_item :use_item
  def use_item
    # 簡易ヘルプ表示
    item = @subject.current_action.item
    if LNX11::BATTLELOG_TYPE == 2 && !item.no_display
      helpdisplay_set(item, item.display_wait)
    end
    # 元のメソッドを呼ぶ
    lnx11a_use_item
    # 簡易ヘルプ消去・エフェクトが終わるまで待つ
    if LNX11::BATTLELOG_TYPE == 2
      wait(item.end_wait)
      helpdisplay_clear
    end
    wait_for_effect
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:開始処理
  #--------------------------------------------------------------------------
  alias :lnx11a_start :start
  def start
    set_helpdisplay_methods
    @last_party_members = party_members
    $game_temp.method_battle_status_refresh = method(:refresh_status)
    $game_temp.clear_last_target_cursor
    $game_party.all_members.each {|actor| actor.last_actor_command = 0 }
    reset_sprite_effects
    standby_message_window_position
    create_targetcursor
    create_popup
    #元のメソッドを呼ぶ
    lnx11a_start
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:終了処理
  #--------------------------------------------------------------------------
  alias :lnx11a_terminate :terminate
  def terminate
    $game_message.clear
    dispose_targetcursor
    dispose_popup
    # 元のメソッドを呼ぶ
    lnx11a_terminate
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターのスプライト情報の初期化
  #--------------------------------------------------------------------------
  def reset_sprite_effects
    $game_party.battle_members.each do |actor|
      actor.popup_delay_clear
      actor.set_state_animation
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:全ウィンドウの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_all_windows :create_all_windows
  def create_all_windows
    # 元のメソッドを呼ぶ
    lnx11a_create_all_windows
    create_targethelp_window
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステータスウィンドウの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_status_window :create_status_window
  def create_status_window
    # 元のメソッドを呼ぶ
    lnx11a_create_status_window
    @status_window.set_xy
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:情報表示ビューポートの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_info_viewport :create_info_viewport
  def create_info_viewport
    # 元のメソッドを呼ぶ
    lnx11a_create_info_viewport
    # ビューポートを修正
    @info_viewport.rect.y = Graphics.height - LNX11::ACTOR_BACKGROUND_HEIGHT
    @info_viewport.rect.height = LNX11::ACTOR_BACKGROUND_HEIGHT
    @status_window.viewport = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:パーティコマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_party_command_window :create_party_command_window
  def create_party_command_window
    # 元のメソッドを呼ぶ
    lnx11a_create_party_command_window
    @party_command_window.viewport = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:アクターコマンドウィンドウの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_actor_command_window :create_actor_command_window
  def create_actor_command_window
    # 元のメソッドを呼ぶ
    lnx11a_create_actor_command_window
    @actor_command_window.viewport = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ログウィンドウの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_log_window :create_log_window
  def create_log_window
    # 元のメソッドを呼ぶ
    lnx11a_create_log_window
    # ウェイトメソッド
    @log_window.method_wait_for_animation = method(:wait_for_animation)
  end  
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルの作成
  #--------------------------------------------------------------------------
  def create_targetcursor
    @targetcursor = Sprite_TargetCursor.new
    $game_temp.target_cursor_sprite = @targetcursor
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルの解放
  #--------------------------------------------------------------------------
  def dispose_targetcursor
    @targetcursor.dispose
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットヘルプウィンドウの作成
  #--------------------------------------------------------------------------
  def create_targethelp_window
    @targethelp_window = Window_TargetHelp.new
    @targethelp_window.visible = false
    # ターゲット選択ウィンドウに関連付ける
    @actor_window.help_window = @targethelp_window
    @enemy_window.help_window = @targethelp_window
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップの作成
  #--------------------------------------------------------------------------
  def create_popup
    $game_temp.popup_data = Popup_Data.new
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップの解放
  #--------------------------------------------------------------------------
  def dispose_popup
    $game_temp.popup_data.dispose
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップデータの取得
  #--------------------------------------------------------------------------
  def popup_data
    $game_temp.popup_data
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:フレーム更新(基本)
  #--------------------------------------------------------------------------
  alias :lnx11a_update_basic :update_basic
  def update_basic
    # 元のメソッドを呼ぶ
    lnx11a_update_basic
    # 追加したオブジェクトの更新
    update_targetcursor
    update_popup
    refresh_actors
  end
  #--------------------------------------------------------------------------
  # ● [追加]:パーティメンバーの ID 配列の取得
  #--------------------------------------------------------------------------
  def party_members
    $game_party.battle_members.collect {|actor| actor.id }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メンバーが入れ替わったらオブジェクトを再作成する
  #--------------------------------------------------------------------------
  def refresh_actors
    a_party_members = party_members
    return if @last_party_members == a_party_members
    @last_party_members = a_party_members
    $game_party.battle_members.each {|actor| actor.sprite_effect_type=:appear }
    reset_sprite_effects
    @spriteset.dispose_actors
    @spriteset.create_actors
    status_clear
    refresh_status
    Graphics.frame_reset
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステータスウィンドウの情報を更新(メンバー交代用)
  #--------------------------------------------------------------------------
  def status_clear
    @status_window.all_clear
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージウィンドウの位置の初期化
  #  毎フレーム呼び出すことで、イベントコマンド以外のメッセージの位置を
  # 固定します。
  #--------------------------------------------------------------------------
  def standby_message_window_position
    $game_message.background = LNX11::MESSAGE_WINDOW_BACKGROUND
    $game_message.position = LNX11::MESSAGE_WINDOW_POSITION
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:メッセージウィンドウを開く処理の更新
  #    ステータスウィンドウなどが閉じ終わるまでオープン度を 0 にする。
  #--------------------------------------------------------------------------
  def update_message_open
    if $game_message.busy?
      @party_command_window.close
      @actor_command_window.close
      $game_temp.battlelog_clear = true
    else
      standby_message_window_position
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソル更新
  #--------------------------------------------------------------------------
  def update_targetcursor
    # 選択中のバトラーの座標を設定する
    if @actor_window.active
      # アクター選択ウィンドウがアクティブ
      @targetcursor.set(@actor_window.targetcursor, true)
    elsif @enemy_window.active
      # 敵キャラ選択ウィンドウがアクティブ
      @targetcursor.set(@enemy_window.targetcursor, true)
    elsif @status_window.index >= 0
      # ステータスウィンドウがアクティブ
      @targetcursor.set(@status_window.actor)
    else
      # どれもアクティブでない場合は非表示
      @targetcursor.hide
    end
    @targetcursor.update
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップ更新
  #--------------------------------------------------------------------------
  def update_popup
    # ポップアップスプライトの更新
    popup_data.update
  end  
  #--------------------------------------------------------------------------
  # ● [エイリアス]:パーティコマンド選択の開始
  #--------------------------------------------------------------------------
  alias :lnx11a_start_party_command_selection :start_party_command_selection
  def start_party_command_selection
    # 元のメソッドを呼ぶ
    lnx11a_start_party_command_selection
    # バトルログ削除
    @log_window.lines_clear
    $game_temp.battlelog_clear = LNX11::STORAGE_TURNEND_CLEAR
    @actor_command = false
    # 2ターン目以降のパーテイコマンドスキップ
    return unless @party_command_skip
    @party_command_skip = false
    command_fight if !scene_changing? && @party_command_window.active
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:アクターコマンド選択の開始
  #--------------------------------------------------------------------------
  alias :lnx11a_start_actor_command_selection :start_actor_command_selection
  def start_actor_command_selection
    # 元のメソッドを呼ぶ
    lnx11a_start_actor_command_selection
    @actor_command = true
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ターン終了
  #--------------------------------------------------------------------------
  alias :lnx11a_turn_end :turn_end
  def turn_end
    @party_command_skip = (LNX11::PARTY_COMMAND_SKIP && @actor_command)
    @actor_command = false
    # 元のメソッドを呼ぶ
    lnx11a_turn_end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターの選択したアイテム・スキルを返す
  #--------------------------------------------------------------------------
  def actor_selection_item
    case @actor_command_window.current_symbol
    when :attack ; $data_skills[BattleManager.actor.attack_skill_id]
    when :skill  ; @skill
    when :item   ; @item
    when :guard  ; $data_skills[BattleManager.actor.guard_skill_id]
    else ; nil
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:コマンド[防御]
  #--------------------------------------------------------------------------
  alias :lnx11a_command_guard :command_guard
  def command_guard
    if LNX11::GUARD_TARGET_CHECKE
      BattleManager.actor.input.set_guard
      # アクター選択
      select_actor_selection
    else
      # 元のメソッドを呼ぶ
      lnx11a_command_guard
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:アクター選択の開始
  #--------------------------------------------------------------------------
  alias :lnx11a_select_actor_selection :select_actor_selection
  def select_actor_selection
    # ターゲットチェック
    @actor_window.set_target(actor_selection_item)
    # 元のメソッドを呼ぶ
    lnx11a_select_actor_selection
    # ターゲットチェック
    @actor_window.set_target_refresh(actor_selection_item, BattleManager.actor)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:敵キャラ選択の開始
  #--------------------------------------------------------------------------
  alias :lnx11a_select_enemy_selection :select_enemy_selection
  def select_enemy_selection
    # ターゲットチェック
    @enemy_window.set_target(actor_selection_item)
    # 元のメソッドを呼ぶ
    lnx11a_select_enemy_selection
    # ターゲットチェック
    @enemy_window.set_target_refresh(actor_selection_item, BattleManager.actor)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]アクター[キャンセル]
  #--------------------------------------------------------------------------
  alias :lnx11a_on_actor_cancel :on_actor_cancel
  def on_actor_cancel
    # 元のメソッドを呼ぶ
    lnx11a_on_actor_cancel
    # 防御の場合
    case @actor_command_window.current_symbol
    when :guard
      @actor_command_window.activate
    end   
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:攻撃アニメーションの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_show_attack_animation :show_attack_animation
  def show_attack_animation(targets)
    if @subject.actor?
      lnx11a_show_attack_animation(targets)
    else
      # 敵の通常攻撃アニメーション
      show_normal_animation(targets, @subject.atk_animation, false)
    end
  end
end

#==============================================================================
# ■ LNX11_Window_ActiveVisible
#------------------------------------------------------------------------------
#  バトル画面でターゲット選択中にウィンドウを非表示にするための
# ウィンドウ用モジュールです。
# ウィンドウの active と visible を連動させる役割があります。
# Window_ActorCommand,Window_BattleSkill, Window_BattleItem で
# インクルードされます。
#==============================================================================

module LNX11_Window_ActiveVisible
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウのアクティブ化
  #--------------------------------------------------------------------------
  def activate
    self.show
    super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウの非アクティブ化
  #--------------------------------------------------------------------------
  def deactivate
    @help_window != nil ? self.hide : self.visible = false
    super
  end
end

#==============================================================================
# ■ LNX11_Window_FittingList
#------------------------------------------------------------------------------
#  バトル画面のスキルリスト・アイテムリストを項目数に合わせてリサイズする
# ウィンドウ用モジュールです。
# Window_BattleSkill, Window_BattleItem でインクルードされます。
#==============================================================================

module LNX11_Window_FittingList
  #--------------------------------------------------------------------------
  # ● [追加]:ウィンドウの高さ(最大)
  #--------------------------------------------------------------------------
  def max_height
    @info_viewport.rect.y - @help_window.height
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    make_item_list
    self.height = [fitting_height(row_max), max_height].min
    super
    self.oy = 0
  end
end
  
#==============================================================================
# ■ LNX11_Window_TargetHelp
#------------------------------------------------------------------------------
#  バトル画面で、ターゲット選択中にヘルプウィンドウを表示するための
# ウィンドウ用モジュールです。
# Window_BattleActor, Window_BattleEnemy でインクルードされます。
#==============================================================================

module LNX11_Window_TargetHelp
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットチェック
  #--------------------------------------------------------------------------
  def set_target(actor_selection_item)
    @cursor_fix = @cursor_all = @cursor_random = false
    item = actor_selection_item
    if actor_selection_item && !item.lnx11a_need_selection?
      # カーソルを固定
      @cursor_fix = true
      # 全体
      @cursor_all = item.for_all?
      # ランダム
      if item.for_random?
        @cursor_all = true
        @cursor_random = true
        @random_number = item.number_of_targets
      end
    end
    # 戦闘不能の味方が対象か?
    @dead_friend = item.for_dead_friend?
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットチェック(リフレッシュ後)
  #--------------------------------------------------------------------------
  def set_target_refresh(actor_selection_item, actor)
    item = actor_selection_item
    # 使用者が対象なら、使用者にカーソルを合わせる
    select($game_party.members.index(actor)) if @cursor_fix && item.for_user?
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウの表示
  #--------------------------------------------------------------------------
  def show
    @help_window.show
    super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウの非表示
  #--------------------------------------------------------------------------
  def hide
    @help_window.hide
    super
  end
end

#==============================================================================
# ■ [追加]:Window_TargetHelp
#------------------------------------------------------------------------------
#  ターゲットの名前情報やスキルやアイテムの名前を表示します。
#==============================================================================

class Window_TargetHelp < Window_Help
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :random_number  # 効果範囲ランダムの数
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(1) # 1行ヘルプ
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウの非表示
  #--------------------------------------------------------------------------
  def hide
    super
    clear
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:アイテム名設定
  #     item : スキル、アイテム、バトラー等
  #--------------------------------------------------------------------------
  def set_item(item)
    set_text(item ? item : "") # itemの説明ではなく、item自体を渡すようにする
  end
  #--------------------------------------------------------------------------
  # ● ゲージ幅
  #--------------------------------------------------------------------------
  def gauge_width
    LNX11::HELP_PARAM_WIDTH
  end
  #--------------------------------------------------------------------------
  # ● ゲージ幅(余白を含む)
  #--------------------------------------------------------------------------  
  def gauge_width_spacing
    LNX11::HELP_PARAM_WIDTH + 4
  end
  #--------------------------------------------------------------------------
  # ● パラメータエリアの幅
  #--------------------------------------------------------------------------  
  def param_width(size)
    gauge_width_spacing * size
  end
  #--------------------------------------------------------------------------
  # ● 効果範囲ランダムの数の取得
  #--------------------------------------------------------------------------
  def random_number
    # 全角にして返す
    @random_number.to_s.tr('0-9','0-9')
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    contents.clear
    if @text == :party
      draw_text(contents.rect, "味方全体", 1)
    elsif @text == :troop
      draw_text(contents.rect, "敵全体", 1)
    elsif @text == :troop_random
      case LNX11::RANDOMSCOPE_DISPLAY
      when 0 ; draw_text(contents.rect, "敵全体 ランダム", 1)
      when 1 ; draw_text(contents.rect, "敵#{random_number}体 ランダム", 1)
      end
    elsif @text.is_a?(Game_Battler)
      # 選択対象の情報を描画
      draw_target_info
    elsif @text.is_a?(RPG::UsableItem)
      # アイテムかスキルならアイテム名を描画
      draw_item_name_help(@text)
    else
      # 通常のテキスト
      super
    end
  end
  #--------------------------------------------------------------------------
  # ● 選択対象の情報の描画
  #--------------------------------------------------------------------------
  def draw_target_info
    # バトラー情報の描画
    param = @text.actor? ? LNX11::HELP_ACTOR_PARAM : LNX11::HELP_ENEMY_PARAM
    # ゲージ付きステータス配列
    status = [param[:hp],param[:mp],param[:tp]&&$data_system.opt_display_tp]
    # 名前
    x = contents_width / 2 - contents.text_size(@text.name).width / 2
    name_width = contents.text_size(@text.name).width + 4
    if !status.include?(true)
      # ゲージ付きステータスを描画しない場合
      draw_targethelp_name(@text, x, name_width, param[:hp])
      x += name_width
      state_width = contents_width - x
    else
      # ゲージ付きステータスを描画する場合
      status.delete(false)
      x -= param_width(status.size) / 2
      draw_targethelp_name(@text, x, name_width, param[:hp])
      x += name_width
      state_width = contents_width - x - param_width(status.size)
    end
    # ステートアイコン
    if param[:state]
      draw_actor_icons(@text, x, 0, state_width)
    end
    # パラメータの描画
    x = contents_width - param_width(status.size)
    # HP
    if param[:hp]
      draw_actor_hp(@text, x, 0, gauge_width)
      x += gauge_width_spacing
    end
    # MP
    if param[:mp]
      draw_actor_mp(@text, x, 0, gauge_width)
      x += gauge_width_spacing
    end
    # TP
    if param[:tp] && $data_system.opt_display_tp
      draw_actor_tp(@text, x, 0, gauge_width)
      x += gauge_width_spacing
    end
  end
  #--------------------------------------------------------------------------
  # ● ターゲットの名前描画
  #--------------------------------------------------------------------------
  def draw_targethelp_name(actor, x, name_width, hp)
    if hp
      # HPゲージを伴う場合(HPが少ない場合、名前の色が変化する)
      draw_actor_name(actor, x, 0, name_width)
    else
      text = actor.name
      draw_text(x, 0, text_size(text).width + 4, line_height, text)
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの描画(中央揃え)
  #--------------------------------------------------------------------------
  def draw_item_name_help(item)
    case LNX11::HELPDISPLAY_TYPE
    when 0 # アイコン+名前
      w = contents.text_size(@text.name).width + 28
    when 1 # 名前のみ
      w = contents.text_size(@text.name).width + 4
    end
    # 簡易説明文の描画
    if [email protected]_description.empty?
      des = LNX11::HELPDISPLAY_DESCRIPTION
      contents.font.size = des[:size]
      text = des[:delimiter] + @text.short_description
      rect = contents.text_size(text)
      w += rect.width
      x = (contents_width - w) / 2
      y = (line_height - rect.height) / 2
      draw_text(x, y, w, line_height, text, 2)
      reset_font_settings
    end
    # 名前の描画
    x = (contents_width - w) / 2
    case LNX11::HELPDISPLAY_TYPE
    when 0 # アイコン+名前
      draw_item_name(@text, x, 0, true, w)
    when 1 # 名前のみ
      draw_text(x, 0, contents_width, line_height, @text.name)
    end
  end
end

#==============================================================================
# ■ Window_PartyCommand
#------------------------------------------------------------------------------
#  バトル画面で、戦うか逃げるかを選択するウィンドウです。
#==============================================================================

class Window_PartyCommand < Window_Command
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    $game_party.last_party_command = nil
    # 元のメソッドを呼ぶ
    lnx11a_initialize
    # 座標を設定
    self.x = LNX11::PARTY_COMMAND_XY[:x]
    self.y = LNX11::PARTY_COMMAND_XY[:y]
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return LNX11::PARTY_COMMAND_WIDTH
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    return LNX11::PARTY_COMMAND_HORIZON ? 1 : @list.size
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return LNX11::PARTY_COMMAND_HORIZON ? @list.size : 1
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:アライメントの取得
  #--------------------------------------------------------------------------
  def alignment
    return LNX11::PARTY_COMMAND_ALIGNMENT
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:横に項目が並ぶときの空白の幅を取得
  #--------------------------------------------------------------------------
  def spacing
    return 8
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウを開く
  #--------------------------------------------------------------------------
  def open
    super
    # 最後に選択したコマンドを選択
    return self unless LNX11::LAST_PARTY_COMMAND
    last_command = $game_party.last_party_command
    if last_command && @list.include?(last_command)
      select(@list.index(last_command))
    end
    self
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウを閉じる
  #--------------------------------------------------------------------------
  def close
    super
    # 選択したコマンドを記憶
    $game_party.last_party_command = @list[index] if index >= 0
    self
  end
end

#==============================================================================
# ■ Window_ActorCommand
#------------------------------------------------------------------------------
#  バトル画面で、アクターの行動を選択するウィンドウです。
#==============================================================================

class Window_ActorCommand < Window_Command
  include LNX11_Window_ActiveVisible
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    return LNX11::ACTOR_COMMAND_WIDTH
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    list_size = LNX11::ACTOR_COMMAND_NOSCROLL ? @list.size : 4
    return LNX11::ACTOR_COMMAND_HORIZON ? 1 : list_size
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return LNX11::ACTOR_COMMAND_HORIZON ? [@list.size, 1].max :  1
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:アライメントの取得
  #--------------------------------------------------------------------------
  def alignment
    return LNX11::ACTOR_COMMAND_ALIGNMENT
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:横に項目が並ぶときの空白の幅を取得
  #--------------------------------------------------------------------------
  def spacing
    return 8
  end
  #--------------------------------------------------------------------------
  # ● [追加]:X 座標をアクターに合わせる
  #--------------------------------------------------------------------------
  def actor_x(actor)
    ax = $game_party.members_screen_x_nooffset[actor.index] - self.width / 2
    pad = LNX11::STATUS_SIDE_PADDING / 2
    # 画面内に収める
    self.x = [[ax, pad].max, Graphics.width - pad - self.width].min
    self.x += LNX11::ACTOR_COMMAND_OFFSET[:x]
  end
  #--------------------------------------------------------------------------
  # ● [追加]:Y 座標をアクターに合わせる
  #--------------------------------------------------------------------------
  def actor_y(actor)
    self.y = actor.screen_y_top - self.height
    self.y += LNX11::ACTOR_COMMAND_OFFSET[:y]
  end
  #--------------------------------------------------------------------------
  # ● [追加]:固定 Y 座標
  #--------------------------------------------------------------------------
  def screen_y
    if LNX11::ACTOR_COMMAND_Y_POSITION == 0
      self.y = Graphics.height - self.height + LNX11::ACTOR_COMMAND_OFFSET[:y]
    else
      self.y = LNX11::ACTOR_COMMAND_OFFSET[:y]
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:セットアップ
  #--------------------------------------------------------------------------
  alias :lnx11a_setup :setup
  def setup(actor)
    # 前のアクターのコマンドを記憶
    @actor.last_actor_command = @list[index] if @actor
    # 元のメソッドを呼ぶ
    lnx11a_setup(actor)
    self.arrows_visible = !LNX11::ACTOR_COMMAND_NOSCROLL
    self.height = window_height
    self.oy = 0
    # アクターコマンドの表示位置で分岐
    case LNX11::ACTOR_COMMAND_POSITION
    when 0
      # アクターの頭上
      actor_x(actor)
      actor_y(actor)
    when 1
      # Y 座標固定
      actor_x(actor)
      screen_y
    when 2
      # XY固定
      self.x = LNX11::ACTOR_COMMAND_OFFSET[:x]
      screen_y
    end
    # 最後に選択したコマンドを選択
    return unless LNX11::LAST_ACTOR_COMMAND
    last_command = @actor.last_actor_command
    if last_command && @list.include?(last_command)
      select(@list.index(last_command))
    end
  end
end

#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
#  バトル画面で、パーティメンバーのステータスを表示するウィンドウです。
#==============================================================================

class Window_BattleStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :min_offset   # ステータス描画 X 座標の位置修正
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    @actor_last_status = Array.new($game_party.max_battle_members) { nil }   
    # 元のメソッドを呼ぶ
    lnx11a_initialize
    # ウィンドウを最初から表示
    self.openness = 255
    self.opacity = 0
    update_invisible
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:行の高さを取得
  #--------------------------------------------------------------------------
  def line_height
    return LNX11::STATUS_LINE_HEIGHT
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:標準パディングサイズの取得
  #--------------------------------------------------------------------------
  def standard_padding
    return 0
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    return $data_system.opt_display_tp ? 4 : 3
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return [item_max, 1].max
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:横に項目が並ぶときの空白の幅を取得
  #--------------------------------------------------------------------------
  def spacing
    return 0
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:項目の高さを取得
  #--------------------------------------------------------------------------
  def item_height
    self.height
  end  
  #--------------------------------------------------------------------------
  # ● [再定義]:ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    Graphics.width
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  alias :lnx11a_window_height :window_height
  def window_height
    # 一行目(名前・ステート)の高さを確保する
    lnx11a_window_height - line_height + [24, line_height].max
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:カーソルの更新
  #--------------------------------------------------------------------------
  def update_cursor
    # カーソルを表示しない
    cursor_rect.empty
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:システム色の取得
  #  ゲージ幅が短すぎる場合、HP,MP,TP の文字を非表示にします。
  #--------------------------------------------------------------------------
  def system_color
    gauge_area_width - @min_offset >= 52 ? super : Color.new
  end  
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ゲージ背景色の取得
  #   ゲージの透明度を適用します。  
  #--------------------------------------------------------------------------
  def gauge_back_color
    color = super
    color.alpha *= LNX11::STATUS_GAUGE_OPACITY / 255.0
    color
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ゲージの描画
  #   ゲージの透明度を適用します。
  #--------------------------------------------------------------------------
  def draw_gauge(x, y, width, rate, color1, color2)
    oparate = LNX11::STATUS_GAUGE_OPACITY / 255.0
    color1.alpha *= oparate
    color2.alpha *= oparate
    super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_invisible
  end
  #--------------------------------------------------------------------------
  # ● [追加]:表示状態更新
  #--------------------------------------------------------------------------
  def update_invisible
    self.contents_opacity = $game_party.status_invisible ? 0 : 255
  end  
  #--------------------------------------------------------------------------
  # ● [追加]:アクターオブジェクト取得
  #--------------------------------------------------------------------------
  def actor
    $game_party.members[@index]
  end
  #--------------------------------------------------------------------------
  # ● [追加]:座標の設定
  #--------------------------------------------------------------------------
  def set_xy
    # ステータス位置の調整:画面からはみ出ないようにする
    pw = $game_party.members_screen_x.last + LNX11::STATUS_OFFSET[:x]
    pw += gauge_area_width / 2
    right_end = Graphics.width - LNX11::STATUS_SIDE_PADDING
    min_offset = pw > right_end ? pw - right_end : 0
    # ステータスのオフセットを適用
    self.x = LNX11::STATUS_OFFSET[:x] - min_offset
    self.y = LNX11::STATUS_OFFSET[:y] + Graphics.height - self.height
    # ステータス幅の自動調整:位置を調整した分だけ幅を縮める
    @min_offset = LNX11::STATUS_AUTOADJUST ? min_offset : 0
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:ゲージエリアの幅を取得
  #--------------------------------------------------------------------------
  def gauge_area_width
    return LNX11::STATUS_WIDTH
  end
  #--------------------------------------------------------------------------
  # ● [追加]:表示するステート数の取得
  #--------------------------------------------------------------------------
  def states(actor, width)
    icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
    icons.size
  end
  #--------------------------------------------------------------------------
  # ● [追加]:名前とステートの描画(1行表示)
  #  width の範囲で名前を左揃え、ステートアイコンを右揃えで描画します。
  # ステートを優先して表示するため、アイコンが多すぎて名前の表示領域が
  # 極端に狭くなる場合は名前を描画しません。
  #--------------------------------------------------------------------------
  def draw_actor_name_with_icons(actor, x, y, width = 128, draw_name = true)
    # アイコンのY座標補正
    iy = ([line_height, 24].max - 24) / 2
    # 名前のY座標補正
    ny = ([line_height, 24].max - LNX11::STATUS_NAME_SIZE) / 2
    # 表示するステート数を取得
    icon = states(actor, width)
    if icon > 0
      # 表示するべきステートがある場合
      name_width = width - icon * 24
      ix = x + width - icon * 24
      if name_width >= contents.font.size * 2 && draw_name
        # 名前の表示領域(width) が フォントサイズ * 2 以上なら両方を描画
        draw_actor_name(actor, x, y + ny,  name_width)
        iw = width - name_width
        draw_actor_icons(actor, ix, y + iy, iw)
      else
        # ステートのみ描画
        draw_actor_icons(actor, ix, y + iy, width)
      end
    elsif draw_name
      # ない場合、名前のみ描画
      draw_actor_name(actor, x, y + ny, width)
    end
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    set_xy
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:項目を描画する矩形の取得
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = super
    rect.x = $game_party.members_screen_x[index] - gauge_area_width / 2
    rect.width = gauge_area_width
    rect
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:基本エリアの矩形を取得
  #--------------------------------------------------------------------------
  def basic_area_rect(index)
    rect = item_rect(index)
    rect
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:ゲージエリアの矩形を取得
  #--------------------------------------------------------------------------
  def gauge_area_rect(index)
    rect = basic_area_rect(index)
    rect.y += [24, line_height].max
    rect.x += @min_offset
    rect
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:基本エリアの描画
  #--------------------------------------------------------------------------
  def draw_basic_area(rect, actor)
    # フォントサイズ変更
    contents.font.size = [LNX11::STATUS_NAME_SIZE, 8].max
    # 名前とステートを描画
    dn = LNX11::STATUS_NAME_SIZE > 0 # 名前を描画するか?
    width = gauge_area_width - @min_offset
    rest  = width % 24
    width += 24 - rest if rest > 0
    draw_actor_name_with_icons(actor, rect.x, rect.y, width, dn)
    # フォントサイズを元に戻す
    reset_font_settings
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ゲージエリアの描画
  #--------------------------------------------------------------------------
  alias :lnx11a_draw_gauge_area :draw_gauge_area
  def draw_gauge_area(*args)
    # フォントサイズ変更
    contents.font.size = LNX11::STATUS_PARAM_SIZE
    # 元のメソッドを呼ぶ
    lnx11a_draw_gauge_area(*args)
    # フォントサイズを元に戻す
    reset_font_settings
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:ゲージエリアの描画(TP あり)
  #--------------------------------------------------------------------------
  def draw_gauge_area_with_tp(rect, actor)
    width = gauge_area_width - @min_offset
    draw_actor_hp(actor, rect.x, rect.y,                   width)
    draw_actor_mp(actor, rect.x, rect.y + line_height,     width)
    draw_actor_tp(actor, rect.x, rect.y + line_height * 2, width)
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:ゲージエリアの描画(TP なし)
  #--------------------------------------------------------------------------
  def draw_gauge_area_without_tp(rect, actor)
    draw_actor_hp(actor, rect.x, rect.y,               gauge_area_width)
    draw_actor_mp(actor, rect.x, rect.y + line_height, gauge_area_width)
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    actor = $game_party.battle_members[index]
    a_status = status(actor)
    # ステータスが変化した場合のみ描画する
    return if @actor_last_status[index] == a_status
    @actor_last_status[index] = a_status
    contents.clear_rect(item_rect(index))
    draw_basic_area(basic_area_rect(index), actor)
    draw_gauge_area(gauge_area_rect(index), actor)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アクターのステータス配列を返す
  #--------------------------------------------------------------------------
  def status(actor)
    if $data_system.opt_display_tp
      return [actor.name, actor.state_icons + actor.buff_icons,
              actor.mhp, actor.hp, actor.mmp, actor.mp, actor.max_tp, actor.tp]
    else
      # TP を除くステータス配列
      return [actor.name, actor.state_icons + actor.buff_icons,
              actor.mhp, actor.hp, actor.mmp, actor.mp]
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:内容の消去
  #--------------------------------------------------------------------------
  def all_clear
    contents.clear
    @actor_last_status = Array.new($game_party.max_battle_members) { nil }   
  end
end

#==============================================================================
# ■ Window_BattleActor
#------------------------------------------------------------------------------
#  バトル画面で、行動対象のアクターを選択するウィンドウです。
# XPスタイルバトルではバトルステータスを非表示にしないため、
# 選択機能だけを持つ不可視のウィンドウとして扱います。
#==============================================================================

class Window_BattleActor < Window_BattleStatus
  include LNX11_Window_TargetHelp
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_wba_initialize :initialize
  def initialize(info_viewport)
    # 元のメソッドを呼ぶ
    lnx11a_wba_initialize(info_viewport)
    # ウィンドウを画面外に移動
    self.y = Graphics.height
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_item(targetcursor)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルに渡すオブジェクト
  #--------------------------------------------------------------------------
  def targetcursor
    @cursor_all ? :party : actor
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    64
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:全項目の描画
  #--------------------------------------------------------------------------
  def draw_all_items
    # 何もしない   
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index)
    # 何もしない
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # 何もしない
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_show :show
  def show
    # 元のメソッドを呼ぶ
    lnx11a_show
    # 最後に選択したアクターを選択
    last_target = $game_temp.last_target_cursor[:actor]
    if last_target && $game_party.members.include?(last_target) &&
       LNX11::LAST_TARGET
      select($game_party.members.index(last_target))
    end
    # スマートターゲットセレクト
    if LNX11::SMART_TARGET_SELECT && !@cursor_fix
      if @dead_friend && (!last_target || last_target && last_target.alive?)
        dead_actor = $game_party.dead_members[0]
        select($game_party.members.index(dead_actor)) if dead_actor
      elsif !@dead_friend && (!last_target || last_target && last_target.dead?)
        alive_actor = $game_party.alive_members[0]
        select($game_party.members.index(alive_actor)) if alive_actor
      end
    end
    self
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウの非表示
  #--------------------------------------------------------------------------
  alias :lnx11a_hide :hide
  def hide
    # 元のメソッドを呼ぶ
    lnx11a_hide
    # 選択したアクターを記憶
    $game_temp.last_target_cursor[:actor] = actor
    self
  end
end

#==============================================================================
# ■ Window_BattleEnemy
#------------------------------------------------------------------------------
#  バトル画面で、行動対象の敵キャラを選択するウィンドウです。
# 横並びの不可視のウィンドウとして扱います。
#==============================================================================

class Window_BattleEnemy < Window_Selectable
  include LNX11_Window_TargetHelp
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize(info_viewport)
    # 敵キャラオブジェクトの設定
    set_enemy
    # 元のメソッドを呼ぶ
    lnx11a_initialize(info_viewport)
    # ウィンドウを画面外に移動
    self.y = Graphics.height
  end
  #--------------------------------------------------------------------------
  # ● [追加]:敵キャラオブジェクトの設定
  #--------------------------------------------------------------------------
  def set_enemy
    if LNX11::TROOP_X_SORT
      @troop = $game_troop.alive_members.sort {|a,b| a.screen_x <=> b.screen_x}
    else
      @troop = $game_troop.alive_members
    end
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:敵キャラオブジェクト取得
  #--------------------------------------------------------------------------
  def enemy
    @troop[@index]
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ウィンドウ幅の取得
  #--------------------------------------------------------------------------
  def window_width
    64
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:指定行数に適合するウィンドウの高さを計算
  #--------------------------------------------------------------------------
  def fitting_height(line_number)
    super(1)
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return item_max
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    @help_window.random_number = @random_number
    @help_window.set_item(targetcursor)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ターゲットカーソルに渡すオブジェクト
  #--------------------------------------------------------------------------
  def targetcursor
    @cursor_all ? (@cursor_random ? :troop_random : :troop) : enemy
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_show :show
  def show
    # 元のメソッドを呼ぶ
    lnx11a_show
    # 敵キャラオブジェクトの設定
    set_enemy
    return self unless LNX11::LAST_TARGET
    # 最後に選択した敵キャラを選択
    last_target = $game_temp.last_target_cursor[:enemy]
    if last_target && @troop.include?(last_target)
      select(@troop.index(last_target))
    end
    self
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウの非表示
  #--------------------------------------------------------------------------
  alias :lnx11a_hide :hide
  def hide
    # 元のメソッドを呼ぶ
    lnx11a_hide
    # 選択した敵キャラを記憶
    $game_temp.last_target_cursor[:enemy] = enemy
    self
  end
end

#==============================================================================
# ■ Window_BattleSkill
#------------------------------------------------------------------------------
#  いくつかのモジュールをインクルードします。
#==============================================================================

class Window_BattleSkill < Window_SkillList
  include LNX11_Window_ActiveVisible
  include LNX11_Window_FittingList if LNX11::FITTING_LIST
end

#==============================================================================
# ■ Window_BattleItem
#------------------------------------------------------------------------------
#  いくつかのモジュールをインクルードします。
#==============================================================================

class Window_BattleItem < Window_ItemList
  include LNX11_Window_ActiveVisible
  include LNX11_Window_FittingList if LNX11::FITTING_LIST
end
# l:5608[/code]MOG_Battler_Motion脚本[        DISCUZ_CODE_1        ]
作者: zhuyapeng119    时间: 2015-3-29 01:20
脚本菜单里将mog放在lnx11之后,进入战斗画面一点战斗就会出现
脚本“lnx11”第3248行发生TypeError 。 nil can't be coerced into Fixnum.


那一行的内容:     screen_y - @bitmap_height




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1