查看: 5116|回复: 12

[已经解决] 求这种样子战斗脚本

[复制链接]
梦石
0
星屑
1572
在线时间
903 小时
注册时间
2011-3-4
回帖
801
发表于 2013-8-15 12:22:46 | 显示全部楼层 |阅读模式
悬赏1星屑已解决
01.png
如图

最佳答案

查看完整内容

是要這種戰鬥風格嗎? 之前我也問過類似的問題(謝謝喵嗚喵大!) http://rpg.blue/forum.php?mod=viewthread&tid=324509&fromuid=356025 腳本連結 LNX11a_XP戰鬥風格: http://peachround.blog.fc2.com/blog-entry-9.html 如果這是樓主要的,有實裝上的困難的話,我會全部整理好然後打包給樓主。
全民制作人们,大家好,我是练习时长两年半的黄油制作人绿坝,喜欢唱、跳、rap、篮球,music!欢迎加群:107335249
梦石
0
星屑
1564
在线时间
209 小时
注册时间
2013-6-19
回帖
123
发表于 2013-8-15 12:22:47 | 显示全部楼层
本帖最后由 a0936459772 于 2013-8-17 03:58 编辑

lnx戰鬥風格.jpg

是要這種戰鬥風格嗎?

之前我也問過類似的問題(謝謝喵嗚喵大!)
http://rpg.blue/forum.php?mod=vi ... &fromuid=356025

腳本連結 LNX11a_XP戰鬥風格:
http://peachround.blog.fc2.com/blog-entry-9.html

如果這是樓主要的,有實裝上的困難的話,我會全部整理好然後打包給樓主。


点评

就是这个!但是代理打开的不是这个脚本?  发表于 2013-8-17 10:27
回复

使用道具 举报

梦石
0
星屑
49
在线时间
276 小时
注册时间
2011-6-5
回帖
128
发表于 2013-8-15 13:15:06 | 显示全部楼层
这是什么战斗系统。。
【日式女主HRPG?立绘+爆衣功能? 】
不过反正我是做不出来~LZ最好把特征描述清楚哦~
研表究明,汉字的序顺并不定一能影阅响读,比如当你看完这话句后,才发这现里的字全是都乱的
回复

使用道具 举报

天才琪露诺

梦石
0
星屑
54
在线时间
276 小时
注册时间
2013-6-24
回帖
1620
发表于 2013-8-15 16:44:30 | 显示全部楼层
LZ能说详细点么?

说人家是笨蛋的自己才是笨蛋,我最强了,最最最强!
回复

使用道具 举报

梦石
0
星屑
50
在线时间
521 小时
注册时间
2011-12-7
回帖
148
发表于 2013-8-15 16:56:35 | 显示全部楼层
本帖最后由 Ceopal 于 2013-8-15 17:08 编辑



看怪的大小与位置,个人判断其实就是Sideview战斗脚本
战斗与逃跑 是改变位置、大小并打横菜单的结果
男主和女主是同样的,女主只是使用一个巨型图片,巨型图片的目的可能在于遮挡Sideview的角色行走图
HPBAR 也是自行修改的
如果大家都没有见过,只能说明这是Sideview的玩家自行改造版界面,并非一个什么另外的战斗脚本





回复

使用道具 举报

梦石
0
星屑
1572
在线时间
903 小时
注册时间
2011-3-4
回帖
801
 楼主| 发表于 2013-8-15 17:30:51 | 显示全部楼层
是默认横板战斗 我只想要下面的血条蓝条那些,有人知道大概是哪个脚本吗?

点评

它有4種SKIN 你說的那個血條是其中一種  发表于 2013-8-17 15:50
全民制作人们,大家好,我是练习时长两年半的黄油制作人绿坝,喜欢唱、跳、rap、篮球,music!欢迎加群:107335249
回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-8-17 03:23:40 | 显示全部楼层
http://yanflychannel.wordpress.c ... ts/visual-battlers/

介个如何?  英文沒有問題吧?  如果看不懂我可以幫你翻

点评

打不开,在线代理也不行。  发表于 2013-8-17 10:26

回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-8-17 12:07:43 | 显示全部楼层
本帖最后由 76213585 于 2013-8-16 21:31 编辑

幫你拿出來了~
這是樓上的
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11aconf_XPスタイルバトル#コンフィグ
#  このスクリプトは LNX11a_XPスタイルバトル の設定スクリプトです。
#  単体では何の機能も持ちませんのでご注意ください。
#
#  version   : 1.10 (12/11/18)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-9.html
#
#==============================================================================

module LNX11
  #--------------------------------------------------------------------------
  # ■ Index
  #
  # line 026 : 基本設定              line 244 : パーティコマンド
  # line 048 : アクターエリアの背景  line 259 : ターゲットカーソル
  # line 065 : バトルログ            line 289 : ターゲットヘルプ
  # line 118 : バトルメッセージ      line 305 : ポップアップ
  # line 159 : バトラーグラフィック  line 507 : ユーザビリティ
  # line 182 : バトルステータス      line 535 : その他
  # line 212 : アクターコマンド      
  #
  #--------------------------------------------------------------------------
  # ● 基本設定
  #--------------------------------------------------------------------------
  # デフォルトで表示するアクターのバトラーグラフィック
  #  0 = 顔グラフィック / 1 = 歩行グラフィック
  DEFAULT_BATTLER_GRAPHIC = 0  # 規定値:0
  
  # デフォルトバトラーグラフィックの背景グラデーション色([Color1, Color2])
  DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
                   # 規定値:[Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
  
  # 画面の色調変更をアクターに適用する true = 有効 / false = 無効
  # * true にするとアクターエリアの背景にも適用されます
  ACTOR_SCREEN_TONE       = false  # 規定値:false
  
  # TP のポップアップ設定
  #  0 = すべてポップアップする / 1 = アクターのみ / 2 = ポップアップしない
  TP_POPUP_TYPE           = 1      # 規定値:1
  
  # アイコン無しのステートをポップアップしない true = 有効 / false = 無効
  INDEXZERO_NO_POPUP      = true   # 規定値:true

  #--------------------------------------------------------------------------
  # ● 設定:アクターエリアの背景
  #--------------------------------------------------------------------------
  # アクターエリアの背景のタイプ
  #  0 = 無し / 1 = グラデーション / 2 = ウィンドウ / "文字列" = 画像
  ACTOR_BACKGROUND        = 2   # 規定値:2
  
  # アクターエリア背景の高さ
  ACTOR_BACKGROUND_HEIGHT = 112 # 規定値:112
  
    #------------------------------------------------------------------------
    # ○ タイプ [1:グラデーション] の設定
    #------------------------------------------------------------------------
    # グラデーションの色([Color1, Color2])
    ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
                     # 規定値:[Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルログ
  #--------------------------------------------------------------------------
  # バトルログ(戦闘進行の実況)のタイプ
  # 0 = VXAceデフォルト / 1 = 蓄積型 / 2 = ヘルプ表示
  BATTLELOG_TYPE  =  1  # 規定値:1
  
    #------------------------------------------------------------------------
    # ○ バトルログタイプ [1:蓄積型] の設定
    #------------------------------------------------------------------------
    # 一度に表示する行数
    STORAGE_LINE_NUMBER     = 6     # 規定値:6
   
    # 一行の高さ
    STORAGE_LINE_HEIGHT     = 20    # 規定値:20
   
    # 自動的にログが進行する時間(フレーム)
    STORAGE_UP_MESSAGE_TIME = 90    # 規定値:90
   
    # ターン終了時にバトルログを消去する true = 有効 / false = 無効
    STORAGE_TURNEND_CLEAR   = true  # 規定値:true
   
    # 座標の調整 :x = X座標 / :y = Y座標
    STORAGE_OFFSET = {:x => 0, :y => 6}  # 規定値:{:x => 0, :y => 6}
   
    # フォント :size = フォントサイズ / :out_color = テキストの縁取り色
    STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
            # 規定値:{:size => 20, :out_color => Color.new(0, 0, 0, 192)}
   
    # 背景のグラデーションの色([Color1, Color2])
    STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
                    # 規定値:[Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
   
    #------------------------------------------------------------------------
    # ○ バトルログタイプ [2:ヘルプ表示] の設定
    #------------------------------------------------------------------------
    # ポップアップのウェイト
    POPUP_ADD_WAIT          = 6     # 規定値:6

    # 行動の表示形式 0 = アイコン+名前 / 1 = 名前のみ
    HELPDISPLAY_TYPE        = 1     # 規定値:1
   
    # 行動の表示始めの追加ウェイト
    HELPDISPLAT_WAIT        = 20    # 規定値:20
   
    # 行動の表示終了までの追加ウェイト
    HELPDISPLAT_END_WAIT    = 24    # 規定値:24
   
    # 行動の簡易説明文
    # :size = フォントサイズ :delimiter = 名前と簡易説明文の区切り文字
    HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
                     # 規定値:{:size => 20, :delimiter => " "}
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルメッセージ
  #--------------------------------------------------------------------------
  # バトルメッセージ(戦闘開始・逃走・リザルト等)の表示先
  # 0 = メッセージウィンドウ / 1 = バトルログ / 2 = ヘルプ
  MESSAGE_TYPE  =  2   # 規定値:2

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [0:メッセージウィンドウ] の設定
    #------------------------------------------------------------------------
    # メッセージウィンドウの背景 0 = ウィンドウ / 1 = 背景を暗くする / 2 = 透明
    MESSAGE_WINDOW_BACKGROUND  = 1     # 規定値:1
  
    # メッセージウィンドウの位置 0 = 上 / 1 = 中 / 2 = 下
    MESSAGE_WINDOW_POSITION    = 0     # 規定値:0

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [2:ヘルプ] の設定
    #------------------------------------------------------------------------
    # ヘルプバトルメッセージのウェイト
    #   [ウェイト(フレーム), キー入力を待つ(true = 有効 / false = 無効)]
    #  :battle_start = 戦闘開始      :victory = 勝利
    #  :escape       = 逃走          :defeat  = 敗北
    #  :drop_item    = アイテム獲得 :levelup = レベルアップ
    MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
                    :defeat       => [120, false], :escape    => [120, false],
                    :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
          # 規定値:{:battle_start => [120, false], :victory   => [ 60, false],
          #         :defeat       => [120, false], :escape    => [120, false],
          #         :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
  
  # 戦闘開始時の敵出現メッセージを表示する
  MESSAGE_WINDOW_ENEMY_NAMES = false # 規定値:false
  
  # レベルアップ SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)   # 規定値:("Up4", 90, 100)
  
  # ドロップアイテム獲得 SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  # * バトルメッセージタイプが 0 以外の場合のみ再生されます。
  DROPITEM_SE = RPG::SE.new("Item3", 80, 125) # 規定値:("Item3", 80, 125)
  
  #--------------------------------------------------------------------------
  # ● 設定:アクターのバトラーグラフィック
  #--------------------------------------------------------------------------
  # アクター表示を中央揃えにする true = 有効 / false = 左揃え
  ACTOR_CENTERING  =  true    # 規定値:true

    #------------------------------------------------------------------------
    # ○ アクター表示中央揃えの設定
    #------------------------------------------------------------------------
    # アクター間のスペースの大きさ補正
    ACTOR_SPACING_ADJUST = 32 # 規定値:32
   
  # 座標の調整 :x = X座標 / :y = Y座標
  # * アクターコマンドのX座標には影響しません。
  ACTOR_OFFSET  = {:x => -16, :y => 0}       # 規定値:{:x => -16, :y => 0}
  
  # アクターエリアと画面端との余白 :side = 左右の余白 / :bottom = 下の余白
  ACTOR_PADDING = {:side => 4, :bottom => 8} # 規定値:{:side => 4, :bottom => 8}
  
  # パーティに対する画面アニメーションのY座標修正
  #  位置が[画面]のアニメーションをパーティの中心に表示されるようにします。
  SCREEN_ANIMATION_OFFSET = 128  # 規定値:128
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルステータス
  #--------------------------------------------------------------------------
  # 座標の調整  :x = X座標 / :y = Y座標
  #  X 座標はアクターの中心を基準とします。
  # * パーティメンバーの数やステータス幅によっては、X 座標が自動的に
  # 調整される場合があります。
  STATUS_OFFSET = {:x => 64, :y => -12} # 規定値:{:x => 64, :y => -12}
  
  # 画面左右端の余白
  STATUS_SIDE_PADDING   = 6     # 規定値:6
  
  # アクター1人あたりのステータス幅
  STATUS_WIDTH          = 72    # 規定値:72

  # ステータス幅の自動調整を行う
  STATUS_AUTOADJUST     = true  # 規定値:true
  
  # 行の高さ
  STATUS_LINE_HEIGHT    = 22    # 規定値:22
  
  # アクターの名前のフォントサイズ 値を 0 にすると非表示になる
  STATUS_NAME_SIZE      = 20    # 規定値:20
  
  # HP/MP/TPのフォントサイズ
  STATUS_PARAM_SIZE     = 23    # 規定値:23
  
  # HP/MP/TPゲージの不透明度 (0-255)
  STATUS_GAUGE_OPACITY  = 192   # 規定値:192

  #--------------------------------------------------------------------------
  # ● 設定:アクターコマンド
  #--------------------------------------------------------------------------
  # コマンドの項目数が 4 を超える場合、項目がすべて見えるように
  # コマンドウィンドウの高さを拡張する true = 有効 / false = 無効
  ACTOR_COMMAND_NOSCROLL   = true  # 規定値:true
  
  # コマンドを横並びにする true = 横並び / false = 縦並び
  ACTOR_COMMAND_HORIZON    = false # 規定値:false

  # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  ACTOR_COMMAND_ALIGNMENT  = 0     # 規定値:0
  
  # ウィンドウの横幅
  #  コマンドを横並びにする場合、大きめの値を設定してください。
  ACTOR_COMMAND_WIDTH      = 128   # 規定値:128
  
  # ウィンドウの位置
  #  0 = アクターの頭上 / 1 = Y座標を固定 / 2 = XY座標を固定
  ACTOR_COMMAND_POSITION   = 0     # 規定値:0

    #------------------------------------------------------------------------
    # ○ ウィンドウの位置 [1:Y座標固定 2:XY座標] の設定
    #------------------------------------------------------------------------
    # 固定Y座標の基準位置
    # 0 = 画面下端 - ウィンドウの高さ / 画面上端
    ACTOR_COMMAND_Y_POSITION = 0   # 規定値:0
  
    # ウィンドウのXY座標修正 :x = X座標 / :y = Y座標
    # * コマンド位置が 1 or 2 の場合、ここで設定した値で座標を固定します。
    ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16} # 規定値:{:x => 0, :y => -16}
  
  #--------------------------------------------------------------------------
  # ● 設定:パーティコマンド
  #--------------------------------------------------------------------------
  # コマンドを横並びにする true = 横並び / false = 縦並び
  PARTY_COMMAND_HORIZON   = true  # 規定値:true
  
  # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  PARTY_COMMAND_ALIGNMENT = 1     # 規定値:1
  
  # ウィンドウの幅
  PARTY_COMMAND_WIDTH     = Graphics.width     # 規定値:Graphics.width
  
  # ウィンドウの座標 :x = X座標 / :y = Y座標
  PARTY_COMMAND_XY        = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}
  
  #--------------------------------------------------------------------------
  # ● 設定:ターゲットカーソル
  #--------------------------------------------------------------------------
  # カーソルグラフィックのファイル名 (Graphics/System/*)
  #  "" を設定した場合、Bitmap の機能でカーソルを自動生成します。
  CURSOR_NAME       = ""    # 規定値:""
  
    #------------------------------------------------------------------------
    # ○ 自動生成のカーソルグラフィックの設定
    #------------------------------------------------------------------------
    # カーソルの色調 (Red, Green, Blue)
    #  nil を設定した場合、データベースのウィンドウカラーと同じになります。
    CURSOR_TONE     = Tone.new(-34, 0, 68)  # 規定値:Tone.new(-34, 0, 68)
  
  # アニメーションスピード
  CURSOR_ANI_SPEED  = 3     # 規定値:3
   
  # 移動スピード
  CURSOR_SPEED      = 3     # 規定値:3
  
  # 対象選択時にカーソルを点滅させる
  CURSOR_BLINK      = true  # 規定値:true
  
  # カーソルのY座標の制限 :min = 最小値 / :max = 最大値
  CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
             # 規定値:{:min => 48, :max => Graphics.height}
  
  # カーソル位置のXY座標修正 :x = X座標 / :y = Y座標
  CURSOR_OFFSET     = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}

  #--------------------------------------------------------------------------
  # ● 設定:ターゲットヘルプ
  #--------------------------------------------------------------------------
  # バトラーの各パラメータ表示 true = 表示 / false = 非表示
  HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
    # アクター規定値:{:hp => true ,:mp => true ,:tp => true ,:state => true }
    # 敵キャラ規定値:{:hp => false,:mp => false,:tp => false,:state => true }
  
  # HP/MP/TP ゲージの幅
  HELP_PARAM_WIDTH    = 72  # 規定値:72
  
  # 敵ランダムの表示形式
  # 0 = 敵全体 ランダム / 1 = 敵n体 ランダム
  RANDOMSCOPE_DISPLAY = 1   # 規定値:1
  
  #--------------------------------------------------------------------------
  # ● 設定:ポップアップ
  #--------------------------------------------------------------------------
  # ポップアップ位置 0 = 足元 / 1 = 中心 / 2 = 頭上 / 3 = 一定(アクターのみ)
  ACTOR_POPUP_POSITION   = 3  # アクター     規定値:3
  ENEMY_POPUP_POSITION   = 1  # 敵キャラ     規定値:1
  LEVELUP_POPUP_POSITION = 3  # レベルアップ 規定値:3
  
    #------------------------------------------------------------------------
    # ○ ポップアップ位置 [3:一定(アクターのみ)] の設定
    #------------------------------------------------------------------------
    # アクターのポップアップの Y 座標
    #  ゲーム画面の高さ(Graphics.height)を基準とします。
    ACTOR_POPUP_Y     =  -100  # 規定値:-100
   
    # レベルアップのポップアップの Y 座標
    #  ゲーム画面の高さ(Graphics.height)を基準とします。
    LEVELUP_POPUP_Y   =  -112  # 規定値:-112
  
  # 数字のフォント
  NUMBER_FONT   =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]
  
  # ステート等のテキストのフォント
  TEXT_FONT     =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]
  TEXT_FONT_MCS =  ["VL Gothic"]       #日本語を含む場合。規定値:["VL Gothic"]
  
  # 画像フォントのファイル名 (Graphics/System/*) <<ver1.10>>
  #  "" を設定した場合、通常のフォントを利用します。
  # 数字
  LARGE_NUMBER_NAME = ""       # 規定値:""
  SMALL_NUMBER_NAME = ""       # 規定値:""
  # 能力強化/弱体
  LARGE_BUFFS_NAME  = ""       # 規定値:""
  SMALL_BUFFS_NAME  = ""       # 規定値:""
  
  # 数字のサイズ・字間
  #  :fontsize = フォントサイズ / :spacing = 字間
  #  :width    = 一字あたりの幅 / :height = 一字あたりの高さ
  LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  # 大サイズ規定値:{:fontsize => 38, :spacing => -4, :line_height => 26}
  # 小サイズ規定値:{:fontsize => 28, :spacing => -4, :line_height => 20}
  
  # テキストのフォントサイズ倍率
  #   :normal     = テキスト単体
  #   :left_right = ダメージ左右   :top_bottom = ダメージ上下
  # * 数字のフォントサイズからの割合で指定します。
  TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
             # 規定値:{:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
  
  # 日本語を含むテキストのフォントサイズ倍率
  # * 通常のテキストフォントサイズからの倍率で指定します。
  TEXT_SIZERATE_MCS = 0.9   # 規定値:0.9
  
  # ポップアップの修飾文字
  # ["テキスト", 修飾文字の位置(2 = 下 / 4 = 左 / 6 = 右 / 8 = 上)]
  # * 文字列中の \mp \tp はデータベースで設定した用語(短)に置き換わります
  DECORATION_NUMBER = {            # 規定値
  :critical    => ["CRITICAL", 8], # ["CRITICAL", 8] / クリティカル
  :weakness    => ["WEAKNESS", 8], # ["WEAKNESS", 8] / 弱点ダメージ
  :resist      => ["RESIST"  , 8], # ["RESIST"  , 8] / 耐性ダメージ
  :mp_damage   => ["\mp"     , 4], # ["\mp"     , 4] / MP ダメージ・回復
  :mp_plus     => ["\mp+"    , 4], # ["\mp+"    , 4] / MP 再生
  :mp_minus    => ["\mp-"    , 4], # ["\mp-"    , 4] / MP 消費
  :tp_plus     => ["\tp+"    , 4], # ["\tp+"    , 4] / TP 増加
  :tp_minus    => ["\tp-"    , 4], # ["\tp-"    , 4] / TP 減少
  }
  # ステートや能力強化/弱体のポップアップの修飾文字
  #  %s にステート・能力名が入る
  DECORATION_TEXT = {              # 規定値
  :add_state   => "+%s",           # "+%s"           / ステート付加
  :rem_state   => "-%s",           # "-%s"           / ステート解除
  :add_buff    => "%s UP",         # "%s UP"         / 能力強化付加
  :add_debuff  => "%s DOWN",       # "%s DOWN"       / 能力弱体付加
  :rem_buff    => "-%s Buff",      # "-%s Buff"      / 能力強化/弱体解除
  }
  # ポップアップの表示用語
  POPUP_VOCAB = {                  # 規定値
  :miss        => "MISS!",         # "MISS!"         / ミス
  :counter     => "Counter",       # "Counter"       / 反撃
  :reflection  => "Reflection",    # "Reflection"    / 反射
  :substitute  => "Substitute",    # "Substitute"    / 身代わり
  :levelup     => "LEVELUP!",      # "LEVELUP!"      / レベルアップ
  }
  # 能力強化/弱体ポップアップのパラメータ表記
  # * 文字列中の \hp \mp はデータベースで設定した用語(短)に置き換わります
  POPUP_VOCAB_PARAMS = [ # 規定値
  "MAX\hp",              # "MAX\hp"  / 最大HP    MAXimum Hit Point
  "MAX\mp",              # "MAX\mp"  / 最大MP    MAXimum Magic Point
  "ATK",                 # "ATK"     / 攻撃力    ATtacK power
  "DEF",                 # "MATK"    / 防御力    DEFense power
  "MATK",                # "MDEF"    / 魔法力    Magic ATtacK power
  "MDEF",                # "MDEF"    / 魔法防御  Magic DEFense power
  "AGI",                 # "AGI"     / 敏捷性    AGIlity
  "LUCK",                # "LUCK"    / 運        LUCK
  ]
  # ポップアップの色([Color1, Color2])
  # * ハッシュの順序を変更しないこと
  POPUP_COLOR = {
  # HP ダメージ(ミス)
  :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # クリティカルダメージ
  :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  # 弱点ダメージ
  :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 耐性ダメージ
  :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  # HP 回復(再生,吸収)
  :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  # MP ダメージ
  :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  # MP 回復(再生,吸収)
  :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  # TP 増減
  :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  # 有利なステートの付加
  :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 有利なステートの解除
  :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  # ステートの付加
  :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # ステートの解除
  :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 能力強化の付加
  :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  # 能力弱体の付加
  :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  # 能力強化/弱体の解除
  :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 反撃
  :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  # 反射
  :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  # 身代わり
  :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  # レベルアップ
  :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  }
  # ポップアップのタイプ        -1 = ポップアップしない
  #  0 = 跳ねるポップアップ(大)  4 = スライド(大)
  #  1 = 跳ねるポップアップ(小)  5 = スライド(小)
  #  2 = ゆっくり上昇(大)        6 = オーバーレイ(大)
  #  3 = ゆっくり上昇(小)        7 = オーバーレイ(小)
  POPUP_TYPE = {          # 規定値
  :miss          =>   0,  #   0 / ミス
  :hp_damage     =>   0,  #   0 / HP ダメージ
  :hp_slipdamage =>   1,  #   1 / HP スリップダメージ
  :hp_recovery   =>   0,  #   0 / HP 回復
  :hp_regenerate =>   1,  #   1 / HP 再生
  :hp_drain      =>   0,  #   0 / HP 被吸収
  :hp_drainrecv  =>   0,  #   0 / HP 吸収回復
  :mp_damage     =>   0,  #   0 / MP ダメージ
  :mp_slipdamage =>   1,  #   1 / MP スリップダメージ
  :mp_recovery   =>   0,  #   0 / MP 回復
  :mp_regenerate =>   1,  #   1 / MP 再生
  :mp_drain      =>   0,  #   0 / MP 被吸収
  :mp_drainrecv  =>   0,  #   0 / MP 吸収回復
  :mp_paycost    =>  -1,  #  -1 / MP 消費
  :tp_damage     =>   1,  #   1 / TP 増加(ダメージ)
  :tp_charge     =>  -1,  #  -1 / TP チャージ(被ダメージ時の TP 増加)
  :tp_gain       =>   7,  #   7 / TP 得
  :tp_regenerate =>   1,  #   1 / TP 再生(スリップダメージ)
  :tp_paycost    =>  -1,  #  -1 / TP 消費
  # ステート/能力
  :add_state     =>   2,  #   2 / 有利なステートの付加
  :rem_state     =>   2,  #   2 / 有利なステートの解除
  :add_badstate  =>   2,  #   2 / 不利なステートの付加
  :rem_badstate  =>   2,  #   2 / 不利なステートの解除
  :add_buff      =>   3,  #   3 / 能力強化の付加
  :add_debuff    =>   3,  #   3 / 能力弱体の付加
  :rem_buff      =>   3,  #   3 / 能力強化/弱体の解除
  # 特殊
  :counter       =>   6,  #   6 / 反撃
  :reflection    =>   6,  #   6 / 反射
  :substitute    =>   4,  #   4 / 身代わり
  }
  # 0:跳ねるポップアップの動き(大)
  LARGE_MOVEMENT = {
  :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
                       :duration     =>   40,  :fadeout      =>  20 }
  # 1:跳ねるポップアップの動き(小)
  SMALL_MOVEMENT = {
  :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
                       :duration     =>   60,  :fadeout      =>  16 }
  # 2,3:上昇ポップアップの動き
  RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
                       :duration     =>   40,  :fadeout      =>   8 }
  # 4,5:スライドポップアップの動き
  SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
                       :duration     =>   50,  :fadeout      =>  32 }
  # 6,7:オーバーレイポップアップの動き
  OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }

  # :inirate      = 初速度                :gravity    = 重力加速度
  # :side_scatter = 左右移動のばらつき    :ref_height = 跳ね返り位置
  # :ref_factor   = 反発係数              :ref_count  = 跳ね返り回数
  # :duration     = 消え始めるまでの時間  :fadeout    = 消える速度
  # :rising_speed = 上昇速度              :x_speed    = 横移動速度
  # :line_spacing = ポップアップの行間
  
  #--------------------------------------------------------------------------
  # ● 設定:ユーザビリティ
  #--------------------------------------------------------------------------  
  # 効果範囲が 使用者/全体/ランダム のスキル・アイテムの対象確認を行う
  #  true = 有効 / false = 無効
  FIX_TARGET_CHECKE     = true   # 規定値:true
   
  # 防御コマンドの対象確認を行う     true = 有効 / false = 無効
  GUARD_TARGET_CHECKE   = true   # 規定値:true
  
  # アクターの対象選択を最適化する   true = 有効 / false = 無効
  SMART_TARGET_SELECT   = true   # 規定値:true
  
  # 対象選択のカーソル位置を記憶する true = 有効 / false = 無効
  LAST_TARGET           = true   # 規定値:true

  # パーティコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_PARTY_COMMAND    = true   # 規定値:true
  
  # アクターコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_ACTOR_COMMAND    = true   # 規定値:true
  
  # 敵キャラのインデックスを X 座標でソートする true = 有効 / false = 無効
  TROOP_X_SORT          = true   # 規定値:true
  
  # パーティコマンド入力回数を最適化する        true = 有効 / false = 無効
  PARTY_COMMAND_SKIP    = true   # 規定値:true
  
  #--------------------------------------------------------------------------
  # ● 設定:その他
  #--------------------------------------------------------------------------
  # スキルリストとアイテムリストを項目数に合わせてリサイズする
  #  true = 有効 / false = 無効
  FITTING_LIST          = true   # 規定値:true
   
  # バトラーの行動時の白フラッシュを強める          true = 有効 / false = 無効
  ENHANCED_WHITEN       = true   # 規定値:true
  
  # ダメージを受けた時の画面のシェイクを行わない    true = 有効 / false = 無効
  DISABLED_DAMAGE_SHAKE = true   # 規定値:true
  
  # 敵キャラの X 座標を画面サイズに合わせて修正する true = 有効 / false = 無効
  TROOP_X_SCREEN_FIX    = true   # 規定値:true
  
  # 敵キャラの Y 座標の調整
  TROOP_Y_OFFSET        = 0      # 規定値:0
  
  #
  # 設定ここまで お疲れ様でした。
  #
end
#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx11aconf] = 110 # version
p "OK:LNX11aconf_XPスタイルバトル#コンフィグ"[/pre]

[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11a_XPスタイルバトル
#  戦闘画面をRPGツクールXP準拠のものに変更します。
#
#  version   : 1.11 (13/06/19)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-9.html
#
#==============================================================================

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

module LNX11
  #--------------------------------------------------------------------------
  # ● 正規表現
  #--------------------------------------------------------------------------
  # アクター:バトラーグラフィック = "ファイル名"
  RE_BATTLER = /(?:バトラーグラフィック|battler_graphic)\s*=\s*"([^"]*)"/i
  # アイテム/スキル:使用時アニメ = アニメーションID
  RE_USE_ANIMATION = /(?:使用時アニメ|use_animation)\s*=\s*(\d+)/i
  # アイテム/スキル:ヘルプ説明 = "説明文"
  RE_SHORT_DESCRIPTION =/(?:ヘルプ説明|short_description)\s*=\s*"([^"]*)"/i
  # アイテム/スキル:ヘルプ非表示
  RE_USABLEITEM_NO_DISPLAY = /(?:ヘルプ非表示|no_display)/i
  # アイテム/スキル:使用時追加ウェイト = duration
  RE_DISPLAY_WAIT = /(?:使用時追加ウェイト|display_wait)\s*=\s*(\d+)/i
  # アイテム/スキル:終了時追加ウェイト = duration
  RE_END_WAIT = /(?:終了時追加ウェイト|end_wait)\s*=\s*(\d+)/i
  # 敵キャラ:通常攻撃アニメ = アニメーションID
  RE_ATK_ANIMATION = /(?:通常攻撃アニメ|atk_animation)\s*=\s*(\d+)/i
  # ステート:ステートアニメ = アニメーションID
  RE_STATE_ANIMATION = /(?:ステートアニメ|state_animation)\s*=\s*(\d+)/i
  # ステート:ポップアップ表示名 = "表示名"
  RE_STATE_DISPLAY = /(?:ポップアップ表示名|display_name)\s*=\s*"([^"]*)"/i
  # ステート:ポップアップ非表示
  RE_STATE_NO_DISPLAY = /(?:ポップアップ非表示|no_display)/i
  # ステート:付加ポップアップ非表示
  RE_STATE_ADD_NO_DISPLAY = /(?:付加ポップアップ非表示|add_no_display)/i
  # ステート:解除ポップアップ非表示
  RE_STATE_REM_NO_DISPLAY = /(?:解除ポップアップ非表示|remove_no_display)/i
  # ステート:有利なステート
  RE_STATE_ADVANTAGE = /(?:有利なステート|advantage_state)/i
  # ステート:ポップアップタイプ = type_id
  RE_STATE_TYPE = /(?:ポップアップタイプ|popup_type)\s*=\s*(\d+)/i
  # ステート:付加ポップアップタイプ = type_id
  RE_STATE_ADD_TYPE = /(?:付加ポップアップタイプ|add_popup_type)\s*=\s*(\d+)/i
  # ステート:解除ポップアップタイプ = type_id
  RE_STATE_REM_TYPE=/(?:解除ポップアップタイプ|remove_popup_type)\s*=\s*(\d+)/i
  # ステート:修飾文字非表示
  RE_STATE_NO_DECORATION = /(?:修飾文字非表示|no_decoration)/i
  # ステート:付加修飾文字非表示
  RE_STATE_ADD_NO_DECORATION = /(?:付加修飾文字非表示|add_no_decoration)/i
  # ステート:解除修飾文字非表示
  RE_STATE_REM_NO_DECORATION = /(?:解除修飾文字非表示|remove_no_decoration)/i
  # <<ver1.10>>
  # ステート:付加ポップアップ表示名 = "表示名"
  RE_STATE_ADD_DISPLAY =
  /(?:付加ポップアップ表示名|add_display_name)\s*=\s*"([^"]*)"/i
  # ステート:解除ポップアップ表示名 = "表示名"
  RE_STATE_REM_DISPLAY =
  /(?:解除ポップアップ表示名|remove_display_name)\s*=\s*"([^"]*)"/i
  #--------------------------------------------------------------------------
  # ● バトルステータス更新
  #--------------------------------------------------------------------------
  # LNX11.バトルステータス更新
  def self.battle_status_refresh
    $game_temp.battle_status_refresh
  end
  def self.バトルステータス更新
    self.battle_status_refresh
  end  
  #--------------------------------------------------------------------------
  # ● アクターエリア表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクターエリア表示
  def self.actor_area_show
    self.actor_show
    self.status_show
    self.actor_bg_show
  end
  def self.アクターエリア表示
    self.actor_area_show
  end
  # LNX11.アクターエリア非表示
  def self.actor_area_hide
    self.actor_hide
    self.status_hide
    self.actor_bg_hide
  end
  def self.アクターエリア非表示
    self.actor_area_hide
  end
  #--------------------------------------------------------------------------
  # ● アクター表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクター表示
  def self.actor_show
    $game_party.actor_invisible = false
  end
  def self.アクター表示
    self.actor_show
  end
  # LNX11.アクター非表示
  def self.actor_hide
    $game_party.actor_invisible = true
  end
  def self.アクター非表示
    self.actor_hide
  end
  #--------------------------------------------------------------------------
  # ● バトルステータス表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.バトルステータス表示
  def self.status_show
    $game_party.status_invisible = false
    self.battle_status_refresh
  end
  def self.バトルステータス表示
    self.status_show
  end
  # LNX11.バトルステータス非表示
  def self.status_hide
    $game_party.status_invisible = true
    self.battle_status_refresh
  end
  def self.バトルステータス非表示
    self.status_hide
  end
  #--------------------------------------------------------------------------
  # ● アクター背景表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクター背景表示
  def self.actor_bg_show
    $game_party.actor_bg_invisible = false
  end
  def self.アクター背景表示
    self.actor_bg_show
  end
  # LNX11.アクター背景非表示
  def self.actor_bg_hide
    $game_party.actor_bg_invisible = true
  end
  def self.アクター背景非表示
    self.actor_bg_hide
  end  
  #--------------------------------------------------------------------------
  # ● バトラーグラフィックのスクリプト指定
  #--------------------------------------------------------------------------
  # LNX11.バトラーグラフィック(id, filename)
  def self.battler_graphic(id ,filename)
    if id.is_a?(Numeric) && filename.is_a?(String)
      p "LNX11a:バトラーグラフィックを変更しました:ID#{id} #{filename}"
      $game_actors[id].battler_graphic_name = filename
    else
      errormes =  "LNX11a:バトラーグラフィック指定の引数が正しくありません。"
      p errormes, "LNX11a:バトラーグラフィックの指定は行われませんでした。"
      msgbox errormes
    end
  end
  def self.バトラーグラフィック(id ,filename)
    self.battler_graphic(id ,filename)
  end
  #--------------------------------------------------------------------------
  # ● 任意のポップアップを生成
  #--------------------------------------------------------------------------
  # LNX11.ポップアップ(battler, popup, type, color, deco)
  def self.make_popup(battler, popup, type = 0, color = :hp_damage, deco = nil)
    return unless $game_party.in_battle
    target = self.battler_search(battler)
    unless target.is_a?(Game_Battler)
      p "LNX11a:任意のポップアップの生成に失敗しました。バトラー指定が"
      p "LNX11a:間違っているか、バトラーが存在していない可能性があります。"
      return
    end
    $game_temp.popup_data.popup_custom(target, popup, type, color, deco)   
  end
  def self.ポップアップ(battler, popup, type=0, color=:hp_damage, deco=nil)
    self.make_popup(battler, popup, type, color, deco)
  end
  #--------------------------------------------------------------------------
  # ● バトラー指定
  #--------------------------------------------------------------------------
  def self.battler_search(val)
    if val.is_a?(String)
      # 名前指定
      a = ($game_party.members + $game_troop.members).find {|b| b.name == val }
      return a
    elsif val.is_a?(Array)
      # インデックス指定
      case val[0]
      when :actor ; return $game_party.members[val[1]]
      when :enemy ; return $game_troop.members[val[1]]
      else        ; return nil
      end
    else
      # オブジェクト
      return val
    end
  end
  #--------------------------------------------------------------------------
  # ● バトルログプッシュ
  #--------------------------------------------------------------------------
  # LNX11.バトルログ(text)
  def self.battle_log_push(text)
    return unless $game_party.in_battle
    case BATTLELOG_TYPE
    when 0..1 # バトルログ
      BattleManager.log_window.add_text(text)
    when 2 # 簡易ヘルプ表示
      BattleManager.helpdisplay_set(text, 0)
    end
  end
  def self.バトルログ(text)
    self.battle_log_push(text)
  end
  #--------------------------------------------------------------------------
  # ● バトルログ消去
  #--------------------------------------------------------------------------
  # LNX11.バトルログ消去
  def self.battle_log_clear
    return unless $game_party.in_battle
    case BATTLELOG_TYPE
    when 0 # バトルログ
      BattleManager.log_window.clear
    when 1 # 蓄積型
      BattleManager.log_window.clear
      $game_temp.battlelog_clear = true
      self.battle_wait(1)
    when 2 # 簡易ヘルプ
      BattleManager.helpdisplay_clear(0)
    end
  end
  def self.バトルログ消去
    self.battle_log_clear
  end
  #--------------------------------------------------------------------------
  # ● バトルウェイト
  #--------------------------------------------------------------------------
  # LNX11.バトルウェイト(duration)
  def self.battle_wait(duration)
    return unless $game_party.in_battle
    BattleManager.log_window.abs_wait(duration)
  end
  def self.バトルウェイト(duration)
    self.battle_wait(duration)
  end
  #--------------------------------------------------------------------------
  # ● 設定値
  #  ※ 設定を変更する場合、LNX11aconf を使用してください。
  #--------------------------------------------------------------------------
  # <<ver1.00>>
  if !$lnx_include[:lnx11aconf] ||
     $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 100
  DEFAULT_BATTLER_GRAPHIC = 0
  DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
  ACTOR_SCREEN_TONE       = false
  TP_POPUP_TYPE           = 1
  INDEXZERO_NO_POPUP      = true
  ACTOR_BACKGROUND        = 2
  ACTOR_BACKGROUND_HEIGHT = 112
  ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
  BATTLELOG_TYPE  =  1
  STORAGE_LINE_NUMBER     = 6
  STORAGE_LINE_HEIGHT     = 20
  STORAGE_UP_MESSAGE_TIME = 90
  STORAGE_TURNEND_CLEAR   = true
  STORAGE_OFFSET = {:x => 0, :y => 6}
  STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
  STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
  POPUP_ADD_WAIT          = 6
  HELPDISPLAY_TYPE        = 1
  HELPDISPLAT_WAIT        = 20
  HELPDISPLAT_END_WAIT    = 24
  HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
  MESSAGE_TYPE  =  2
  MESSAGE_WINDOW_BACKGROUND  = 1
  MESSAGE_WINDOW_POSITION    = 0
  MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
                  :defeat       => [120, false], :escape    => [120, false],
                  :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
  MESSAGE_WINDOW_ENEMY_NAMES = false
  LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)
  DROPITEM_SE = RPG::SE.new("Item3", 80, 125)
  ACTOR_CENTERING  =  true
  ACTOR_SPACING_ADJUST = 32
  ACTOR_OFFSET  = {:x => -16, :y => 0}
  ACTOR_PADDING = {:side => 4, :bottom => 8}
  SCREEN_ANIMATION_OFFSET = 128
  STATUS_OFFSET = {:x => 64, :y => -12}
  STATUS_SIDE_PADDING   = 6
  STATUS_WIDTH          = 72
  STATUS_AUTOADJUST     = true
  STATUS_LINE_HEIGHT    = 22
  STATUS_NAME_SIZE      = 20
  STATUS_PARAM_SIZE     = 23
  STATUS_GAUGE_OPACITY  = 192
  ACTOR_COMMAND_NOSCROLL   = true
  ACTOR_COMMAND_HORIZON    = false
  ACTOR_COMMAND_ALIGNMENT  = 0
  ACTOR_COMMAND_WIDTH      = 128
  ACTOR_COMMAND_POSITION   = 0
  ACTOR_COMMAND_Y_POSITION = 0
  ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16}
  PARTY_COMMAND_HORIZON   = true
  PARTY_COMMAND_ALIGNMENT = 1
  PARTY_COMMAND_WIDTH     = Graphics.width
  PARTY_COMMAND_XY        = {:x => 0, :y => 0}
  CURSOR_NAME       = ""
  CURSOR_TONE     = Tone.new(-34, 0, 68)
  CURSOR_ANI_SPEED  = 3
  CURSOR_SPEED      = 3
  CURSOR_BLINK      = true
  CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
  CURSOR_OFFSET     = {:x => 0, :y => 0}
  HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
  HELP_PARAM_WIDTH    = 72
  RANDOMSCOPE_DISPLAY = 1
  ACTOR_POPUP_POSITION   = 3
  ENEMY_POPUP_POSITION   = 1
  LEVELUP_POPUP_POSITION = 3
  ACTOR_POPUP_Y     =  -100
  LEVELUP_POPUP_Y   =  -112
  NUMBER_FONT   =  ["Arial Black", "VL Gothic"]
  TEXT_FONT     =  ["Arial Black", "VL Gothic"]
  TEXT_FONT_MCS =  ["VL Gothic"]
  LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
  TEXT_SIZERATE_MCS = 0.9
  DECORATION_NUMBER = {
  :critical    => ["CRITICAL", 8], :weakness    => ["WEAKNESS", 8],
  :resist      => ["RESIST"  , 8], :mp_damage   => ["\mp"     , 4],
  :mp_plus     => ["\mp+"    , 4], :mp_minus    => ["\mp-"    , 4],
  :tp_plus     => ["\tp+"    , 4], :tp_minus    => ["\tp-"    , 4]}
  DECORATION_TEXT = {
  :add_state   => "+%s",      :rem_state   => "-%s",
  :add_buff    => "%s UP",    :add_debuff  => "%s DOWN",
  :rem_buff    => "-%s Buff"}
  POPUP_VOCAB = {
  :miss        => "MISS!",      :counter     => "Counter",
  :reflection  => "Reflection", :substitute  => "Substitute",
  :levelup     => "LEVELUP!"}
  POPUP_VOCAB_PARAMS = [
  "MAX\hp","MAX\mp","ATK","DEF","MATK","MDEF","AGI","LUCK"]
  POPUP_COLOR = {
  :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  }
  POPUP_TYPE = {
  :miss          =>   0,:hp_damage     =>   0,:hp_slipdamage =>   1,
  :hp_recovery   =>   0,:hp_regenerate =>   1,:hp_drain      =>   0,
  :hp_drainrecv  =>   0,:mp_damage     =>   0,:mp_slipdamage =>   1,
  :mp_recovery   =>   0,:mp_regenerate =>   1,:mp_drain      =>   0,
  :mp_drainrecv  =>   0,:mp_paycost    =>  -1,:tp_damage     =>   1,
  :tp_charge     =>  -1,:tp_gain       =>   7,:tp_regenerate =>   1,
  :tp_paycost    =>  -1,:add_state     =>   2,:rem_state     =>   2,
  :add_badstate  =>   2,:rem_badstate  =>   2,:add_debuff    =>   3,
  :rem_buff      =>   3,:counter       =>   6,:reflection    =>   6,
  :substitute    =>   4,}
  LARGE_MOVEMENT = {
  :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
                       :duration     =>   40,  :fadeout      =>  20 }
  SMALL_MOVEMENT = {
  :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
                       :duration     =>   60,  :fadeout      =>  16 }
  RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
                       :duration     =>   40,  :fadeout      =>   8 }
  SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
                       :duration     =>   50,  :fadeout      =>  32 }
  OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }
  FIX_TARGET_CHECKE     = true
  GUARD_TARGET_CHECKE   = true
  SMART_TARGET_SELECT   = true
  LAST_TARGET           = true
  LAST_PARTY_COMMAND    = true
  LAST_ACTOR_COMMAND    = true
  TROOP_X_SORT          = true
  PARTY_COMMAND_SKIP    = true
  FITTING_LIST          = true
  ENHANCED_WHITEN       = true
  DISABLED_DAMAGE_SHAKE = true
  TROOP_X_SCREEN_FIX    = true
  TROOP_Y_OFFSET        = 0
  end
  # <<ver1.10>>
  if !$lnx_include[:lnx11aconf] ||
    $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 110
  LARGE_NUMBER_NAME = ""
  SMALL_NUMBER_NAME = ""
  LARGE_BUFFS_NAME  = ""
  SMALL_BUFFS_NAME  = ""
  end
end

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

class Popup_Data
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@make_methods = {} # ポップアップ作成メソッドのハッシュ
  #--------------------------------------------------------------------------
  # ● 定数(ポップアップのタイプID)
  #--------------------------------------------------------------------------
  SPRING_LARGE  = 0
  SPRING_SMALL  = 1
  RISING_LARGE  = 2
  RISING_SMALL  = 3
  SLIDING_LARGE = 4
  SLIDING_SMALL = 5
  OVERLAY_LARGE = 6
  OVERLAY_SMALL = 7
  LEVELUP       = :levelup
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :type       # ポップアップのタイプ
  attr_accessor :popup      # 表示する内容
  attr_accessor :popup_size # ポップアップの大きさ
  attr_accessor :color      # 色
  attr_accessor :deco       # 修飾文字
  attr_accessor :battler    # ポップアップするバトラー
  attr_accessor :delay      # 表示開始までの時間
  attr_accessor :viewport   # ビューポート
  attr_accessor :popup_wait # ポップアップウェイト
  attr_accessor :buff_data  # 能力強化/弱体 <<ver1.10>>
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @sprites = []
    @viewport = Viewport.new
    @viewport.z = 120 # ポップアップの Z 座標
    spb = Sprite_PopupBase.new
    spb.create_number
    spb.dispose
    set_methods
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ生成メソッドの登録
  #--------------------------------------------------------------------------
  def set_methods
    @@make_methods[SPRING_LARGE]  = method(:makeup_spring_large)
    @@make_methods[SPRING_SMALL]  = method(:makeup_spring_small)
    @@make_methods[RISING_LARGE]  = method(:makeup_rising_large)
    @@make_methods[RISING_SMALL]  = method(:makeup_rising_small)
    @@make_methods[SLIDING_LARGE] = method(:makeup_sliding_large)
    @@make_methods[SLIDING_SMALL] = method(:makeup_sliding_small)
    @@make_methods[OVERLAY_LARGE] = method(:makeup_overlay_large)
    @@make_methods[OVERLAY_SMALL] = method(:makeup_overlay_small)
    @@make_methods[LEVELUP]       = method(:makeup_levelup)
  end
  #--------------------------------------------------------------------------
  # ● スプライト解放
  #--------------------------------------------------------------------------
  def dispose
    @sprites.each {|sprite| sprite.dispose}
    @viewport.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    @sprites.each do |sprite|
      sprite.update
      @sprites.delete(sprite) if sprite.disposed?
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @type  = 0
    @popup = nil
    @popup_size = :large
    @color = :hp_damage
    @deco = ["", -1] # [テキスト, テキストの位置]
    @battler = nil
    @delay = 0
    @popup_wait = false
    # <<ver1.10>> 能力強化/弱体ポップアップを画像で表示する際に利用
    @buff_data = [-1, -1] # [能力, 強化or弱体or解除]
  end
  #--------------------------------------------------------------------------
  # ● ポップアップを生成
  #--------------------------------------------------------------------------
  def makeup
    if @@make_methods[@type]
      @@make_methods[@type].call
      @popup_wait = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ポップアップウェイト
  #  バトルログタイプが [2:ヘルプ表示] の場合のみ実行されます。
  #--------------------------------------------------------------------------
  def add_wait
    return if LNX11::BATTLELOG_TYPE != 2 || !@popup_wait
    LNX11::POPUP_ADD_WAIT.times {BattleManager.log_window.abs_wait(1)}
    @popup_wait = false
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ生成メソッド
  #  これらのメソッドを @@make_methods に登録して呼び出します。
  # これはポップアップタイプの拡張を容易にするための仕様です。
  #--------------------------------------------------------------------------
  def makeup_spring_large
    # @type   0 : 跳ねるポップアップ(大)
    @popup_size = :large
    @sprites.push(Sprite_PopupSpring.new(self))
  end
  def makeup_spring_small
    # @type   1 : 跳ねるポップアップ(小)
    @popup_size = :small
    @delay = @battler.popup_delay[1]
    @sprites.push(Sprite_PopupSpring.new(self))
  end
  def makeup_rising_large
    # @type   2 : ゆっくり上昇(大)
    @popup_size = :large
    @delay = @battler.popup_delay[2]
    @sprites.push(Sprite_PopupRising.new(self))
  end
  def makeup_rising_small
    # @type   3 : ゆっくり上昇(小)
    @popup_size = :small      
    @delay = @battler.popup_delay[2]
    @sprites.push(Sprite_PopupRising.new(self))
  end
  def makeup_sliding_large
    # @type   4 : スライド(大)
    @popup_size = :large
    @delay = @battler.popup_delay[3]
    @sprites.push(Sprite_PopupSliding.new(self))
  end
  def makeup_sliding_small
    # @type   5 : スライド(小)
    @popup_size = :small
    @delay = @battler.popup_delay[3]
    @sprites.push(Sprite_PopupSliding.new(self))      
  end
  def makeup_overlay_large
    # @type   6 : オーバーレイ(大)
    @popup_size = :large
    @sprites.push(Sprite_PopupOverlay.new(self))
  end
  def makeup_overlay_small
    # @type   7 : オーバーレイ(小)
    @popup_size = :small
    @sprites.push(Sprite_PopupOverlay.new(self))
  end
  def makeup_levelup
    # @type :levelup : レベルアップ
    @battler.popup_delay[3] = 0
    @popup_size = :large
    @sprites.push(Sprite_PopupLevelUp.new(self))
  end
  #--------------------------------------------------------------------------
  # ● TP のポップアップが有効か?
  #--------------------------------------------------------------------------
  def tp_popup_enabled?(target)
    return false if !$data_system.opt_display_tp
    return true  if LNX11::TP_POPUP_TYPE == 0 # すべてポップアップ
    return true  if LNX11::TP_POPUP_TYPE == 1 && target.actor? # アクターのみ
    false # ポップアップしない
  end
  #--------------------------------------------------------------------------
  # ● 任意のポップアップ
  #--------------------------------------------------------------------------
  def popup_custom(target, popup, type = 0, color = :hp_damage, deco = nil)
    refresh
    @battler = target
    @popup = popup
    type = LNX11::POPUP_TYPE[type] if type.is_a?(Symbol)
    @type = type
    @color = color
    @deco = LNX11::DECORATION_NUMBER[deco] if deco.is_a?(Symbol)
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● レベルアップのポップアップ
  #--------------------------------------------------------------------------
  def popup_levelup(target)
    # 戦闘に参加している場合のみポップアップ
    return unless $game_party.battle_members.include?(target)
    refresh
    @type = :levelup
    @battler = target
    @popup = LNX11::POPUP_VOCAB[:levelup]
    @color = :levelup
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● 単一テキストのポップアップ
  #--------------------------------------------------------------------------
  def popup_text(target, type)
    refresh
    @type = LNX11::POPUP_TYPE[type]
    @battler = target
    @popup = LNX11::POPUP_VOCAB[type]
    @color = type
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● ミスのポップアップ
  #--------------------------------------------------------------------------
  def popup_miss(target, item)
    refresh
    @type = LNX11::POPUP_TYPE[:miss]
    @battler = target
    @popup = LNX11::POPUP_VOCAB[:miss]
    @color = :hp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● HP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_hp_damage(target, item)
    return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
    refresh
    @popup = target.result.hp_damage
    @battler = target
    if target.result.hp_drain > 0
      # 被吸収
      @type = LNX11::POPUP_TYPE[:hp_drain]
      # 弱点/耐性
      if target.result.element_rate > 1
        @deco = LNX11::DECORATION_NUMBER[:weakness]
        @color = :weakness
      elsif target.result.element_rate < 1
        @deco = LNX11::DECORATION_NUMBER[:resist]
        @color = :resist
      else
        @color = :hp_damage
      end
    elsif target.result.hp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:hp_damage]
      @color = :hp_damage
      if target.result.critical
        # クリティカル
        @deco = LNX11::DECORATION_NUMBER[:critical]
        @color = :critical
      end
      # 弱点/耐性
      if target.result.element_rate > 1
        @deco = LNX11::DECORATION_NUMBER[:weakness]
        @color = :weakness if @color != :critical
      elsif target.result.element_rate < 1
        @deco = LNX11::DECORATION_NUMBER[:resist]
        @color = :resist if @color != :critical
      end
    elsif target.result.hp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:hp_recovery]
      @color = :hp_recovery
    else
      # 0 ダメージ
      @type = LNX11::POPUP_TYPE[:hp_damage]
      @color = :hp_damage
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_mp_damage(target, item)
    return if target.dead? || target.result.mp_damage == 0
    refresh
    @popup = target.result.mp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[:mp_damage]
    if target.result.mp_drain > 0
      # 被吸収
      @type = LNX11::POPUP_TYPE[:mp_drain]
      @color = :mp_damage
    elsif target.result.mp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:mp_damage]
      @color = :mp_damage
    elsif target.result.mp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:mp_recovery]
      @color = :mp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_tp_damage(target, item)
    return unless tp_popup_enabled?(target)
    return if target.dead? || target.result.tp_damage == 0
    refresh
    @popup = target.result.tp_damage
    @battler = target
    deco = target.result.tp_damage > 0 ? :tp_minus : :tp_plus
    @deco = LNX11::DECORATION_NUMBER[deco]
    @type = LNX11::POPUP_TYPE[:tp_damage]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● HP 吸収回復
  #--------------------------------------------------------------------------
  def popup_hp_drain(target, hp_drain)
    return if hp_drain == 0
    refresh
    @popup = hp_drain
    @battler = target
    @type = LNX11::POPUP_TYPE[:hp_drainrecv]
    @color = :hp_recovery
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP 吸収回復
  #--------------------------------------------------------------------------
  def popup_mp_drain(target, mp_drain)
    return if mp_drain == 0
    refresh
    @popup = mp_drain
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[:mp_damage]
    @type = LNX11::POPUP_TYPE[:mp_drainrecv]
    @color = :mp_recovery
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● ステート付加のポップアップ
  #--------------------------------------------------------------------------
  def popup_added_states(target)
    refresh
    @battler = target
    target.result.added_state_objects.each do |state|
      next if state.id == target.death_state_id
      next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
      next if state.add_no_display?      
      if state.add_no_decoration?
        @popup = state.add_display_name
      else
        @popup = sprintf(LNX11::DECORATION_TEXT[:add_state],
                         state.add_display_name)
      end
      type = state.advantage? ? :add_state : :add_badstate
      if state.add_popup_type
        @type = state.add_popup_type
      else
        @type = LNX11::POPUP_TYPE[type]
      end
      @color = type
      # ポップアップ作成
      makeup
    end
  end
  #--------------------------------------------------------------------------
  # ● ステート解除のポップアップ
  #--------------------------------------------------------------------------
  def popup_removed_states(target)
    refresh
    @type = LNX11::POPUP_TYPE[:rem_badstate]
    @battler = target
    target.result.removed_state_objects.each do |state|
      next if state.id == target.death_state_id
      next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
      next if state.remove_no_display?
      if state.remove_no_decoration?
        @popup = state.remove_display_name
      else
        @popup = sprintf(LNX11::DECORATION_TEXT[:rem_state],
                         state.remove_display_name)
      end
      type = state.advantage? ? :rem_state : :rem_badstate
      if state.remove_popup_type
        @type = state.remove_popup_type
      else
        @type = LNX11::POPUP_TYPE[type]
      end
      @color = type
      # ポップアップ作成
      makeup
    end
  end
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体のポップアップ
  #--------------------------------------------------------------------------
  def popup_buffs(target, buffs, fmt)
    return if buffs.empty?
    refresh
    @battler = target
    case fmt
    when Vocab::BuffAdd
      buffdeco = LNX11::DECORATION_TEXT[:add_buff]
      @type = LNX11::POPUP_TYPE[:add_buff]
      @color = :add_buff
      @buff_data[1] = 0
    when Vocab::DebuffAdd
      buffdeco = LNX11::DECORATION_TEXT[:add_debuff]
      @type = LNX11::POPUP_TYPE[:add_debuff]
      @color = :add_debuff
      @buff_data[1] = 1
    when Vocab::BuffRemove
      buffdeco = LNX11::DECORATION_TEXT[:rem_buff]
      @type = LNX11::POPUP_TYPE[:rem_buff]
      @color = :rem_buff
      @buff_data[1] = 2
    end
    buffs.each do |param_id|
      @popup = sprintf(buffdeco, LNX11::POPUP_VOCAB_PARAMS[param_id])
      @buff_data[0] = param_id
      # ポップアップ作成
      makeup
      @popup_wait = false
    end
  end
  #--------------------------------------------------------------------------
  # ● HP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_hp(target, hp_damage, paycost = false)
    return if hp_damage == 0
    refresh
    @popup = hp_damage
    @battler = target
    if hp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:hp_slipdamage]
      @color = :hp_damage
    elsif hp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:hp_regenerate]
      @color = :hp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_mp(target, mp_damage, paycost = false)
    return if mp_damage == 0
    refresh
    @popup = mp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[mp_damage > 0 ? :mp_minus : :mp_plus]
    if mp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_slipdamage]
      @color = :mp_damage
    elsif mp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_regenerate]
      @color = :mp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_tp(target, tp_damage, paycost = false)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[paycost ? :tp_paycost : :tp_regenerate]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP チャージ
  #--------------------------------------------------------------------------
  def popup_tp_charge(target, tp_damage)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[:tp_charge]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP 得
  #--------------------------------------------------------------------------
  def popup_tp_gain(target, tp_damage)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[:tp_gain]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
end

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

class Sprite_PopupBase < Sprite
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@cache_number = []
  @@cache_text   = {}
  @@w = []
  @@h = []
  @@priority = 0
  @@count    = 0
  @@buf_bitmap = nil
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  NUMBER_COLOR_SIZE = 8
  NUMBERS    = [0,1,2,3,4,5,6,7,8,9]
  COLOR_KEYS = LNX11::POPUP_COLOR.keys
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     data : ポップアップデータ
  #--------------------------------------------------------------------------
  def initialize(data = nil)
    if data == nil || !data.battler.battle_member?
      # 非表示のポップアップ
      super(nil)
      @remove = true
      return
    end
    # ポップアップデータを適用
    super(data.viewport)
    @battler = data.battler # ポップアップを表示するバトラー
    @delay   = data.delay   # ディレイ(遅延) ※サブクラスによって扱いが違います
    @popup_size = data.popup_size # ポップアップの大きさ 大/小
    # 基本設定
    @duration = 60  # 消え始める時間
    @fadeout  = 16  # 消える速さ
    @rx = ry  = 0   # XY座標
    # Z座標
    @rz = base_z * 128 + priority
    popup_add
    self.visible = false
    # ポップアップデータからビットマップを作成
    if data.popup.is_a?(Numeric)
      # ダメージ値
      self.bitmap = number(data.popup, data.color, data.popup_size, data.deco)
    elsif data.popup.is_a?(String)
      # テキスト
      self.bitmap = text(data.popup, data.color,
                         data.popup_size, data.buff_data)
    end
    # 位置設定
    self.ox = self.width  / 2
    self.oy = self.height / 2
    set_position
    start
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    popup_remove
    terminate
    self.bitmap.dispose if self.bitmap
    super
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if removed? || delay?
    update_popup
    update_xy
    @duration -= 1
    self.opacity -= @fadeout if @duration <= 0
    dispose if self.opacity == 0
  end
  #--------------------------------------------------------------------------
  # ● 開始処理(サブクラスで定義)
  #--------------------------------------------------------------------------
  def start
  end
  #--------------------------------------------------------------------------
  # ● 終了処理(サブクラスで定義)
  #--------------------------------------------------------------------------
  def terminate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(サブクラスで定義)
  #--------------------------------------------------------------------------
  def update_popup
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    0
  end
  #--------------------------------------------------------------------------
  # ● ポップアップのプライオリティを返す
  #  同一Z座標のポップアップで、後から生成されたものが手前に表示されるように
  # Z座標の修正値をクラス変数で管理しています。
  #--------------------------------------------------------------------------
  def priority
    @@priority * 2
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ追加
  #--------------------------------------------------------------------------
  def popup_add
    @@priority += 1
    @@count += 1
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ消去
  #--------------------------------------------------------------------------
  def popup_remove
    @remove = true
    @@count -= 1
    @@priority = 0 if @@count <= 0
  end
  #--------------------------------------------------------------------------
  # ● ディレイが残っている?
  #  サブクラスの update メソッドで使用します。
  #--------------------------------------------------------------------------
  def delay?
    @delay -= 1
    self.visible = (@delay <= 0)
    !self.visible
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ消去済み?
  #--------------------------------------------------------------------------
  def removed?
    @remove
  end  
  #--------------------------------------------------------------------------
  # ● 座標更新
  #--------------------------------------------------------------------------
  def update_xy
    self.x = @rx
    self.y = @ry
    self.z = @rz
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ位置の設定
  #--------------------------------------------------------------------------
  def set_position
    @rx = @battler.screen_x
    if @battler.actor?
      pos = LNX11::ACTOR_POPUP_POSITION
    else
      pos = [LNX11::ENEMY_POPUP_POSITION, 2].min
    end
    case pos
    when 0 ; @ry = @battler.screen_y        # 足元
    when 1 ; @ry = @battler.screen_y_center # 中心
    when 2 ; @ry = @battler.screen_y_top    # 頭上
    when 3 ; @ry = Graphics.height + LNX11::ACTOR_POPUP_Y # Y座標統一(アクター)
    end
  end
  #--------------------------------------------------------------------------
  # ● 描画するテキストの矩形を取得
  #--------------------------------------------------------------------------
  def text_size(str, name, size, bold = false)
    @@buf_bitmap = Bitmap.new(4, 4) if !@@buf_bitmap || @@buf_bitmap.disposed?
    @@buf_bitmap.font.name = name
    @@buf_bitmap.font.size = size
    @@buf_bitmap.font.bold = bold
    return @@buf_bitmap.text_size(str)
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップの取得
  #--------------------------------------------------------------------------
  def bitmap_number(size = :large)
    return @@cache_number[size == :large ? 0 : 1]
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップキャッシュの作成
  #--------------------------------------------------------------------------
  def create_number
    return if @@cache_number[0] && !@@cache_number[0].disposed?
    n_index = NUMBER_COLOR_SIZE
    @@cache_number.clear
    colors = LNX11::POPUP_COLOR.values # 色
    name = LNX11::NUMBER_FONT
    # 大・小の 2 パターンを作成する(ループ)
    [LNX11::LARGE_NUMBER, LNX11::SMALL_NUMBER].each_with_index do |n_size, i|
      next if get_number(i)
      size = n_size[:fontsize]
      # 数字の幅・高さ
      w = NUMBERS.collect{|n| text_size(n.to_s, name, size).width}.max + 4
      nh = NUMBERS.collect{|n| text_size(n.to_s, name, size).height}.max
      h = n_size[:line_height]
      @@w = w
      @@h = h
      # ビットマップ作成
      bitmap = Bitmap.new(w * NUMBERS.size, h * [colors.size, n_index].min)
      bitmap.font.name = LNX11::NUMBER_FONT
      bitmap.font.size = n_size[:fontsize]
      y = ((h - nh) / 2) - 1
      # 色ごとに分けて描画する(ループ)
      n_index.times do |col|
        # 色を変更
        bitmap.font.color.set(colors[col][0])
        bitmap.font.out_color.set(colors[col][1])
        # 文字ごとに分けて描画(ループ)
        NUMBERS.size.times do |num|
          bitmap.draw_text(num * w, (col * h) + y, w, nh, NUMBERS[num], 2)
        end
      end
      @@cache_number.push(bitmap)
    end
    p "LNX11a:数字ビットマップのキャッシュを作成しました。"
    # 数字ビットマップを表示する(テスト用)
    # s = Sprite.new
    # s.z = 1000000
    # s.bitmap = @@cache_number[1] # 0 or 1
    # loop do Graphics.update end
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップの取得
  #--------------------------------------------------------------------------
  def get_number(i)
    case i
    when 0 # 大
      return false if LNX11::LARGE_NUMBER_NAME.empty?
      bitmap = Cache.system(LNX11::LARGE_NUMBER_NAME)
    when 1 # 小
      return false if LNX11::SMALL_NUMBER_NAME.empty?
      bitmap = Cache.system(LNX11::SMALL_NUMBER_NAME)
    end
    @@cache_number.push(bitmap)
    @@w = bitmap.width / NUMBERS.size
    @@h = bitmap.height / NUMBER_COLOR_SIZE
    true
  end
  #--------------------------------------------------------------------------
  # ● ダメージ数を描画したビットマップの取得
  #--------------------------------------------------------------------------
  def number(num, color, size = :large, deco = nil)
    # 数値を文字列の配列にする
    numbers = (num.abs.to_s).split(//)
    # 色番号を取得
    color_index = COLOR_KEYS.index(color)
    # ポップアップサイズを設定
    n_bitmap = bitmap_number(size)
    if size == :large
      n_size = LNX11::LARGE_NUMBER
      i = 0
    else
      n_size = LNX11::SMALL_NUMBER
      i = 1
    end
    spacing = n_size[:spacing]
    w = @@w
    h = @@h
    # ダメージ値のビットマップサイズ
    @bw = w * numbers.size + spacing * (numbers.size - 1)
    @bh = h
    # 修飾文字の描画
    @offset_x = @offset_y = 0
    text_bitmap = deco_text(deco,color,n_size[:fontsize]) if deco[1] >= 0
    # ビットマップを作成
    bitmap = Bitmap.new(@bw, @bh)
    # 塗りつぶし(テスト用)
    # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
    # ダメージ値を描画
    rect = Rect.new(0, h * color_index, w, h)
    numbers.size.times do |n|
      rect.x = numbers[n].to_i * w
      bitmap.blt(w * n + spacing * n + @offset_x, @offset_y, n_bitmap, rect)
    end
    # 修飾文字の描画をコールバック
    @decoblt.call(bitmap) if @decoblt
    @decoblt = nil
    # ビットマップを返す
    bitmap
  end
  #--------------------------------------------------------------------------
  # ● 修飾文字の描画
  #--------------------------------------------------------------------------
  def deco_text(deco, color, sizerate)
    # 元の幅・高さ
    ow = @bw
    oh = @bh
    case deco[1]   
    when 2 # ダメージ値の下
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :top_bottom)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height * 0.8
      # 最終的なビットマップのサイズ
      @bw = [@bw, tw].max
      @bh += th
      # ダメージ値の描画位置の修正
      @offset_x = (@bw - ow) / 2
      @offset_y = 0
      # 修飾文字の描画位置を設定
      x = (@bw - tw) / 2
      y = oh * 0.8
    when 4 # ダメージ値の左
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :left_right)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height
      # 最終的なビットマップのサイズ
      @bw += tw
      @bh = [@bh, th].max
      # ダメージ値の描画位置の修正
      @offset_x = tw
      @offset_y = (@bh - oh) / 2
      # 修飾文字の描画位置を設定
      x = 2
      y = (@bh - th) / 2
    when 6 # ダメージ値の右
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :left_right)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height
      # 最終的なビットマップのサイズ
      @bw += tw
      @bh = [@bh, th].max
      # ダメージ値の描画位置の修正
      @offset_x = 0
      @offset_y = (@bh - oh) / 2
      # 修飾文字の描画位置を設定
      x = ow
      y = (@bh - th) / 2
    when 8 # ダメージ値の上
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :top_bottom)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height * 0.8
      # 最終的なビットマップのサイズ
      @bw = [@bw, tw].max
      @bh += th
      # ダメージ値の描画位置の修正
      @offset_x = (@bw - ow) / 2
      @offset_y = @bh - oh
      # 修飾文字の描画位置を設定
      x = (@bw - tw) / 2
      y = 0
    end
    # 修飾文字の描画(コールバック)
    @decoblt = Proc.new {|bitmap|
    bitmap.blt(x, y, text_bitmap, text_bitmap.rect)
    text_bitmap.dispose}
    return text_bitmap
  end
  #--------------------------------------------------------------------------
  # ● 修飾文字のサイズ
  #--------------------------------------------------------------------------
  def decosize(text, size, pos)
    if text.length != text.bytesize
      return size * LNX11::TEXT_SIZERATE[pos] * LNX11::TEXT_SIZERATE_MCS
    else
      return size * LNX11::TEXT_SIZERATE[pos]
    end
  end
  #--------------------------------------------------------------------------
  # ● テキストを描画したビットマップの取得
  #  ステートやダメージ値の修飾文字の描画に使用します。
  #--------------------------------------------------------------------------
  def text(text, color, size = :large, buff_data = [-1, -1])
    # キャッシュがあればそれを返す(無ければ作成)
    key = text + color.to_s + size.to_s
    if @@cache_text[key] && !@@cache_text[key].disposed?
      return @@cache_text[key].clone
    end
    # 用語の置き換え
    text.gsub!("\hp") { Vocab::hp_a } if text.include?("\hp")
    text.gsub!("\mp") { Vocab::mp_a } if text.include?("\mp")
    text.gsub!("\tp") { Vocab::tp_a } if text.include?("\tp")
    # <<ver1.10>> テキストの頭に _ があれば対応する画像ファイルを参照する
    if text[/^[\_]./]
      bitmap = get_text_bitmap(text, color, size)
      # キャッシュに保存
      @@cache_text[key] = bitmap
      # ビットマップを返す
      return bitmap.clone
    end
    # <<ver1.10>>
    # 能力強化/弱体のポップアップで、ファイル名が指定されていればそれを返す
    if buff_data[0] >= 0 &&
      (size == :large && !LNX11::LARGE_BUFFS_NAME.empty?) ||
      (size == :small && !LNX11::SMALL_BUFFS_NAME.empty?)
      bitmap = get_buff_bitmap(buff_data, size)
      # キャッシュに保存
      @@cache_text[key] = bitmap
      # ビットマップを返す
      return bitmap.clone
    end
    # テキストにマルチバイト文字があれば日本語用フォントを使う
    if text.length != text.bytesize
      fontname = LNX11::TEXT_FONT_MCS
      sizerate = LNX11::TEXT_SIZERATE[:normal] * LNX11::TEXT_SIZERATE_MCS
    else
      fontname = LNX11::TEXT_FONT
      sizerate = LNX11::TEXT_SIZERATE[:normal]
    end
    # ポップアップサイズを設定
    case size
    when :large ; fontsize = LNX11::LARGE_NUMBER[:fontsize] * sizerate
    when :small ; fontsize = LNX11::SMALL_NUMBER[:fontsize] * sizerate
    else        ; fontsize = size
    end
    # テキストサイズ計算
    rect = text_size(text, fontname, fontsize)
    rect.width += 2
    # ビットマップを作成
    bitmap = Bitmap.new(rect.width, rect.height)
    # 塗りつぶし(テスト用)
    # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
    # フォント設定
    bitmap.font.name = fontname
    bitmap.font.size = fontsize
    bitmap.font.color.set(LNX11::POPUP_COLOR[color][0])
    bitmap.font.out_color.set(LNX11::POPUP_COLOR[color][1])
    # テキスト描画
    bitmap.draw_text(rect, text, 1)
    # キャッシュに保存
    @@cache_text[key] = bitmap
    # ビットマップを返す
    bitmap.clone
  end
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体ビットマップの取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def get_buff_bitmap(buff_data, size)
    case size
    when :large ; src_bitmap = Cache.system(LNX11::LARGE_BUFFS_NAME)
    when :small ; src_bitmap = Cache.system(LNX11::SMALL_BUFFS_NAME)
    end
    src_rect = Rect.new
    src_rect.width  = src_bitmap.width  / 2
    src_rect.height = src_bitmap.height / 12
    src_rect.x = (buff_data[0] / 4) * src_rect.width
    src_rect.y = (buff_data[0] % 4) * src_rect.height * 3 +
                  buff_data[1] * src_rect.height
    bitmap = Bitmap.new(src_rect.width, src_rect.height)
    bitmap.blt(0, 0, src_bitmap, src_rect)
    bitmap
  end
  #--------------------------------------------------------------------------
  # ● テキストビットマップの取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def get_text_bitmap(text, color, size)
    # クリティカルカラーかつ、弱点/耐性なら参照するビットマップを変更
    if LNX11::POPUP_COLOR[color] == LNX11::POPUP_COLOR[:critical] &&
      (text == LNX11::DECORATION_NUMBER[:weakness][0] ||
       text == LNX11::DECORATION_NUMBER[:resist][0])
      # ファイル名に _critcolor を加える
      text += "_critcolor"
    end
    # MPダメージ/回復(符号なし)なら参照するビットマップを変更
    if text == LNX11::DECORATION_NUMBER[:mp_damage][0]
      # カラーに応じてファイル名を変更
      case LNX11::POPUP_COLOR[color]
      when LNX11::POPUP_COLOR[:mp_damage]   ; text += "_damage"
      when LNX11::POPUP_COLOR[:mp_recovery] ; text += "_recovery"
      end
    end
    # popup_xxxxxx_(large or small)
    Cache.system("popup" + text + (size == :large ? "_large" : "_small"))
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupSpring
#------------------------------------------------------------------------------
#  通常の跳ねるポップアップ。
#==============================================================================

class Sprite_PopupSpring < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    14
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    # ディレイ設定 同じタイプのポップアップが重ならないようにする
    if @popup_size == :small
      self.oy -= @battler.popup_delay[1]
      @delay_clear = (@delay == 0)
      dy = self.bitmap.height * 0.8
      @battler.popup_delay[1] += dy
      @delay = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------  
  def terminate
    # 一番上のポップアップなら、ディレイを初期化する
    @battler.popup_delay[1] = 0 if @delay_clear
  end
  #--------------------------------------------------------------------------
  # ● 投射運動の設定
  #--------------------------------------------------------------------------
  def set_movement
    if @popup_size == :large
      movement = LNX11::LARGE_MOVEMENT
    else
      movement = LNX11::SMALL_MOVEMENT
    end
    @fall       = -movement[:inirate]
    @gravity    =  movement[:gravity]
    @side       =  movement[:side_scatter] * rand(0) * (rand(2) == 0 ? -1 : 1)
    @ref_move   =  movement[:ref_height]
    @ref_factor =  movement[:ref_factor]
    @ref_count  =  movement[:ref_count]
    @duration   =  movement[:duration]
    @fadeout    =  movement[:fadeout]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    update_freefall
  end
  #--------------------------------------------------------------------------
  # ● 投射運動の更新
  #--------------------------------------------------------------------------
  def update_freefall
    if @ref_count >= 0
      # X:左右移動
      @rx += @side
      # Y:自由落下
      @ry += @fall
      @ref_move -= @fall
      @fall += @gravity
      # 跳ね返り
      if @ref_move <= 0 && @fall >= 0
        @ref_count -= 1
        @fall = -@fall * @ref_factor
      end      
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupRising
#------------------------------------------------------------------------------
#  少しずつ上昇するポップアップ。
#==============================================================================

class Sprite_PopupRising < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    6
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    self.opacity = 0
    d = self.bitmap.height * LNX11::RISE_MOVEMENT[:line_spacing]
    @delay_count = d / @rising_speed
    @battler.popup_delay[2] += @delay_count
  end
  #--------------------------------------------------------------------------
  # ● 動きの設定
  #--------------------------------------------------------------------------
  def set_movement
    @rising_speed = LNX11::RISE_MOVEMENT[:rising_speed]
    @duration = LNX11::RISE_MOVEMENT[:duration]
    @fadeout  = LNX11::RISE_MOVEMENT[:fadeout]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    @delay_count -= 1
    @battler.popup_delay[2] -= 1 if @delay_count >= 0
    @ry -= @rising_speed # すこしずつ上昇
    self.opacity += 32 if @duration > 0
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupSliding
#------------------------------------------------------------------------------
#  スライド表示するポップアップ。
#==============================================================================

class Sprite_PopupSliding < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    8
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    d = self.bitmap.height * LNX11::SLIDE_MOVEMENT[:line_spacing]
    self.oy += @delay + d / 2 if @delay > 0
    self.opacity = 0
    # ディレイ設定 同じタイプのポップアップが重ならないようにする
    @delay_clear = (@delay == 0)
    @battler.popup_delay[3] += (@delay <= 0 ? d / 2 : d)
    @delay = 0
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------  
  def terminate
    # 一番下のポップアップなら、ディレイを初期化する
    @battler.popup_delay[3] = 0 if @delay_clear
  end
  #--------------------------------------------------------------------------
  # ● 動きの設定
  #--------------------------------------------------------------------------
  def set_movement
    @x_speed  = LNX11::SLIDE_MOVEMENT[:x_speed]
    @duration = LNX11::SLIDE_MOVEMENT[:duration]
    @fadeout  = LNX11::SLIDE_MOVEMENT[:fadeout]
    # フェードインのスライド分だけ X を移動
    @rx -= @x_speed * 255.0 / @fadeout
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    @rx += @x_speed if opacity != 255 # スライド
    self.opacity += @fadeout if @duration > 0
  end
end

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

class Sprite_PopupOverlay < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    10
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    @duration = LNX11::OVERLAY_MOVEMENT[:duration]
    @fadeout  = LNX11::OVERLAY_MOVEMENT[:fadeout]
    # オーバーレイの作成
    create_overlay
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    @overlay.dispose
    @overlay = nil
  end
  #--------------------------------------------------------------------------
  # ● オーバーレイ(複製)の作成
  #--------------------------------------------------------------------------
  def create_overlay
    @overlay = Sprite.new
    @overlay.bitmap   = self.bitmap
    @overlay.viewport = self.viewport
    @overlay.ox = self.ox
    @overlay.oy = self.oy
    @overlay.visible = false
    @overlay.blend_type = 1
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    self.opacity += @fadeout * 2 if @duration > 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_overlay
  end
  #--------------------------------------------------------------------------
  # ● オーバーレイの更新
  #--------------------------------------------------------------------------
  def update_overlay
    return if self.disposed? || @overlay.opacity == 0
    @overlay.x = self.x
    @overlay.y = self.y
    @overlay.z = self.z
    # 拡大・消去
    @overlay.zoom_x += 0.16
    @overlay.zoom_y += 0.12
    @overlay.opacity -= 20
    @overlay.visible = (@overlay.opacity != 0)
  end
end

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

class Sprite_PopupLevelUp < Sprite_PopupSliding
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    32
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ位置の設定
  #--------------------------------------------------------------------------
  def set_position
    @rx = @battler.screen_x - LNX11::ACTOR_OFFSET[:x]
    case LNX11::LEVELUP_POPUP_POSITION
    when 0 ; @ry = @battler.screen_y        # 足元
    when 1 ; @ry = @battler.screen_y_center # 中心
    when 2 ; @ry = @battler.screen_y_top    # 頭上
    when 3 ; @ry = Graphics.height + LNX11::LEVELUP_POPUP_Y # Y座標統一
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    super
    # リザルト中なら自動的に消去しない
    @duration += 1 if $game_troop.all_dead? || $game_message.busy?
  end
end

#==============================================================================
# ■ Bitmap
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  # ● [追加]:カーソル用三角形の描画
  #--------------------------------------------------------------------------
  def lnx_cursor_triangle(size, color, oy = 0, grad = 1)
    color = color.clone
    x = (self.width - size) / 2
    y = (self.height - size) / 2 + oy
    rect = Rect.new(x, y, size, 1)
    count = size / 2
    minus = 128 / count / 2
    count.times do
      clear_rect(rect)
      fill_rect(rect, color)
      color.red   = [color.red   - minus * grad, 0].max
      color.green = [color.green - minus * grad, 0].max
      color.blue  = [color.blue  - minus * grad, 0].max
      rect.y += rect.height
      clear_rect(rect)
      fill_rect(rect, color)
      color.red   = [color.red   - minus * grad, 0].max
      color.green = [color.green - minus * grad, 0].max
      color.blue  = [color.blue  - minus * grad, 0].max
      rect.x += 1
      rect.y += rect.height
      rect.width -= 2
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_TargetCursor
#------------------------------------------------------------------------------
#  対象選択されているバトラーや行動選択中のアクターを示すアローカーソルです。
#==============================================================================
class Sprite_TargetCursor < Sprite
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@cursor_cache = nil
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :battler     # バトラー
  attr_accessor :blink       # 点滅(対象の選択中)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    @wait = LNX11::CURSOR_ANI_SPEED
    @speed = [LNX11::CURSOR_SPEED, 1].max
    @battler = nil
    @sub_cursor = []
    @blink = false
    self.bitmap = cursor_bitmap
    partition = self.bitmap.width / self.height
    self.src_rect.set(0, 0, self.width / partition, self.height)
    self.ox = self.width / 2
    self.oy = self.height / 2
    self.x = @rx = @tx = 0
    self.y = @ry = @ty = 0
    self.z = 98
    self.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    dispose_subcursor
    super
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル作成
  #  メンバー全体にカーソルを表示するために複数のカーソルを作成します。
  #--------------------------------------------------------------------------  
  def create_subcursor(members)
    return unless @sub_cursor.empty?
    members.each_with_index do |battler, i|
      @sub_cursor = Sprite_TargetCursor.new(self.viewport)
      @sub_cursor.set(@rx, @ry)
      @sub_cursor.set(battler, true)
    end
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル解放
  #--------------------------------------------------------------------------  
  def dispose_subcursor
    @sub_cursor.each {|sprite| sprite.dispose }
    @sub_cursor = []
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル更新
  #--------------------------------------------------------------------------  
  def update_subcursor
    @sub_cursor.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● ビットマップの設定
  #--------------------------------------------------------------------------
  def cursor_bitmap
    if !LNX11::CURSOR_NAME.empty?
      return Cache.system(LNX11::CURSOR_NAME)
    else
      # カーソルファイル名が指定されていなければRGSS側で生成
      return @@cursor_cache if @@cursor_cache && !@@cursor_cache.disposed?
      @@cursor_cache = Bitmap.new(32, 32)
      color = Color.new(0, 0, 0)
      @@cursor_cache.lnx_cursor_triangle(26, color, 2)
      2.times {@@cursor_cache.blur}
      color.set(255, 255, 255)
      @@cursor_cache.lnx_cursor_triangle(24, color, 1, 0.5)
      tone = LNX11::CURSOR_TONE ? LNX11::CURSOR_TONE : $game_system.window_tone
      r = 118 + tone.red
      g = 118 + tone.green
      b = 118 + tone.blue
      color.set(r, g, b, 232)
      @@cursor_cache.lnx_cursor_triangle(20, color,  0)
      @@cursor_cache.lnx_cursor_triangle(20, color,  1)
      p "LNX11a:カーソルビットマップを作成しました。"
      return @@cursor_cache
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルの表示
  #--------------------------------------------------------------------------
  def show
    self.x = @rx = @tx
    self.y = @ry = @ty
    self.visible = true
  end
  #--------------------------------------------------------------------------
  # ● カーソルの非表示
  #--------------------------------------------------------------------------
  def hide
    dispose_subcursor
    @battler = nil
    self.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 移動平均
  #--------------------------------------------------------------------------
  def sma(a, b, p)
    # a = 目標位置 b = 現在地
    return a if a == b || (a - b).abs < 0.3 || p == 1
    result = ((a + b * (p.to_f - 1)) / p.to_f)
    return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_subcursor
    self.opacity = @sub_cursor.empty? ? 255 : 0
    return if !visible || !@sub_cursor.empty?
    super
    # 点滅
    if LNX11::CURSOR_BLINK
      self.blend_type = @blink && Graphics.frame_count / 3 % 2 == 0 ? 1 : 0
    end
    # アニメーションを進める
    @wait -= 1
    if @wait <= 0
      @wait += LNX11::CURSOR_ANI_SPEED
      self.src_rect.x += self.width
      self.src_rect.x = 0 if self.src_rect.x >= self.bitmap.width
    end
    # カーソルの座標を更新
    set_xy if @battler && @sub_cursor.empty?
    self.x = @rx = sma(@tx, @rx, @speed)
    self.y = @ry = sma(@ty, @ry, @speed)
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置の設定
  #--------------------------------------------------------------------------
  def set(*args)
    if args[0].is_a?(Numeric)
      # 引数一つ目が数値なら、XY指定
      @battler = nil
      set_xy(args[0], args[1])
      @blink = args[2] ? args[2] : false
    else
      # バトラーorシンボル指定
      if @battler != args[0]
        @battler = args[0]
        dispose_subcursor
        case args[0]
        when :party        ; create_subcursor($game_party.members)
        when :troop        ; create_subcursor($game_troop.alive_members)
        when :troop_random ; create_subcursor($game_troop.alive_members)
        else ; args[0] ? set_xy : hide
        end
      end
      @blink = args[1] ? args[1] : false
    end
    # スピードが1かカーソルが非表示なら表示に変える
    show if @sub_cursor.empty? && (@speed == 1 || !visible)
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置をバトラーの位置に設定
  #--------------------------------------------------------------------------
  def set_xy(x = nil, y = nil)
    if x
      # 直接指定
      x += LNX11::CURSOR_OFFSET[:x]
      y += LNX11::CURSOR_OFFSET[:y]
    else
      # バトラーの座標
      x = @battler.screen_x + LNX11::CURSOR_OFFSET[:x]
      y = @battler.screen_y_top + LNX11::CURSOR_OFFSET[:y]
    end
    @tx = x
    minmax = LNX11::CURSOR_MINMAX
    @ty = [[y, minmax[:min] + self.oy].max, minmax[:max]].min
  end
end

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

class Sprite_OneLine_BattleLog < Sprite
  @@grad_cache = nil
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor   :position # 表示位置(行)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(width, height, max_line_number)
    super(nil)
    @rx = @ry = 0
    @line_height = height
    @max_line_number = max_line_number
    @position = -1
    @visible = true
    self.ox = -LNX11::STORAGE_OFFSET[:x]
    self.oy = -LNX11::STORAGE_OFFSET[:y]
    self.opacity = 0
    self.z = 96
    self.bitmap = Bitmap.new(width * 0.75, height)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    self.bitmap.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● スプライトの表示
  #--------------------------------------------------------------------------  
  def show
    @visible = true
  end
  #--------------------------------------------------------------------------
  # ● スプライトの非表示
  #--------------------------------------------------------------------------  
  def hide
    @visible = false
    @position = -1
  end
  #--------------------------------------------------------------------------
  # ● 表示しているか?
  #--------------------------------------------------------------------------  
  def visible?
    @visible
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if self.opacity == 0
    self.opacity += @visible && @position >= 0 ? 24 : -24
    self.visible = self.opacity > 0
    return unless @visible # 不可視状態なら座標を更新しない
    @ry = (target_y + (@ry * 5)) / 6.0 if target_y < @ry
    @rx += 2 if @rx < 0
    self.x = @rx
    self.y = @ry
  end
  #--------------------------------------------------------------------------
  # ● テキストの描画
  #  自身が持つ Bitmap で描画するのではなく、Window の contents から
  # コピーします(Sprite からでは Window_Base#draw_text_ex が扱えないため)。
  #--------------------------------------------------------------------------
  def set_text(window, position)
    self.bitmap.clear
    # 横グラデーション
    if @@grad_cache && !@@grad_cache.disposed?
      self.bitmap.blt(0, 0, @@grad_cache, self.bitmap.rect)
    else
      color = LNX11::STORAGE_GRADIENT_COLOR
      fillrect = self.bitmap.rect
      fillrect.width /= 2
      self.bitmap.gradient_fill_rect(fillrect, color[0], color[1])
      @@grad_cache = self.bitmap.clone
    end
    # contents からコピー
    self.bitmap.blt(4, 0, window.contents, self.bitmap.rect)
    self.opacity = 1
    @rx = -8
    @position = position
    @ry = target_y
  end
  #--------------------------------------------------------------------------
  # ● 位置の繰り上げ
  #--------------------------------------------------------------------------
  def up_position
    @position -= 1
  end
  #--------------------------------------------------------------------------
  # ● メッセージが空か?(表示待ち)
  #--------------------------------------------------------------------------
  def mes_empty?
    @position < 0
  end
  #--------------------------------------------------------------------------
  # ● 移動するべき Y 座標
  #--------------------------------------------------------------------------
  def target_y
    @position * @line_height
  end
end

#==============================================================================
# ■ Window_BattleLog
#------------------------------------------------------------------------------
#  戦闘の進行を実況表示するウィンドウです。
#==============================================================================

class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    lnx11a_initialize
    # バトルログタイプが 1 以上なら非表示にする
    @storage_number = 0
    hide if LNX11::BATTLELOG_TYPE >= 1
    BattleManager.log_window = self
  end
  #--------------------------------------------------------------------------
  # ● [追加]:文章の配列のクリア
  #--------------------------------------------------------------------------
  def lines_clear
    @lines.clear if LNX11::BATTLELOG_TYPE == 1
  end
  #--------------------------------------------------------------------------
  # ● [追加]:指定ウェイト
  #--------------------------------------------------------------------------
  def abs_wait(wait)
    @method_wait.call(wait) if @method_wait
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:メッセージ速度の取得
  #--------------------------------------------------------------------------
  def message_speed
    return 20
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:エフェクト実行が終わるまでウェイト
  #--------------------------------------------------------------------------
  def wait_for_effect
    return if LNX11::BATTLELOG_TYPE > 0
    @method_wait_for_effect.call if @method_wait_for_effect
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アニメーションのウェイト用メソッドの設定
  #--------------------------------------------------------------------------
  def method_wait_for_animation=(method)
    @method_wait_for_animation = method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アニメーション再生が終わるまでウェイト
  #--------------------------------------------------------------------------
  def wait_for_animation
    @method_wait_for_animation.call if @method_wait_for_animation
  end
  
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  alias :lnx11a_window_height :window_height
  def window_height
    LNX11::BATTLELOG_TYPE == 1 ? fitting_height(1) : lnx11a_window_height
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:最大行数の取得
  #--------------------------------------------------------------------------
  alias :lnx11a_max_line_number :max_line_number
  def max_line_number
    num = LNX11::STORAGE_LINE_NUMBER
    LNX11::BATTLELOG_TYPE == 1 ? num : lnx11a_max_line_number
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:行の高さを取得
  #--------------------------------------------------------------------------
  def line_height
    LNX11::BATTLELOG_TYPE == 1 ? LNX11::STORAGE_LINE_HEIGHT : super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フォント設定のリセット
  #--------------------------------------------------------------------------
  def reset_font_settings
    super
    return unless LNX11::BATTLELOG_TYPE == 1
    contents.font.size = LNX11::STORAGE_FONT[:size]
    contents.font.out_color.set(LNX11::STORAGE_FONT[:out_color])
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:データ行数の取得
  #--------------------------------------------------------------------------
  alias :lnx11a_line_number :line_number
  def line_number
    return 0 if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? @storage_number : lnx11a_line_number
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:背景スプライトの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_back_sprite :create_back_sprite
  def create_back_sprite
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      create_message_sprite
    else
      # 背景
      lnx11a_create_back_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:背景スプライトの解放
  #--------------------------------------------------------------------------
  alias :lnx11a_dispose_back_sprite :dispose_back_sprite
  def dispose_back_sprite
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      dispose_message_sprite
    else
      # 背景
      lnx11a_dispose_back_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの作成
  #--------------------------------------------------------------------------
  def create_message_sprite
    # メッセージスプライト 行数分だけ作成する
    @mes_position = 0 # 次にメッセージを表示させる位置
    @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME # ログが進行するまでの時間
    @mes_sprites = Array.new(max_line_number + 1) {
    Sprite_OneLine_BattleLog.new(self.width, line_height, max_line_number)}
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの解放
  #--------------------------------------------------------------------------
  def dispose_message_sprite
    @mes_sprites.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを表示
  #--------------------------------------------------------------------------
  def show_message_sprite
    @mes_sprites.each {|sprite| sprite.show }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを非表示
  #--------------------------------------------------------------------------
  def hide_message_sprite
    @mes_sprites.each {|sprite| sprite.hide }
    @mes_position = 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを一つ進める
  #--------------------------------------------------------------------------
  def up_message_sprite
    @mes_sprites.each {|sprite| sprite.up_position }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:空のメッセージスプライトを返す
  #--------------------------------------------------------------------------
  def empty_message_sprite
    @mes_sprites.each {|sprite| return sprite if sprite.mes_empty? }
    @mes_sprites[0]
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの更新
  #--------------------------------------------------------------------------
  def update_message_sprite
    # バトルログ消去フラグが有効
    if $game_temp.battlelog_clear
      $game_temp.battlelog_clear = false
      # スプライトが表示されていれば非表示にする
      if @mes_sprites[0].visible?
        hide_message_sprite
        lines_clear
      end
    end
    # ログの自動進行
    @mesup_count -= 1
    if @mesup_count <= 0 && @mes_position > 0
      up_message_sprite
      @mes_position -= 1
      @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME
    end
    @mes_sprites.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトのリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_message_sprite
    # 文章が無ければ何もしない
    return if @lines.empty?
    # スプライトを表示する
    show_message_sprite unless @mes_sprites[0].visible?
    # 文章の描画
    contents.clear
    @lines[0] = last_text
    return if @lines[0].empty?
    draw_line(0)
    @storage_number += 1
    # ウィンドウの内容をスプライトにコピー
    empty_message_sprite.set_text(self, @mes_position)
    # スプライト位置の変動   
    if @mes_position < max_line_number
      @mes_position += 1
    elsif @mesup_count > 0
      up_message_sprite
    end
    @mesup_count = (LNX11::STORAGE_UP_MESSAGE_TIME * 1.5).truncate
  end  
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_message_sprite if LNX11::BATTLELOG_TYPE == 1
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:リフレッシュ
  #--------------------------------------------------------------------------
  alias :lnx11a_refresh :refresh
  def refresh
    return if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? refresh_message_sprite : lnx11a_refresh
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:クリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear :clear
  def clear
    return if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? @storage_number = 0 : lnx11a_clear
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:一行戻る
  #--------------------------------------------------------------------------
  alias :lnx11a_back_one :back_one
  def back_one
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      @storage_number = [@storage_number - 1, 0].max
    else
      # 通常
      lnx11a_back_one
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:指定した行に戻る
  #--------------------------------------------------------------------------
  alias :lnx11a_back_to :back_to
  def back_to(line_number)
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      @storage_number -= 1 while @storage_number > line_number
    else
      # 通常
      lnx11a_back_to(line_number)
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウェイト
  #--------------------------------------------------------------------------
  alias :lnx11a_wait :wait
  def wait
    return if LNX11::BATTLELOG_TYPE == 2
    # 元のメソッドを呼ぶ
    lnx11a_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテム使用の表示
  #  使用時アニメーションの処理を追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_display_use_item :display_use_item
  def display_use_item(subject, item)
    if item.use_animation > 0
      # 使用時アニメーションが設定されていれば再生
      subject.animation_id = item.use_animation
      subject.animation_mirror = false
    end
    # 元のメソッドを呼ぶ
    lnx11a_display_use_item(subject, item)
    # アニメーションのウェイト
    wait_for_animation if item.use_animation > 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップデータの取得
  #--------------------------------------------------------------------------
  def popup_data
    $game_temp.popup_data
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:反撃の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_counter :display_counter
  def display_counter(target, item)
    # ポップアップ
    popup_data.popup_text(target, :counter)
    # 元のメソッドを呼ぶ
    lnx11a_display_counter(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:反射の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_reflection :display_reflection
  def display_reflection(target, item)
    # ポップアップ
    popup_data.popup_text(target, :reflection)
    # 元のメソッドを呼ぶ
    lnx11a_display_reflection(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:身代わりの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_substitute :display_substitute
  def display_substitute(substitute, target)
    # ポップアップ
    popup_data.popup_text(substitute, :substitute)
    # 元のメソッドを呼ぶ
    lnx11a_display_substitute(substitute, target)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:失敗の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_failure :display_failure
  def display_failure(target, item)
    if target.result.hit? && !target.result.success
      # ポップアップ (ミスと同じ扱いにする)
      popup_data.popup_miss(target, item)
    end
    # 元のメソッドを呼ぶ
    lnx11a_display_failure(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ミスの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_miss :display_miss
  def display_miss(target, item)
    # ポップアップ
    popup_data.popup_miss(target, item)
    # 元のメソッドを呼ぶ   
    lnx11a_display_miss(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:回避の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_evasion :display_evasion
  def display_evasion(target, item)
    # ポップアップ (ミスと同じ扱いにする)
    popup_data.popup_miss(target, item)
    # 元のメソッドを呼ぶ   
    lnx11a_display_evasion(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:HP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_hp_damage :display_hp_damage
  def display_hp_damage(target, item)
    # ポップアップ
    popup_data.popup_hp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_hp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:MP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_mp_damage :display_mp_damage
  def display_mp_damage(target, item)
    # ポップアップ
    popup_data.popup_mp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_mp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:TP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_tp_damage :display_tp_damage
  def display_tp_damage(target, item)
    # ポップアップ
    popup_data.popup_tp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_tp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート付加の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_added_states :display_added_states
  def display_added_states(target)
    # ポップアップ
    popup_data.popup_added_states(target)
    # 元のメソッドを呼ぶ
    lnx11a_display_added_states(target)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート解除の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_removed_states :display_removed_states
  def display_removed_states(target)
    # ポップアップ
    popup_data.popup_removed_states(target)
    # 元のメソッドを呼ぶ
    lnx11a_display_removed_states(target)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:能力強化/弱体の表示(個別)
  #--------------------------------------------------------------------------
  alias :lnx11a_display_buffs :display_buffs
  def display_buffs(target, buffs, fmt)
    # ポップアップ
    popup_data.popup_buffs(target, buffs, fmt)
    # 元のメソッドを呼ぶ
    lnx11a_display_buffs(target, buffs, fmt)
  end
end

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

class RPG::BaseItem  
  #--------------------------------------------------------------------------
  # ● [追加]:バトラーグラフィックファイル名を取得
  #--------------------------------------------------------------------------
  def default_battler_graphic
    # キャッシュがある場合、それを返す
    return @default_battler_graphic if @default_battler_graphic
    # メモ取得
    re = LNX11::RE_BATTLER =~ note
    @default_battler_graphic = re ? $1 : ""
  end
  #--------------------------------------------------------------------------
  # ● [追加]:敵キャラの通常攻撃アニメの取得
  #--------------------------------------------------------------------------
  def atk_animation
    # キャッシュがある場合、それを返す
    return @atk_animation if @atk_animation
    # メモ取得
    re = LNX11::RE_ATK_ANIMATION =~ note
    @atk_animation = re ? $1.to_i : 1
  end
end

#==============================================================================
# ■ RPG::UsableItem
#------------------------------------------------------------------------------
#  スキルとアイテムのスーパークラス。
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● [エイリアス]:対象の選択操作が必要か否かを取得
  #--------------------------------------------------------------------------
  alias :lnx11a_need_selection? :need_selection?
  def need_selection?
    LNX11::FIX_TARGET_CHECKE && scope > 0 ? true : lnx11a_need_selection?
  end
  #--------------------------------------------------------------------------
  # ● [追加]:使用時アニメの取得
  #--------------------------------------------------------------------------
  def use_animation
    # キャッシュがある場合、それを返す
    return @use_animation if @use_animation
    # メモ取得
    re = LNX11::RE_USE_ANIMATION =~ note
    @use_animation = re ? $1.to_i : 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ非表示の取得
  #--------------------------------------------------------------------------
  def no_display
    # キャッシュがある場合、それを返す
    return @no_display if @no_display
    # メモ取得
    re = LNX11::RE_USABLEITEM_NO_DISPLAY =~ note
    @no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:使用時追加ウェイトの取得
  #--------------------------------------------------------------------------
  def display_wait
    # キャッシュがある場合、それを返す
    return @display_wait if @display_wait
    # メモ取得
    re = LNX11::RE_DISPLAY_WAIT =~ note
    @display_wait = re ? $1.to_i : LNX11::HELPDISPLAT_WAIT
  end
  #--------------------------------------------------------------------------
  # ● [追加]:終了時追加ウェイトの取得
  #--------------------------------------------------------------------------
  def end_wait
    # キャッシュがある場合、それを返す
    return @end_wait if @end_wait
    # メモ取得
    re = LNX11::RE_END_WAIT =~ note
    @end_wait = re ? $1.to_i : LNX11::HELPDISPLAT_END_WAIT
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ説明を取得
  #--------------------------------------------------------------------------
  def short_description
    # キャッシュがある場合、それを返す
    return @short_description if @short_description
    # メモ取得
    re = LNX11::RE_SHORT_DESCRIPTION =~ note
    @short_description = re ? $1 : ""
  end
end

#==============================================================================
# ■ RPG::State
#------------------------------------------------------------------------------
#  ステートのデータクラス。
#==============================================================================

class RPG::State < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● [追加]:ステートアニメの取得
  #--------------------------------------------------------------------------
  def state_animation
    # キャッシュがある場合、それを返す
    return @state_animation if @state_animation
    # メモ取得
    re = LNX11::RE_STATE_ANIMATION =~ note
    @state_animation = re ? $1.to_i : 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップ表示名の取得
  # <<ver1.10>>
  #  このメソッドは付加/解除ポップアップ表示名が設定されていない場合のみ
  # 呼び出されるようになりました。
  #--------------------------------------------------------------------------
  def display_name
    # キャッシュがある場合、それを返す
    return @display_name if @display_name
    # メモ取得
    re = LNX11::RE_STATE_DISPLAY =~ note
    @display_name = re ? $1 : name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップ表示名の取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def add_display_name
    # キャッシュがある場合、それを返す
    return @add_display_name if @add_display_name
    # メモ取得
    re = LNX11::RE_STATE_ADD_DISPLAY =~ note
    @add_display_name = re ? $1 : display_name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップ表示名の取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def remove_display_name
    # キャッシュがある場合、それを返す
    return @remove_display_name if @remove_display_name
    # メモ取得
    re = LNX11::RE_STATE_REM_DISPLAY =~ note
    @remove_display_name = re ? $1 : display_name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def no_display?
    # キャッシュがある場合、それを返す
    return @no_display if @no_display
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_NO_DISPLAY =~ note ||
       LNX11::RE_STATE_REM_NO_DISPLAY =~ note
      return @no_display = false
    end
    # メモ取得
    re = LNX11::RE_STATE_NO_DISPLAY =~ note
    @no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def add_no_display?
    return true if no_display?
    # キャッシュがある場合、それを返す
    return @add_no_display if @add_no_display
    # メモ取得
    re = LNX11::RE_STATE_ADD_NO_DISPLAY =~ note
    @add_no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def remove_no_display?
    return true if no_display?
    # キャッシュがある場合、それを返す
    return @remove_no_display if @remove_no_display
    # メモ取得
    re = LNX11::RE_STATE_REM_NO_DISPLAY =~ note
    @remove_no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:有利なステートの取得
  #--------------------------------------------------------------------------
  def advantage?
    # キャッシュがある場合、それを返す
    return @advantage if @advantage
    # メモ取得
    re = LNX11::RE_STATE_ADVANTAGE =~ note
    @advantage = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def popup_type
    # キャッシュがある場合、それを返す
    return @popup_type if @popup_type != nil
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_TYPE =~ note ||
       LNX11::RE_STATE_REM_TYPE =~ note
      return @popup_type = false
    end
    # メモ取得
    re = LNX11::RE_STATE_TYPE =~ note
    @popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def add_popup_type
    return popup_type if popup_type
    # キャッシュがある場合、それを返す
    return @add_popup_type if @add_popup_type != nil
    # メモ取得
    re = LNX11::RE_STATE_ADD_TYPE =~ note
    @add_popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def remove_popup_type
    return popup_type if popup_type
    # キャッシュがある場合、それを返す
    return @remove_popup_type if @remove_popup_type != nil
    # メモ取得
    re = LNX11::RE_STATE_REM_TYPE =~ note
    @remove_popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def no_decoration?
    # キャッシュがある場合、それを返す
    return @no_decoration if @no_decoration
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_NO_DECORATION =~ note ||
       LNX11::RE_STATE_REM_NO_DECORATION =~ note
      return @no_decoration = false
    end
    # メモ取得
    re = LNX11::RE_STATE_NO_DECORATION =~ note
    @no_decoration = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def add_no_decoration?
    return true if no_decoration?
    # キャッシュがある場合、それを返す
    return @add_no_decoration if @add_no_decoration
    # メモ取得
    re = LNX11::RE_STATE_ADD_NO_DECORATION =~ note
    @add_no_decoration = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def remove_no_decoration?
    return true if no_decoration?
    # キャッシュがある場合、それを返す
    return @remove_no_decoration if @remove_no_decoration
    # メモ取得
    re = LNX11::RE_STATE_REM_NO_DECORATION =~ note
    @remove_no_decoration = re ? true : false
  end
end

#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  戦闘の進行を管理するモジュールです。
#==============================================================================

class << BattleManager
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :preemptive             # 先制攻撃フラグ
  attr_reader   :surprise               # 不意打ちフラグ
  attr_accessor :log_window             # バトルログウィンドウ
  attr_accessor :update_for_wait_method # ウェイト中のフレーム更新
  attr_accessor :helpdisplay_set_method        # 簡易ヘルプ表示
  attr_accessor :helpdisplay_clear_method      # 簡易ヘルプ消去
  attr_accessor :helpdisplay_wait_short_method # 簡易ヘルプ・短時間ウェイト
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ表示
  #--------------------------------------------------------------------------
  def helpdisplay_set(*args)
    @helpdisplay_set_method.call(*args) if @helpdisplay_set_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ消去
  #--------------------------------------------------------------------------
  def helpdisplay_clear(*args)
    @helpdisplay_clear_method.call(*args) if @helpdisplay_clear_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ・短時間ウェイト
  #--------------------------------------------------------------------------
  def helpdisplay_wait_short
    @helpdisplay_wait_short_method.call if @helpdisplay_wait_short_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:キー入力待ち
  #--------------------------------------------------------------------------
  def helpdisplay_wait_input
    return if $game_message.helpdisplay_texts.empty?
    return if LNX11::MESSAGE_TYPE == 0
    return if !@helpdisplay_wait_input || !@update_for_wait_method
    update_for_wait_method.call while !Input.press?(:B) && !Input.press?(:C)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージ進行の SE 再生
  #--------------------------------------------------------------------------
  def messagedisplay_se_play
    return if !@helpdisplay_se
    @helpdisplay_se.play  
    @helpdisplay_se = nil if @helpdisplay_se == LNX11::LEVELUP_SE
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージ進行
  #--------------------------------------------------------------------------
  def process_messagedisplay(wait)
    return if $game_message.helpdisplay_texts.empty?
    return if LNX11::MESSAGE_TYPE == 0
    $game_temp.battlelog_clear = true
    BattleManager.log_window.update
    if LNX11::BATTLELOG_TYPE == 2 || LNX11::MESSAGE_TYPE == 2
      # 簡易ヘルプ
      $game_message.helpdisplay_texts.each do |text|
        helpdisplay_wait_short
        messagedisplay_se_play
        helpdisplay_set(text, wait)
        helpdisplay_wait_input
      end
      helpdisplay_clear
    elsif LNX11::BATTLELOG_TYPE == 0
      # VXAceデフォルト
      BattleManager.log_window.clear
      $game_message.helpdisplay_texts.each do |text|
        messagedisplay_se_play
        BattleManager.log_window.add_text(text)
        BattleManager.log_window.abs_wait(wait)
        helpdisplay_wait_input
        max = BattleManager.log_window.max_line_number
        # 表示がいっぱいになったら消去
        if BattleManager.log_window.line_number >= max
          BattleManager.log_window.clear
        end
      end
      BattleManager.log_window.clear
    elsif LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      $game_message.helpdisplay_texts.each do |text|
        messagedisplay_se_play
        BattleManager.log_window.add_text(text)
        BattleManager.log_window.abs_wait(wait)
        helpdisplay_wait_input
      end
      $game_temp.battlelog_clear = true
      BattleManager.log_window.update
    end
    $game_message.helpdisplay_texts.clear
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:メッセージ表示が終わるまでウェイト
  #--------------------------------------------------------------------------
  alias :lnx11a_wait_for_message :wait_for_message
  def wait_for_message
    # 簡易ヘルプ表示
    process_messagedisplay(@helpdisplay_wait ? @helpdisplay_wait : 60)
    return if $game_message.texts.empty?
    # 元のメソッドを呼ぶ
    lnx11a_wait_for_message
  end  
  #--------------------------------------------------------------------------
  # ● [エイリアス]:戦闘開始
  #--------------------------------------------------------------------------
  alias :lnx11a_battle_start :battle_start
  def battle_start   
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:battle_start][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:battle_start][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    lnx11a_battle_start
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:勝利の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_victory :process_victory
  def process_victory
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:victory][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:victory][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_victory
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:逃走の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_escape :process_escape
  def process_escape
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:escape][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:escape][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_escape
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:敗北の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_defeat :process_defeat
  def process_defeat
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:defeat][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:defeat][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_defeat
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ドロップアイテムの獲得と表示
  #--------------------------------------------------------------------------
  alias :lnx11a_gain_drop_items :gain_drop_items
  def gain_drop_items
    helpdisplay_clear
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:drop_item][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:drop_item][1]
    @helpdisplay_se = LNX11::DROPITEM_SE
    # 元のメソッドを呼ぶ
    lnx11a_gain_drop_items
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    @helpdisplay_se = nil
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:経験値の獲得とレベルアップの表示
  #--------------------------------------------------------------------------
  def gain_exp
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:levelup][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:levelup][1]
    $game_party.all_members.each do |actor|
      @helpdisplay_se = LNX11::LEVELUP_SE
      actor.gain_exp($game_troop.exp_total)
      # レベルアップ毎にメッセージ表示ウェイト
      wait_for_message
    end
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    @helpdisplay_se = nil
  end
end

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

class Game_Temp
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :popup_data            # ポップアップスプライト
  attr_accessor :actor_battler_graphic # アクターのバトラーグラフィック
  attr_accessor :battlelog_clear       # バトルログ消去フラグ
  attr_accessor :target_cursor_sprite  # ターゲットカーソルスプライト
  attr_accessor :last_target_cursor    # 対象選択のカーソル記憶
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    # 元のメソッドを呼ぶ
    lnx11a_initialize
    # 追加
    @popup_data = nil
    @actor_battler_graphic = []
    @battlelog_clear = false
    @battle_status_refresh = nil
    @target_cursor_sprite = nil
    clear_last_target_cursor
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトルステータス更新メソッドの設定
  #--------------------------------------------------------------------------
  def method_battle_status_refresh=(method)
    @battle_status_refresh = method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトルステータス更新
  #--------------------------------------------------------------------------
  def battle_status_refresh
    return unless $game_party.in_battle
    @battle_status_refresh.call if @battle_status_refresh
  end
  #--------------------------------------------------------------------------
  # ● [追加]:対象選択のカーソル記憶をクリア
  #--------------------------------------------------------------------------
  def clear_last_target_cursor
    @last_target_cursor = {:actor => nil, :enemy => nil}
  end
end

#==============================================================================
# ■ Game_Action
#------------------------------------------------------------------------------
#  戦闘行動を扱うクラスです。
#==============================================================================

class Game_Action
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ターゲットの配列作成
  #--------------------------------------------------------------------------
  alias :lnx11a_make_targets :make_targets
  def make_targets   
    if LNX11::TROOP_X_SORT
      # 元のメソッドを呼んでソート
      return lnx11a_make_targets.sort {|a,b| a.screen_x <=> b.screen_x}
    else
      return lnx11a_make_targets
    end
  end
end

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

class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :element_rate               # 属性修正値
  #--------------------------------------------------------------------------
  # ● ダメージ値のクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_damage_values :clear_damage_values
  def clear_damage_values
    # 元のメソッドを呼ぶ
    lnx11a_clear_damage_values
    # 属性修正値をクリア
    @element_rate = 1.0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:属性修正値の取得
  #--------------------------------------------------------------------------
  def element_rate
    return @element_rate if @element_rate
    @element_rate = 1.0
  end
end

#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  バトラーを扱う基本のクラスです。
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップデータの取得
  #--------------------------------------------------------------------------
  def popup_data
    $game_temp.popup_data
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル使用コストの支払い
  #--------------------------------------------------------------------------
  alias :lnx11a_pay_skill_cost :pay_skill_cost
  def pay_skill_cost(skill)
    rmp = self.mp
    rtp = self.tp
    # 元のメソッドを呼ぶ   
    lnx11a_pay_skill_cost(skill)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_mp(self, (rmp - self.mp).truncate, true)
    popup_data.popup_regenerate_tp(self, (rtp - self.tp).truncate, true)
  end
end

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

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :loop_animation_id     # ループアニメーション ID
  attr_accessor :loop_animation_mirror # ループアニメーション 左右反転フラグ
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スプライトのエフェクトをクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_sprite_effects :clear_sprite_effects
  def clear_sprite_effects
    # 元のメソッドを呼ぶ
    lnx11a_clear_sprite_effects
    @loop_animation_id = 0
    @loop_animation_mirror = false
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:アニメーション ID の設定
  #--------------------------------------------------------------------------  
  def animation_id=(id)
    return unless battle_member?
    @animation_id = id
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステートのループアニメーションの設定
  #--------------------------------------------------------------------------
  def set_state_animation
    # 表示優先度が高いステートを優先
    sort_states
    anime = @states.collect {|id| $data_states[id].state_animation }
    anime.delete(0)
    @loop_animation_id = anime[0] ? anime[0] : 0
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート情報をクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_states :clear_states
  def clear_states
    # 元のメソッドを呼ぶ
    lnx11a_clear_states
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステートの付加
  #--------------------------------------------------------------------------
  alias :lnx11a_add_state :add_state
  def add_state(state_id)
    # 元のメソッドを呼ぶ
    lnx11a_add_state(state_id)
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステートの解除
  #--------------------------------------------------------------------------
  alias :lnx11a_remove_state :remove_state
  def remove_state(state_id)
    # 元のメソッドを呼ぶ
    lnx11a_remove_state(state_id)
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの取得
  #--------------------------------------------------------------------------
  def popup_delay
    return @popup_delay if @popup_delay
    popup_delay_clear
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの設定
  #--------------------------------------------------------------------------
  def popup_delay=(delay)
    @popup_delay = delay
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの設定
  #--------------------------------------------------------------------------
  def popup_delay_clear
    @popup_delay = Array.new(16) { 0 }
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテムの属性修正値を取得
  #  弱点/耐性の判定を追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_item_element_rate :item_element_rate
  def item_element_rate(user, item)
    # 元のメソッドを呼ぶ
    rate = lnx11a_item_element_rate(user, item)
    return rate unless $game_party.in_battle
    # レートを結果に保存する
    @result.element_rate = rate
    rate
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ダメージの処理
  #  吸収による回復のポップアップを生成します。
  #--------------------------------------------------------------------------
  alias :lnx11a_execute_damage :execute_damage
  def execute_damage(user)
    # 元のメソッドを呼ぶ
    lnx11a_execute_damage(user)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_hp_drain(user, @result.hp_drain)
    popup_data.popup_mp_drain(user, @result.mp_drain)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:HP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_hp :regenerate_hp
  def regenerate_hp
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_hp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_hp(self, @result.hp_damage)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:MP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_mp :regenerate_mp
  def regenerate_mp
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_mp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_mp(self, @result.mp_damage)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:TP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_tp :regenerate_tp
  def regenerate_tp
    rtp = self.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_tp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_tp(self, rtp - self.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● 被ダメージによる TP チャージ
  #--------------------------------------------------------------------------
  alias :lnx11a_charge_tp_by_damage :charge_tp_by_damage
  def charge_tp_by_damage(damage_rate)
    rtp = self.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_charge_tp_by_damage(damage_rate)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_tp_charge(self, rtp - self.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテムの使用者側への効果(TP 得)
  #--------------------------------------------------------------------------
  alias :lnx11a_item_user_effect :item_user_effect
  def item_user_effect(user, item)
    rtp = user.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_item_user_effect(user, item)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_tp_gain(user, rtp - user.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:高さの取得
  #--------------------------------------------------------------------------
  def bitmap_height
    return @bitmap_height if @bitmap_height
    @bitmap_height = 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:高さの設定
  #--------------------------------------------------------------------------
  def bitmap_height=(y)
    @bitmap_height = y
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Y 座標(頭上)の取得
  #--------------------------------------------------------------------------
  def screen_y_top
    screen_y - @bitmap_height
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Y 座標(中心)の取得
  #--------------------------------------------------------------------------
  def screen_y_center
    screen_y - @bitmap_height / 2
  end
end

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :battler_graphic_name    # 後指定のバトラーグラフィック
  attr_accessor :refresh_battler_graphic # バトラーグラフィックの更新フラグ
  attr_accessor :screen_x                # バトル画面 X 座標
  attr_accessor :screen_y                # バトル画面 Y 座標
  attr_accessor :last_actor_command      # 最後に選択したコマンド
  #--------------------------------------------------------------------------
  # ● [再定義]:スプライトを使うか?
  #--------------------------------------------------------------------------
  def use_sprite?
    return true # 使う
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Z 座標の取得
  #--------------------------------------------------------------------------
  def screen_z
    return $game_party.members_screen_z[0] if index == nil
    return $game_party.members_screen_z[index] # Game_EnemyのZ座標は100
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ダメージ効果の実行
  #--------------------------------------------------------------------------
  alias :lnx11a_perform_damage_effect :perform_damage_effect
  def perform_damage_effect
    # 元のメソッドを呼ぶ
    lnx11a_perform_damage_effect
    # シェイクを無効にしている場合、シェイクをクリア
    $game_troop.screen.clear_shake if LNX11::DISABLED_DAMAGE_SHAKE
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:コラプス効果の実行
  #  アクターの[特徴>その他>消滅エフェクト]の設定を適用するようにします。
  #  処理内容は Game_Enemy のものとほぼ同一です。
  #--------------------------------------------------------------------------
  def perform_collapse_effect
    if $game_party.in_battle
      case collapse_type
      when 0
        @sprite_effect_type = :collapse
        Sound.play_actor_collapse
      when 1
        @sprite_effect_type = :boss_collapse
        Sound.play_boss_collapse1
      when 2
        @sprite_effect_type = :instant_collapse
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:グラフィック設定の配列を返す
  #--------------------------------------------------------------------------
  def graphic_name_index
    case LNX11::DEFAULT_BATTLER_GRAPHIC
    when 0 ; [@face_name, @face_index]
    when 1 ; [@character_name, @character_index]
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:グラフィックの変更
  #--------------------------------------------------------------------------
  alias :lnx11a_set_graphic :set_graphic
  def set_graphic(*args)
    face = graphic_name_index
    # 元のメソッドを呼ぶ
    lnx11a_set_graphic(*args)
    @refresh_battler_graphic = (face != graphic_name_index)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:デフォルトバトラーグラフィックの取得
  #--------------------------------------------------------------------------
  def facebattler
    $game_temp.actor_battler_graphic[id]
  end
  def facebattler=(bitmap)
    facebattler.dispose if facebattler && !facebattler.disposed?
    $game_temp.actor_battler_graphic[id] = bitmap
  end
  #--------------------------------------------------------------------------
  # ● [追加]:後指定のバトラーグラフィックファイル名の取得
  #--------------------------------------------------------------------------
  def battler_graphic_name
    return @battler_graphic_name if @battler_graphic_name != nil
    @battler_graphic_name = ""
  end
  #--------------------------------------------------------------------------
  # ● [追加]:後指定のバトラーグラフィックファイル名の指定
  #--------------------------------------------------------------------------
  def battler_graphic_name=(filename)
    @battler_graphic_name = filename
    @refresh_battler_graphic = true
  end
  #--------------------------------------------------------------------------
  # ● [追加]:顔グラフィックを描画して返す
  #  処理内容は Window_Base の draw_face に準じたものです。
  #--------------------------------------------------------------------------
  def draw_face(face_name, face_index, enabled = true)
    fw = 96
    fh = 96
    # ビットマップを作成して返す
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * fw, face_index / 4 * fh, fw, fh)
    face = Bitmap.new(fw, fh)
    color = LNX11::DEFAULT_BG_COLOR
    face.gradient_fill_rect(face.rect, color[0], color[1], true)
    face.blt(0, 0, bitmap, rect)
    bitmap.dispose
    face
  end
  #--------------------------------------------------------------------------
  # ● [追加]:歩行グラフィックを描画して返す
  #  処理内容は Window_Base の draw_character に準じたものです。
  #--------------------------------------------------------------------------
  def draw_character(character_name, character_index)
    return unless character_name
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$]./]
    if sign && sign.include?('$')
      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) && !@battler.actor?)
      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 !@text.short_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[/pre]

然後是我提供的
[pre lang="ruby" line="1"]#==============================================================================
#
#  Yanfly Engine Ace - Visual Battlers v1.01
# -- Last Updated: 2012.07.24
# -- Level: Easy
# -- Requires: n/a
#
#  Modified by:
# -- Yami
# -- Kread-Ex
# -- Archeia_Nessiah
#==============================================================================

$imported = {} if $imported.nil?
$imported["YEA-VisualBattlers"] = true

#==============================================================================
#  Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2012.12.18 - Added preset views and able to change direction in-game.
# 2012.07.24 - Finished Script.
# 2012.01.05 - Started Script.
#
#==============================================================================
#  Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script provides a visual for all actors by default charsets. The actions
# and movements are alike Final Fantasy 1, only move forward and backward when
# start and finish actions.
#
#==============================================================================
#  Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To change the player direction in-game, use the snippet below in a script
# call:
#
# $game_system.party_direction = n
#
# To install this script, open up your script editor and copy/paste this script
# to an open slot below  Materials but above  Main. Remember to save.
#
#==============================================================================
#  Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================

module YEA
  module VISUAL_BATTLERS
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Party Location Setting -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # These settings are adjusted for Party Location. Each Actor will have
    # coordinates calculated by below formula. There are two samples coordinates
    # below, change PARTY_DIRECTION to the base index you want to use.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    PARTY_DIRECTION = 6 # This direction is opposite from actual direction.
   
    PARTY_LOCATION_BASE_COORDINATES ={
    # Index => [base_x, base_y, mod_x, mod_y],
          2 => [   250,    290,    40,     0], #UP
          4 => [   150,    280,    20,   -20], #LEFT
          3 => [   460,    280,    30,   -10], #RIGHT
          6 => [   460,    230,    20,    20], #DEFAULT RIGHT
          8 => [   260,    230,    40,     0], #DOWN
    } # Do not remove this.
   
    PARTY_LOCATION_FORMULA_X = "base_x + index * mod_x"
    PARTY_LOCATION_FORMULA_Y = "base_y + index * mod_y"
   
  end # VISUAL_BATTLERS
end # YEA

#==============================================================================
#    Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================

#==============================================================================
# ?   Direction
#==============================================================================

module Direction
  
  #--------------------------------------------------------------------------
  # self.correct
  #--------------------------------------------------------------------------
  def self.correct(direction)
    case direction
    when 1; return 4
    when 3; return 6
    when 7; return 4
    when 9; return 6
    else; return direction
    end
  end
  
  #--------------------------------------------------------------------------
  # self.opposite
  #--------------------------------------------------------------------------
  def self.opposite(direction)
    case direction
    when 1; return 6
    when 2; return 8
    when 3; return 4
    when 4; return 6
    when 6; return 4
    when 7; return 6
    when 8; return 2
    when 9; return 4
    else; return direction
    end
  end
  
end # Direction

#==============================================================================
# ?   Game_System
#==============================================================================

class Game_System; attr_accessor :party_direction; end

#==============================================================================
# ?   Game_BattleCharacter
#==============================================================================

class Game_BattleCharacter < Game_Character
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(actor)
    super()
    setup_actor(actor)
    @move_x_rate = 0
    @move_y_rate = 0
  end
  
  #--------------------------------------------------------------------------
  # setup_actor
  #--------------------------------------------------------------------------
  def setup_actor(actor)
    @actor = actor
    @step_anime = true
    set_graphic(@actor.character_name, @actor.character_index)
    setup_coordinates
    dr = $game_system.party_direction || YEA::VISUAL_BATTLERS::PARTY_DIRECTION
    direction = Direction.opposite(dr)
    set_direction(Direction.correct(direction))
  end
  
  #--------------------------------------------------------------------------
  # sprite=
  #--------------------------------------------------------------------------
  def sprite=(sprite)
    @sprite = sprite
  end
  
  #--------------------------------------------------------------------------
  # setup_coordinates
  #--------------------------------------------------------------------------
  def setup_coordinates
    location = ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
    base_x = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][0]
    base_y = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][1]
    mod_x = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][2]
    mod_y = YEA::VISUAL_BATTLERS::PARTY_LOCATION_BASE_COORDINATES[location][3]
    @actor.screen_x = eval(YEA::VISUAL_BATTLERS::PARTY_LOCATION_FORMULA_X)
    @actor.screen_y = eval(YEA::VISUAL_BATTLERS::PARTY_LOCATION_FORMULA_Y)
    @actor.origin_x = @actor.screen_x
    @actor.origin_y = @actor.screen_y
    @actor.create_move_to(screen_x, screen_y, 1)
  end
  
  #--------------------------------------------------------------------------
  # index
  #--------------------------------------------------------------------------
  def index
    return @actor.index
  end
  
  #--------------------------------------------------------------------------
  # screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return @actor.screen_x
  end
  
  #--------------------------------------------------------------------------
  # screen_y
  #--------------------------------------------------------------------------
  def screen_y
    return @actor.screen_y
  end
  
  #--------------------------------------------------------------------------
  # screen_z
  #--------------------------------------------------------------------------
  def screen_z
    return @actor.screen_z
  end
  
end # Game_BattleCharacter

#==============================================================================
# ?   Game_Battler
#==============================================================================

class Game_Battler < Game_BattlerBase
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :moved_back
  attr_accessor :origin_x
  attr_accessor :origin_y
  attr_accessor :screen_x
  attr_accessor :screen_y
  attr_accessor :started_turn
  
  #--------------------------------------------------------------------------
  # alias method: execute_damage
  #--------------------------------------------------------------------------
  alias game_battler_execute_damage_vb execute_damage
  def execute_damage(user)
    game_battler_execute_damage_vb(user)
    if @result.hp_damage > 0
      move_backward(24, 6) unless @moved_back
      @moved_back = true
    end
  end
  
  #--------------------------------------------------------------------------
  # face_opposing_party
  #--------------------------------------------------------------------------
  def face_opposing_party
    direction = ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
    character.set_direction(Direction.correct(direction)) rescue 0
  end
  
  #--------------------------------------------------------------------------
  # new method: face_coordinate
  #--------------------------------------------------------------------------
  def face_coordinate(destination_x, destination_y)
    x1 = Integer(@screen_x)
    x2 = Integer(destination_x)
    y1 = Graphics.height - Integer(@screen_y)
    y2 = Graphics.height - Integer(destination_y)
    return if x1 == x2 and y1 == y2
    #---
    angle = Integer(Math.atan2((y2-y1),(x2-x1)) * 1800 / Math::PI)
    if (0..225) === angle or (-225..0) === angle
      direction = 6
    elsif (226..675) === angle
      direction = 9
    elsif (676..1125) === angle
      direction = 8
    elsif (1126..1575) === angle
      direction = 7
    elsif (1576..1800) === angle or (-1800..-1576) === angle
      direction = 4
    elsif (-1575..-1126) === angle
      direction = 1
    elsif (-1125..-676) === angle
      direction = 2
    elsif (-675..-226) === angle
      direction = 3
    end
    #---
    character.set_direction(Direction.correct(direction)) rescue 0
  end
  
  #--------------------------------------------------------------------------
  # create_move_to
  #--------------------------------------------------------------------------
  def create_move_to(destination_x, destination_y, frames = 12)
    @destination_x = destination_x
    @destination_y = destination_y
    frames = [frames, 1].max
    @move_x_rate = [(@screen_x - @destination_x).abs / frames, 2].max
    @move_y_rate = [(@screen_y - @destination_y).abs / frames, 2].max
  end
  
  #--------------------------------------------------------------------------
  # update_move_to
  #--------------------------------------------------------------------------
  def update_move_to
    @move_x_rate = 0 if @screen_x == @destination_x || @move_x_rate.nil?
    @move_y_rate = 0 if @screen_y == @destination_y || @move_y_rate.nil?
    value = [(@screen_x - @destination_x).abs, @move_x_rate].min
    @screen_x += (@destination_x > @screen_x) ? value : -value
    value = [(@screen_y - @destination_y).abs, @move_y_rate].min
    @screen_y += (@destination_y > @screen_y) ? value : -value
  end
  
  #--------------------------------------------------------------------------
  # move_forward
  #--------------------------------------------------------------------------
  def move_forward(distance = 24, frames = 12)
    direction = forward_direction
    move_direction(direction, distance, frames)
  end
  
  #--------------------------------------------------------------------------
  # move_backward
  #--------------------------------------------------------------------------
  def move_backward(distance = 24, frames = 12)
    direction = Direction.opposite(forward_direction)
    move_direction(direction, distance, frames)
  end
  
  #--------------------------------------------------------------------------
  # move_direction
  #--------------------------------------------------------------------------
  def move_direction(direction, distance = 24, frames = 12)
    case direction
    when 1; move_x = distance / -2; move_y = distance /  2
    when 2; move_x = distance *  0; move_y = distance *  1
    when 3; move_x = distance / -2; move_y = distance /  2
    when 4; move_x = distance * -1; move_y = distance *  0
    when 6; move_x = distance *  1; move_y = distance *  0
    when 7; move_x = distance / -2; move_y = distance / -2
    when 8; move_x = distance *  0; move_y = distance * -1
    when 9; move_x = distance /  2; move_y = distance / -2
    else; return
    end
    destination_x = @screen_x + move_x
    destination_y = @screen_y + move_y
    create_move_to(destination_x, destination_y, frames)
  end
  
  #--------------------------------------------------------------------------
  # forward_direction
  #--------------------------------------------------------------------------
  def forward_direction
    return ($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION)
  end
  
  #--------------------------------------------------------------------------
  # move_origin
  #--------------------------------------------------------------------------
  def move_origin
    create_move_to(@origin_x, @origin_y)
    face_coordinate(@origin_x, @origin_y)
    @moved_back = false
  end
  
  #--------------------------------------------------------------------------
  # moving?
  #--------------------------------------------------------------------------
  def moving?
    return false if dead? || !exist?
    return @move_x_rate != 0 || @move_y_rate != 0
  end
  
end # Game_Battler

#==============================================================================
# ?   Game_Actor
#==============================================================================

class Game_Actor < Game_Battler
  
  #--------------------------------------------------------------------------
  # overwrite method: use_sprite?
  #--------------------------------------------------------------------------
  def use_sprite?
    return true
  end
  
  #--------------------------------------------------------------------------
  # new method: screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return @screen_x rescue 0
  end
  
  #--------------------------------------------------------------------------
  # new method: screen_y
  #--------------------------------------------------------------------------
  def screen_y
    return @screen_y rescue 0
  end
  
  #--------------------------------------------------------------------------
  # new method: screen_z
  #--------------------------------------------------------------------------
  def screen_z
    return 100
  end
  
  #--------------------------------------------------------------------------
  # new method: sprite
  #--------------------------------------------------------------------------
  def sprite
    index = $game_party.battle_members.index(self)
    return SceneManager.scene.spriteset.actor_sprites[index]
  end
  
  #--------------------------------------------------------------------------
  # new method: character
  #--------------------------------------------------------------------------
  def character
    return sprite.character_base
  end
  
  #--------------------------------------------------------------------------
  # face_opposing_party
  #--------------------------------------------------------------------------
  def face_opposing_party
    dr = $game_system.party_direction || YEA::VISUAL_BATTLERS::PARTY_DIRECTION
    direction = Direction.opposite(dr)
    character.set_direction(Direction.correct(direction)) rescue 0
  end
  
  #--------------------------------------------------------------------------
  # forward_direction
  #--------------------------------------------------------------------------
  def forward_direction
    return Direction.opposite(($game_system.party_direction ||
    YEA::VISUAL_BATTLERS::PARTY_DIRECTION))
  end
  
end # Game_Actor

#==============================================================================
# ?   Game_Enemy
#==============================================================================

class Game_Enemy < Game_Battler
  
  #--------------------------------------------------------------------------
  # new method: sprite
  #--------------------------------------------------------------------------
  def sprite
    return SceneManager.scene.spriteset.enemy_sprites.reverse[self.index]
  end
  
  #--------------------------------------------------------------------------
  # new method: character
  #--------------------------------------------------------------------------
  def character
    return sprite
  end
  
end # Game_Enemy

#==============================================================================
# ?   Game_Troop
#==============================================================================

class Game_Troop < Game_Unit
  
  #--------------------------------------------------------------------------
  # alias method: setup
  #--------------------------------------------------------------------------
  alias game_troop_setup_vb setup
  def setup(troop_id)
    game_troop_setup_vb(troop_id)
    set_coordinates
  end
  
  #--------------------------------------------------------------------------
  # new method: set_coordinates
  #--------------------------------------------------------------------------
  def set_coordinates
    for member in members
      member.origin_x = member.screen_x
      member.origin_y = member.screen_y
      member.create_move_to(member.screen_x, member.screen_y, 1)
    end
  end
  
end # Game_Troop

#==============================================================================
# ?   Sprite_Battler
#==============================================================================

class Sprite_Battler < Sprite_Base
  
  #--------------------------------------------------------------------------
  # public instance_variable
  #--------------------------------------------------------------------------
  attr_accessor :character_base
  attr_accessor :character_sprite
  
  #--------------------------------------------------------------------------
  # alias method: dispose
  #--------------------------------------------------------------------------
  alias sprite_battler_dispose_vb dispose
  def dispose
    dispose_character_sprite
    sprite_battler_dispose_vb
  end
  
  #--------------------------------------------------------------------------
  # new method: dispose_character_sprite
  #--------------------------------------------------------------------------
  def dispose_character_sprite
    @character_sprite.dispose unless @character_sprite.nil?
  end
  
  #--------------------------------------------------------------------------
  # alias method: update
  #--------------------------------------------------------------------------
  alias sprite_battler_update_vb update
  def update
    sprite_battler_update_vb
    return if @battler.nil?
    update_move_to
    update_character_base
    update_character_sprite
  end
  
  #--------------------------------------------------------------------------
  # new method: update_character_base
  #--------------------------------------------------------------------------
  def update_character_base
    return if @character_base.nil?
    @character_base.update
  end
  
  #--------------------------------------------------------------------------
  # new method: update_character_sprite
  #--------------------------------------------------------------------------
  def update_character_sprite
    return if @character_sprite.nil?
    @character_sprite.update
  end
  
  #--------------------------------------------------------------------------
  # new method: update_move_to
  #--------------------------------------------------------------------------
  def update_move_to
    @battler.update_move_to
  end
  
  #--------------------------------------------------------------------------
  # new method: moving?
  #--------------------------------------------------------------------------
  def moving?
    return false if @battler.nil?
    return @battler.moving?
  end
  
end # Sprite_Battler

#==============================================================================
# ?   Sprite_BattleCharacter
#==============================================================================

class Sprite_BattleCharacter < Sprite_Character
  
  #--------------------------------------------------------------------------
  # initialize
  #--------------------------------------------------------------------------
  def initialize(viewport, character = nil)
    super(viewport, character)
    character.sprite = self
  end
  
end # Sprite_BattleCharacter

#==============================================================================
# ?   Spriteset_Battle
#==============================================================================

class Spriteset_Battle
  
  #--------------------------------------------------------------------------
  # public instance_variable
  #--------------------------------------------------------------------------
  attr_accessor :actor_sprites
  attr_accessor :enemy_sprites
  
  #--------------------------------------------------------------------------
  # overwrite method: create_actors
  #--------------------------------------------------------------------------
  def create_actors
    total = $game_party.max_battle_members
    @current_party = $game_party.battle_members.clone
    @actor_sprites = Array.new(total) { Sprite_Battler.new(@viewport1) }
    for actor in $game_party.battle_members
      @actor_sprites[actor.index].battler = actor
      create_actor_sprite(actor)
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: create_actor_sprite
  #--------------------------------------------------------------------------
  def create_actor_sprite(actor)
    character = Game_BattleCharacter.new(actor)
    character_sprite = Sprite_BattleCharacter.new(@viewport1, character)
    @actor_sprites[actor.index].character_base = character
    @actor_sprites[actor.index].character_sprite = character_sprite
    actor.face_opposing_party
  end
  
  #--------------------------------------------------------------------------
  # alias method: update_actors
  #--------------------------------------------------------------------------
  alias spriteset_battle_update_actors_vb update_actors
  def update_actors
    if @current_party != $game_party.battle_members
      dispose_actors
      create_actors
    end
    spriteset_battle_update_actors_vb
  end
  
  #--------------------------------------------------------------------------
  # new method: moving?
  #--------------------------------------------------------------------------
  def moving?
    return battler_sprites.any? {|sprite| sprite.moving? }
  end
  
end # Spriteset_Battle

#==============================================================================
# ?   Scene_Battle
#==============================================================================

class Scene_Battle < Scene_Base
  
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :spriteset
  
  #--------------------------------------------------------------------------
  # alias method: process_action_end
  #--------------------------------------------------------------------------
  alias scene_battle_process_action_end_vb process_action_end
  def process_action_end
    start_battler_move_origin
    scene_battle_process_action_end_vb
  end
  
  #--------------------------------------------------------------------------
  # alias method: execute_action
  #--------------------------------------------------------------------------
  alias scene_battle_execute_action_vb execute_action
  def execute_action
    start_battler_move_forward
    scene_battle_execute_action_vb
  end
  
  #--------------------------------------------------------------------------
  # new method: start_battler_move_forward
  #--------------------------------------------------------------------------
  def start_battler_move_forward
    return if @subject.started_turn
    @subject.started_turn = true
    @subject.move_forward
    wait_for_moving
  end
  
  #--------------------------------------------------------------------------
  # new method: start_battler_move_origin
  #--------------------------------------------------------------------------
  def start_battler_move_origin
    @subject.started_turn = nil
    move_battlers_origin
    wait_for_moving
    @subject.face_opposing_party rescue 0
  end
  
  #--------------------------------------------------------------------------
  # new method: move_battlers_origin
  #--------------------------------------------------------------------------
  def move_battlers_origin
    for member in all_battle_members
      next if member.dead?
      next unless member.exist?
      member.move_origin
    end
  end
  
  #--------------------------------------------------------------------------
  # new method: wait_for_moving
  #--------------------------------------------------------------------------
  def wait_for_moving
    update_for_wait
    update_for_wait while @spriteset.moving?
  end
  
end # Scene_Battle

#==============================================================================
#
#    End of File
#
#==============================================================================[/pre]

然後下面是樓上腳本需要的素材~  

lnx11a_popup.zip

549.97 KB, 下载次数: 11

第3.zip

868.99 KB, 下载次数: 11

lnx11a_cursor7.zip

20.15 KB, 下载次数: 13

点评

我說...總共有四個腳本,你只提供基礎的LNX11aconf_XP、LNX11a_XP,樓主是要其中的血條SKIN... 這神回覆我都無語了...  发表于 2013-8-18 01:24

回复

使用道具 举报

梦石
0
星屑
407
在线时间
1291 小时
注册时间
2013-1-12
回帖
3349

贵宾

发表于 2013-8-17 13:04:25 | 显示全部楼层
本帖最后由 76213585 于 2013-8-16 22:29 编辑

说明翻譯:  (請版主予許連帖)
完成了的說~
[pre lang="ruby" line="1"]
module LNX11
  #--------------------------------------------------------------------------
  # ● 基本設定
  #--------------------------------------------------------------------------
  # デフォルトで表示するアクターのバトラーグラフィック
  #  0 = 人物脸图 / 1 = 行走图
  DEFAULT_BATTLER_GRAPHIC = 0  

  # 背景颜色([Color1, Color2])
  DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
                   # 規定値:[Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]

  # 事件中的“改变画面色调”在战斗中有没有用 true = 有效 / false = 無效
  ACTOR_SCREEN_TONE       = false  

  # TP加减的弹出设定
  # 0 = 都不弹出
  # 1 = 角色弹出
  # 2 = 都會弹出
  TP_POPUP_TYPE           = 1      

  # 无伤害时不弹出伤害 true = 是 / false = 無
  INDEXZERO_NO_POPUP      = true   # 所以true時是為0不會彈出 false則相反

  #--------------------------------------------------------------------------
  # ● 人物状态区的背景
  #--------------------------------------------------------------------------
  # 人物状态区背景类型
  # 0 = 沒有
  # 1 = 特定颜色 (下面设定)
  # 2 = window文件的样式(像是对话框)
  # "文字列" = 画像
  ACTOR_BACKGROUND        = 2   #背景类型

  # 人物状态区的高度
  ACTOR_BACKGROUND_HEIGHT = 112

    #------------------------------------------------------------------------
    # 如果选则了1: 特定颜色 在这设定颜色
    #------------------------------------------------------------------------
    ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
    # 原本的:[Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]

  #--------------------------------------------------------------------------
  # ● 战斗记录設定
  #--------------------------------------------------------------------------
  # 战斗记录类型
  # 0 = VXAce默认
  # 1 = 积累型
  # 2 = 帮助显示 (ヘルプ表示) (不太懂)
  BATTLELOG_TYPE  =  1

    #------------------------------------------------------------------------
    # 如果选则了1: 积累型 在这设定
    #------------------------------------------------------------------------
    # 一次最多显示行数
    STORAGE_LINE_NUMBER     = 6   

    # 一行高度
    STORAGE_LINE_HEIGHT     = 20   

    # 自动记录的时间(帧数)
    STORAGE_UP_MESSAGE_TIME = 90   

    # 自动记录的时间一到就消除(不等到滿一次最多显示的行数)
    # true = 是
    # false = 不是
    STORAGE_TURNEND_CLEAR   = true

    # 座標調整 :x = X座標 / :y = Y座標
    STORAGE_OFFSET = {:x => 0, :y => 6}  # 規定値:{:x => 0, :y => 6}
   
   
    # :size = 框的大小
    # :out_color = 框的顏色
    STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
            # 原本:{:size => 20, :out_color => Color.new(0, 0, 0, 192)}

    # 背景顏色([Color1, Color2])
    STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
                    # 規定値:[Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]

    #------------------------------------------------------------------------
    # 如果选则了 2 : 帮助显示 在这设定
    #------------------------------------------------------------------------
    # 弹出时等待时间(帧数)
    POPUP_ADD_WAIT          = 6   

    # 行動的表示形式
    # 0 = 图标+名字
    # 1 = 只有名字
    HELPDISPLAY_TYPE        = 1   

    # 行動の表示始めの追加ウェイト (不懂)
    HELPDISPLAT_WAIT        = 20    # 規定値:20

    # 行動の表示終了までの追加ウェイト (不懂)
    HELPDISPLAT_END_WAIT    = 24    # 規定値:24

    # 行動の簡易説明文
    # :size = フォントサイズ :delimiter = 名前と簡易説明文の区切り文字  (不懂)
    HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
                     # 規定値:{:size => 20, :delimiter => " "}
#============================================
#  
#
#  下面这段感觉不是很重要......就不翻了
#
#============================================
  #--------------------------------------------------------------------------
  # ● 战斗消息設定
  #--------------------------------------------------------------------------
  # 战斗消息显示目标(战斗开始  逃跑,结果)
  # 0 = メッセージウィンドウ / 1 = バトルログ / 2 = ヘルプ
  MESSAGE_TYPE  =  2   # 規定値:2

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [0:メッセージウィンドウ] の設定
    #------------------------------------------------------------------------
    # メッセージウィンドウの背景 0 = ウィンドウ / 1 = 背景を暗くする / 2 = 透明
    MESSAGE_WINDOW_BACKGROUND  = 1     # 規定値:1

    # メッセージウィンドウの位置 0 = 上 / 1 = 中 / 2 = 下
    MESSAGE_WINDOW_POSITION    = 0     # 規定値:0

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [2:ヘルプ] の設定
    #------------------------------------------------------------------------
    # ヘルプバトルメッセージのウェイト
    #   [ウェイト(フレーム), キー入力を待つ(true = 有効 / false = 無効)]
    #  :battle_start = 戦闘開始      :victory = 勝利
    #  :escape       = 逃走          :defeat  = 敗北
    #  :drop_item    = アイテム獲得 :levelup = レベルアップ
    MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
                    :defeat       => [120, false], :escape    => [120, false],
                    :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
          # 規定値:{:battle_start => [120, false], :victory   => [ 60, false],
          #         :defeat       => [120, false], :escape    => [120, false],
          #         :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}

  # 戦闘開始時の敵出現メッセージを表示する
  MESSAGE_WINDOW_ENEMY_NAMES = false # 規定値:false

  # レベルアップ SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)   # 規定値:("Up4", 90, 100)

  # ドロップアイテム獲得 SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  # * バトルメッセージタイプが 0 以外の場合のみ再生されます。
  DROPITEM_SE = RPG::SE.new("Item3", 80, 125) # 規定値:("Item3", 80, 125)

  #--------------------------------------------------------------------------
  # ● 立繪設定
  #--------------------------------------------------------------------------
  # 在中間顯示 true = 是 / false = 不是
  ACTOR_CENTERING  =  true   

    #------------------------------------------------------------------------
    # 在中間顯示的設定
    #------------------------------------------------------------------------
    # 空間補正
    ACTOR_SPACING_ADJUST = 32 # 規定値:32

  # 座標調整 :x = X座標 / :y = Y座標
  # * アクターコマンドのX座標には影響しません。
  ACTOR_OFFSET  = {:x => -16, :y => 0}       # 原本:{:x => -16, :y => 0}

  # 画面旁留白 :side = 左右留白 / :bottom = 下方留白
  ACTOR_PADDING = {:side => 4, :bottom => 8} # 原本:{:side => 4, :bottom => 8}

  #动画位置修正
  #
  SCREEN_ANIMATION_OFFSET = 128  # 規定値:128

  #--------------------------------------------------------------------------
  # ● 战斗状态顯示設定
  #--------------------------------------------------------------------------
  # 座標的調整  :x = X座標 / :y = Y座標
  # 调整位置。
  STATUS_OFFSET = {:x => 64, :y => -12} # 規定値:{:x => 64, :y => -12}

  # 左右留白
  STATUS_SIDE_PADDING   = 6     # 規定値:6

  # 一个人状态区的宽度
  STATUS_WIDTH          = 72    # 規定値:72

  #自动调整
  STATUS_AUTOADJUST     = true  # 規定値:true

  # 最高
  STATUS_LINE_HEIGHT    = 22    # 規定値:22

  # 名字大小
  STATUS_NAME_SIZE      = 20    # 規定値:20

  # 血條的大小
  STATUS_PARAM_SIZE     = 23    # 規定値:23

  # 血條的不透明度
  STATUS_GAUGE_OPACITY  = 192   # 規定値:192

  #--------------------------------------------------------------------------
  # ● 演员指令設定
  #--------------------------------------------------------------------------
  # 超过4个可能指令(像是攻击 物品 等等的)時 true = 是 / false = 不是
  ACTOR_COMMAND_NOSCROLL   = true  # 規定値:true

  # コマンドを横並びにする true = 横並び / false = 縦並び  (不是很懂)
  ACTOR_COMMAND_HORIZON    = false # 規定値:false

  # 文字對齊
  #0 = 向左
  #1 = 向右
  #2 = 向中間
  ACTOR_COMMAND_ALIGNMENT  = 0     # 規定値:0

  #窗口的宽度
  ACTOR_COMMAND_WIDTH      = 128   # 規定値:128

  # 窗口的位置
  #  0 = 角色的頭上
  #  1 = 固定的Y座標
  #  2 = 固定的XY座標
  ACTOR_COMMAND_POSITION   = 0     

    #------------------------------------------------------------------------
    #  固定的Y座標 &固定的XY座標的設定
    #------------------------------------------------------------------------
    # 固定Y座標の基準位置
    ACTOR_COMMAND_Y_POSITION = 0   # 規定値:0

    # XY座標修正 :x = X座標 / :y = Y座標
    ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16} # 規定値:{:x => 0, :y => -16}
#===========================================
#
# 不是很重要
#
#===========================================
  #--------------------------------------------------------------------------
  # ● 設定:パーティコマンド
  #--------------------------------------------------------------------------
  # コマンドを横並びにする true = 横並び / false = 縦並び
  PARTY_COMMAND_HORIZON   = true  # 規定値:true

  # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  PARTY_COMMAND_ALIGNMENT = 1     # 規定値:1

  # ウィンドウの幅
  PARTY_COMMAND_WIDTH     = Graphics.width     # 規定値:Graphics.width

  # ウィンドウの座標 :x = X座標 / :y = Y座標
  PARTY_COMMAND_XY        = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}

  #--------------------------------------------------------------------------
  # ●目标光标
  #--------------------------------------------------------------------------
  # 图片位置 (Graphics/System/*)
  #  "" 為空的時候自動生成
  CURSOR_NAME       = ""   

    #------------------------------------------------------------------------
    # 自動生成的設定
    #------------------------------------------------------------------------
    # 可以用三色調出來 (Red, Green, Blue)
    #如果要看效果可以用数据库内的对话框颜色调配试试
    CURSOR_TONE     = Tone.new(-34, 0, 68)  # 規定値:Tone.new(-34, 0, 68)

  # 动画速度
  CURSOR_ANI_SPEED  = 3     # 規定値:3

  # 移动速度
  CURSOR_SPEED      = 3     # 規定値:3

  # 光标是否闪动
  CURSOR_BLINK      = true  
  
  # 光标Y座標上限 :min = 最小値 / :max = 最大値
  CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
             # 規定値:{:min => 48, :max => Graphics.height}

  # 光标位置XY座標修正 :x = X座標 / :y = Y座標
  CURSOR_OFFSET     = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}
#====================================
#
#  不是很重要
#
#====================================

  #--------------------------------------------------------------------------
  # ● 設定:ターゲットヘルプ
  #--------------------------------------------------------------------------
  # バトラーの各パラメータ表示 true = 表示 / false = 非表示
  HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
    # アクター規定値:{:hp => true ,:mp => true ,:tp => true ,:state => true }
    # 敵キャラ規定値:{:hp => false,:mp => false,:tp => false,:state => true }

  # HP/MP/TP ゲージの幅
  HELP_PARAM_WIDTH    = 72  # 規定値:72

  # 敵ランダムの表示形式
  # 0 = 敵全体 ランダム / 1 = 敵n体 ランダム
  RANDOMSCOPE_DISPLAY = 1   # 規定値:1

  #--------------------------------------------------------------------------
  # ● 伤害弹出设定
  #--------------------------------------------------------------------------
  # 弹出位置
  #0 = 脚下
  #1 = 中間
  #2 = 頭上
  #3 = 固定 (怪物不可用)
  ACTOR_POPUP_POSITION   = 3  # 人物的     
  ENEMY_POPUP_POSITION   = 1  # 敵人的     
  LEVELUP_POPUP_POSITION = 3  # 升等彈出位置  

    #------------------------------------------------------------------------
    # 3 = 固定(人物使用)的設定
    #------------------------------------------------------------------------
    # 人物彈出的Y 座標
    # 游戏画面的高度(Graphics.height)為基準
    ACTOR_POPUP_Y     =  -100  

    # 升級彈出的Y 座標
    # 游戏画面的高度(Graphics.height)為基準
    LEVELUP_POPUP_Y   =  -112

  #数字字体
  NUMBER_FONT   =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]

  # 本文字体
  TEXT_FONT     =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]
  TEXT_FONT_MCS =  ["VL Gothic"]       #日本語を含む場合。規定値:["VL Gothic"]

  # 字体文件名 (Graphics/System/*) <<ver1.10>>
  #  "" 如為空則用正常的字。
  # 正常時的字体文件名
  LARGE_NUMBER_NAME = ""       # 規定値:""
  SMALL_NUMBER_NAME = ""       # 規定値:""
  # 克別人/被克時的字体文件名
  LARGE_BUFFS_NAME  = ""       # 規定値:""
  SMALL_BUFFS_NAME  = ""       # 規定値:""

  # 数字中的空格
  #  :fontsize = 字体大小 / :spacing = 空几个字
  #  :width    = 每一个字的寬度 / :height = 每一个字的高度
  LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  # 原本:{:fontsize => 38, :spacing => -4, :line_height => 26}
  # 原本:{:fontsize => 28, :spacing => -4, :line_height => 20}

  # テキストのフォントサイズ倍率 (不懂)
  #   :normal     = テキスト単体 (不懂)
  #   :left_right = ダメージ左右   :top_bottom = ダメージ上下 (不懂)
  # * 数字のフォントサイズからの割合で指定します。 (不懂)
  TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
    # 原本:{:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
   
  # 有日文時的倍率
  TEXT_SIZERATE_MCS = 0.9   # 規定値:0.9
#===============
# 有点像是Vocab的東東
#===============
  DECORATION_NUMBER = {            # 規定値
  :critical    => ["CRITICAL", 8], # ["CRITICAL", 8] / クリティカル
  :weakness    => ["WEAKNESS", 8], # ["WEAKNESS", 8] / 弱点ダメージ
  :resist      => ["RESIST"  , 8], # ["RESIST"  , 8] / 耐性ダメージ
  :mp_damage   => ["\mp"     , 4], # ["\mp"     , 4] / MP ダメージ・回復
  :mp_plus     => ["\mp+"    , 4], # ["\mp+"    , 4] / MP 再生
  :mp_minus    => ["\mp-"    , 4], # ["\mp-"    , 4] / MP 消費
  :tp_plus     => ["\tp+"    , 4], # ["\tp+"    , 4] / TP 増加
  :tp_minus    => ["\tp-"    , 4], # ["\tp-"    , 4] / TP 減少
  }
  # ステートや能力強化/弱体のポップアップの修飾文字
  #  %s にステート・能力名が入る
  DECORATION_TEXT = {              # 規定値
  :add_state   => "+%s",           # "+%s"           / ステート付加
  :rem_state   => "-%s",           # "-%s"           / ステート解除
  :add_buff    => "%s UP",         # "%s UP"         / 能力強化付加
  :add_debuff  => "%s DOWN",       # "%s DOWN"       / 能力弱体付加
  :rem_buff    => "-%s Buff",      # "-%s Buff"      / 能力強化/弱体解除
  }
  # ポップアップの表示用語
  POPUP_VOCAB = {                  # 規定値
  :miss        => "MISS!",         # "MISS!"         / ミス
  :counter     => "Counter",       # "Counter"       / 反撃
  :reflection  => "Reflection",    # "Reflection"    / 反射
  :substitute  => "Substitute",    # "Substitute"    / 身代わり
  :levelup     => "LEVELUP!",      # "LEVELUP!"      / レベルアップ
  }
  # 能力強化/弱体ポップアップのパラメータ表記
  # * 文字列中の \hp \mp はデータベースで設定した用語(短)に置き換わります
  POPUP_VOCAB_PARAMS = [ # 規定値
  "MAX\hp",              # "MAX\hp"  / 最大HP    MAXimum Hit Point
  "MAX\mp",              # "MAX\mp"  / 最大MP    MAXimum Magic Point
  "ATK",                 # "ATK"     / 攻撃力    ATtacK power
  "DEF",                 # "MATK"    / 防御力    DEFense power
  "MATK",                # "MDEF"    / 魔法力    Magic ATtacK power
  "MDEF",                # "MDEF"    / 魔法防御  Magic DEFense power
  "AGI",                 # "AGI"     / 敏捷性    AGIlity
  "LUCK",                # "LUCK"    / 運        LUCK
  ]
  # ポップアップの色([Color1, Color2])
  # * ハッシュの順序を変更しないこと
  POPUP_COLOR = {
  # HP ダメージ(ミス)
  :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # クリティカルダメージ
  :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  # 弱点ダメージ
  :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 耐性ダメージ
  :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  # HP 回復(再生,吸収)
  :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  # MP ダメージ
  :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  # MP 回復(再生,吸収)
  :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  # TP 増減
  :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  # 有利なステートの付加
  :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 有利なステートの解除
  :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  # ステートの付加
  :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # ステートの解除
  :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 能力強化の付加
  :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  # 能力弱体の付加
  :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  # 能力強化/弱体の解除
  :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 反撃
  :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  # 反射
  :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  # 身代わり
  :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  # レベルアップ
  :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  }
  # ポップアップのタイプ        -1 = ポップアップしない
  #  0 = 跳ねるポップアップ(大)  4 = スライド(大)
  #  1 = 跳ねるポップアップ(小)  5 = スライド(小)
  #  2 = ゆっくり上昇(大)        6 = オーバーレイ(大)
  #  3 = ゆっくり上昇(小)        7 = オーバーレイ(小)
  POPUP_TYPE = {          # 規定値
  :miss          =>   0,  #   0 / ミス
  :hp_damage     =>   0,  #   0 / HP ダメージ
  :hp_slipdamage =>   1,  #   1 / HP スリップダメージ
  :hp_recovery   =>   0,  #   0 / HP 回復
  :hp_regenerate =>   1,  #   1 / HP 再生
  :hp_drain      =>   0,  #   0 / HP 被吸収
  :hp_drainrecv  =>   0,  #   0 / HP 吸収回復
  :mp_damage     =>   0,  #   0 / MP ダメージ
  :mp_slipdamage =>   1,  #   1 / MP スリップダメージ
  :mp_recovery   =>   0,  #   0 / MP 回復
  :mp_regenerate =>   1,  #   1 / MP 再生
  :mp_drain      =>   0,  #   0 / MP 被吸収
  :mp_drainrecv  =>   0,  #   0 / MP 吸収回復
  :mp_paycost    =>  -1,  #  -1 / MP 消費
  :tp_damage     =>   1,  #   1 / TP 増加(ダメージ)
  :tp_charge     =>  -1,  #  -1 / TP チャージ(被ダメージ時の TP 増加)
  :tp_gain       =>   7,  #   7 / TP 得
  :tp_regenerate =>   1,  #   1 / TP 再生(スリップダメージ)
  :tp_paycost    =>  -1,  #  -1 / TP 消費
  # ステート/能力
  :add_state     =>   2,  #   2 / 有利なステートの付加
  :rem_state     =>   2,  #   2 / 有利なステートの解除
  :add_badstate  =>   2,  #   2 / 不利なステートの付加
  :rem_badstate  =>   2,  #   2 / 不利なステートの解除
  :add_buff      =>   3,  #   3 / 能力強化の付加
  :add_debuff    =>   3,  #   3 / 能力弱体の付加
  :rem_buff      =>   3,  #   3 / 能力強化/弱体の解除
  # 特殊
  :counter       =>   6,  #   6 / 反撃
  :reflection    =>   6,  #   6 / 反射
  :substitute    =>   4,  #   4 / 身代わり
  }
  # 0:跳ねるポップアップの動き(大)
  LARGE_MOVEMENT = {
  :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
                       :duration     =>   40,  :fadeout      =>  20 }
  # 1:跳ねるポップアップの動き(小)
  SMALL_MOVEMENT = {
  :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
                       :duration     =>   60,  :fadeout      =>  16 }
  # 2,3:上昇ポップアップの動き
  RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
                       :duration     =>   40,  :fadeout      =>   8 }
  # 4,5:スライドポップアップの動き
  SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
                       :duration     =>   50,  :fadeout      =>  32 }
  # 6,7:オーバーレイポップアップの動き
  OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }

  # :inirate      = 初速度                :gravity    = 重力加速度
  # :side_scatter = 左右移動のばらつき    :ref_height = 跳ね返り位置
  # :ref_factor   = 反発係数              :ref_count  = 跳ね返り回数
  # :duration     = 消え始めるまでの時間  :fadeout    = 消える速度
  # :rising_speed = 上昇速度              :x_speed    = 横移動速度
  # :line_spacing = ポップアップの行間
#
#
#
#  一般人不會用到的說~
#
#
#
  #--------------------------------------------------------------------------
  # ● 設定:ユーザビリティ
  #--------------------------------------------------------------------------  
  # 効果範囲が 使用者/全体/ランダム のスキル・アイテムの対象確認を行う
  #  true = 有効 / false = 無効
  FIX_TARGET_CHECKE     = true   # 規定値:true

  # 防御コマンドの対象確認を行う     true = 有効 / false = 無効
  GUARD_TARGET_CHECKE   = true   # 規定値:true

  # アクターの対象選択を最適化する   true = 有効 / false = 無効
  SMART_TARGET_SELECT   = true   # 規定値:true

  # 対象選択のカーソル位置を記憶する true = 有効 / false = 無効
  LAST_TARGET           = true   # 規定値:true

  # パーティコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_PARTY_COMMAND    = true   # 規定値:true

  # アクターコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_ACTOR_COMMAND    = true   # 規定値:true

  # 敵キャラのインデックスを X 座標でソートする true = 有効 / false = 無効
  TROOP_X_SORT          = true   # 規定値:true

  # パーティコマンド入力回数を最適化する        true = 有効 / false = 無効
  PARTY_COMMAND_SKIP    = true   # 規定値:true

  #--------------------------------------------------------------------------
  # ● 設定:その他
  #--------------------------------------------------------------------------
  # スキルリストとアイテムリストを項目数に合わせてリサイズする
  #  true = 有効 / false = 無効
  FITTING_LIST          = true   # 規定値:true

  # バトラーの行動時の白フラッシュを強める          true = 有効 / false = 無効
  ENHANCED_WHITEN       = true   # 規定値:true

  # ダメージを受けた時の画面のシェイクを行わない    true = 有効 / false = 無効
  DISABLED_DAMAGE_SHAKE = true   # 規定値:true

  # 敵キャラの X 座標を画面サイズに合わせて修正する true = 有効 / false = 無効
  TROOP_X_SCREEN_FIX    = true   # 規定値:true

  # 敵キャラの Y 座標の調整
  TROOP_Y_OFFSET        = 0      # 規定値:0

  #
  # 設定ここまで お疲れ様でした。
  #
end
#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx11aconf] = 110 # version
p "OK:LNX11aconf_XPスタイルバトル#コンフィグ"
[/pre]

点评

好东西……  发表于 2013-8-17 14:11
累死我了喵................. 谁見过600多行的設定...  发表于 2013-8-17 13:30

回复

使用道具 举报

梦石
0
星屑
1564
在线时间
209 小时
注册时间
2013-6-19
回帖
123
发表于 2013-8-17 16:39:04 | 显示全部楼层
我再確定一次,樓主是要這個戰鬥風格的血條SKIN嗎?
Lnx11b_mainskin_b.png

如果確定無誤
把下面的檔案覆蓋到你的工程
或者,把裡面全部的圖片導入到Graphics/System
Graphics.rar (238.81 KB, 下载次数: 13)

接著再把下面四頁代碼貼到你的工程(已經幫你設定完畢,包括血條SKIN)
代碼極長,請耐心等候
一、
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11aconf_XPスタイルバトル#コンフィグ
#  このスクリプトは LNX11a_XPスタイルバトル の設定スクリプトです。
#  単体では何の機能も持ちませんのでご注意ください。
#
#  version   : 1.10 (12/11/18)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-9.html
#
#==============================================================================

module LNX11
  #--------------------------------------------------------------------------
  # ■ Index
  #
  # line 026 : 基本設定              line 244 : パーティコマンド
  # line 048 : アクターエリアの背景  line 259 : ターゲットカーソル
  # line 065 : バトルログ            line 289 : ターゲットヘルプ
  # line 118 : バトルメッセージ      line 305 : ポップアップ
  # line 159 : バトラーグラフィック  line 507 : ユーザビリティ
  # line 182 : バトルステータス      line 535 : その他
  # line 212 : アクターコマンド      
  #
  #--------------------------------------------------------------------------
  # ● 基本設定
  #--------------------------------------------------------------------------
  # デフォルトで表示するアクターのバトラーグラフィック
  #  0 = 顔グラフィック / 1 = 歩行グラフィック
  DEFAULT_BATTLER_GRAPHIC = 0  # 規定値:0
  
  # デフォルトバトラーグラフィックの背景グラデーション色([Color1, Color2])
  DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
                   # 規定値:[Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
  
  # 画面の色調変更をアクターに適用する true = 有効 / false = 無効
  # * true にするとアクターエリアの背景にも適用されます
  ACTOR_SCREEN_TONE       = false # 規定値:false
  
  # TP のポップアップ設定
  #  0 = すべてポップアップする / 1 = アクターのみ / 2 = ポップアップしない
  TP_POPUP_TYPE           = 1      # 規定値:1
  
  # アイコン無しのステートをポップアップしない true = 有効 / false = 無効
  INDEXZERO_NO_POPUP      = true   # 規定値:true

  #--------------------------------------------------------------------------
  # ● 設定:アクターエリアの背景
  #--------------------------------------------------------------------------
  # アクターエリアの背景のタイプ
  #  0 = 無し / 1 = グラデーション / 2 = ウィンドウ / "文字列" = 画像
  ACTOR_BACKGROUND        = 1   # 規定値:2
  
  # アクターエリア背景の高さ
  ACTOR_BACKGROUND_HEIGHT = 112# 規定値:112
  
    #------------------------------------------------------------------------
    # ○ タイプ [1:グラデーション] の設定
    #------------------------------------------------------------------------
    # グラデーションの色([Color1, Color2])
    ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
                     # 規定値:[Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルログ
  #--------------------------------------------------------------------------
  # バトルログ(戦闘進行の実況)のタイプ
  # 0 = VXAceデフォルト / 1 = 蓄積型 / 2 = ヘルプ表示
  BATTLELOG_TYPE  =  1  # 規定値:1
  
    #------------------------------------------------------------------------
    # ○ バトルログタイプ [1:蓄積型] の設定
    #------------------------------------------------------------------------
    # 一度に表示する行数
    STORAGE_LINE_NUMBER     = 6     # 規定値:6
   
    # 一行の高さ
    STORAGE_LINE_HEIGHT     = 20    # 規定値:20
   
    # 自動的にログが進行する時間(フレーム)
    STORAGE_UP_MESSAGE_TIME = 90    # 規定値:90
   
    # ターン終了時にバトルログを消去する true = 有効 / false = 無効
    STORAGE_TURNEND_CLEAR   = true  # 規定値:true
   
    # 座標の調整 :x = X座標 / :y = Y座標
    STORAGE_OFFSET = {:x => 0, :y => 6}  # 規定値:{:x => 0, :y => 6}
   
    # フォント :size = フォントサイズ / :out_color = テキストの縁取り色
    STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
            # 規定値:{:size => 20, :out_color => Color.new(0, 0, 0, 192)}
   
    # 背景のグラデーションの色([Color1, Color2])
    STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
                    # 規定値:[Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
   
    #------------------------------------------------------------------------
    # ○ バトルログタイプ [2:ヘルプ表示] の設定
    #------------------------------------------------------------------------
    # ポップアップのウェイト
    POPUP_ADD_WAIT          = 6     # 規定値:6

    # 行動の表示形式 0 = アイコン+名前 / 1 = 名前のみ
    HELPDISPLAY_TYPE        = 1     # 規定値:1
   
    # 行動の表示始めの追加ウェイト
    HELPDISPLAT_WAIT        = 20    # 規定値:20
   
    # 行動の表示終了までの追加ウェイト
    HELPDISPLAT_END_WAIT    = 24    # 規定値:24
   
    # 行動の簡易説明文
    # :size = フォントサイズ :delimiter = 名前と簡易説明文の区切り文字
    HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
                     # 規定値:{:size => 20, :delimiter => " "}
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルメッセージ
  #--------------------------------------------------------------------------
  # バトルメッセージ(戦闘開始・逃走・リザルト等)の表示先
  # 0 = メッセージウィンドウ / 1 = バトルログ / 2 = ヘルプ
  MESSAGE_TYPE  =  0   # 規定値:2

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [0:メッセージウィンドウ] の設定
    #------------------------------------------------------------------------
    # メッセージウィンドウの背景 0 = ウィンドウ / 1 = 背景を暗くする / 2 = 透明
    MESSAGE_WINDOW_BACKGROUND  = 1     # 規定値:1
  
    # メッセージウィンドウの位置 0 = 上 / 1 = 中 / 2 = 下
    MESSAGE_WINDOW_POSITION    = 0     # 規定値:0

    #------------------------------------------------------------------------
    # ○ バトルメッセージタイプ [2:ヘルプ] の設定
    #------------------------------------------------------------------------
    # ヘルプバトルメッセージのウェイト
    #   [ウェイト(フレーム), キー入力を待つ(true = 有効 / false = 無効)]
    #  :battle_start = 戦闘開始      :victory = 勝利
    #  :escape       = 逃走          :defeat  = 敗北
    #  :drop_item    = アイテム獲得 :levelup = レベルアップ
    MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
                    :defeat       => [120, false], :escape    => [120, false],
                    :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
          # 規定値:{:battle_start => [120, false], :victory   => [ 60, false],
          #         :defeat       => [120, false], :escape    => [120, false],
          #         :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
  
  # 戦闘開始時の敵出現メッセージを表示する
  MESSAGE_WINDOW_ENEMY_NAMES = false # 規定値:false
  
  # レベルアップ SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)   # 規定値:("Up4", 90, 100)
  
  # ドロップアイテム獲得 SE  RPG::SE.new("ファイル名", 音量, ピッチ)
  # * バトルメッセージタイプが 0 以外の場合のみ再生されます。
  DROPITEM_SE = RPG::SE.new("Item3", 80, 125) # 規定値:("Item3", 80, 125)
  
  #--------------------------------------------------------------------------
  # ● 設定:アクターのバトラーグラフィック
  #--------------------------------------------------------------------------
  # アクター表示を中央揃えにする true = 有効 / false = 左揃え
  ACTOR_CENTERING  =  true    # 規定値:true

    #------------------------------------------------------------------------
    # ○ アクター表示中央揃えの設定
    #------------------------------------------------------------------------
    # アクター間のスペースの大きさ補正
    ACTOR_SPACING_ADJUST = 32 # 規定値:32
   
  # 座標の調整 :x = X座標 / :y = Y座標
  # * アクターコマンドのX座標には影響しません。
  ACTOR_OFFSET  = {:x => -16, :y => 0}       # 規定値:{:x => -16, :y => 0}
  
  # アクターエリアと画面端との余白 :side = 左右の余白 / :bottom = 下の余白
  ACTOR_PADDING = {:side => 4, :bottom => 8} # 規定値:{:side => 4, :bottom => 8}
  
  # パーティに対する画面アニメーションのY座標修正
  #  位置が[画面]のアニメーションをパーティの中心に表示されるようにします。
  SCREEN_ANIMATION_OFFSET = 128  # 規定値:128
  
  #--------------------------------------------------------------------------
  # ● 設定:バトルステータス
  #--------------------------------------------------------------------------
  # 座標の調整  :x = X座標 / :y = Y座標
  #  X 座標はアクターの中心を基準とします。
  # * パーティメンバーの数やステータス幅によっては、X 座標が自動的に
  # 調整される場合があります。
  STATUS_OFFSET = {:x => 64, :y => -12} # 規定値:{:x => 64, :y => -12}
  
  # 画面左右端の余白
  STATUS_SIDE_PADDING   = 6     # 規定値:6
  
  # アクター1人あたりのステータス幅
  STATUS_WIDTH          = 72    # 規定値:72

  # ステータス幅の自動調整を行う
  STATUS_AUTOADJUST     = true  # 規定値:true
  
  # 行の高さ
  STATUS_LINE_HEIGHT    = 22    # 規定値:22
  
  # アクターの名前のフォントサイズ 値を 0 にすると非表示になる
  STATUS_NAME_SIZE      = 20    # 規定値:20
  
  # HP/MP/TPのフォントサイズ
  STATUS_PARAM_SIZE     = 23    # 規定値:23
  
  # HP/MP/TPゲージの不透明度 (0-255)
  STATUS_GAUGE_OPACITY  = 192   # 規定値:192

  #--------------------------------------------------------------------------
  # ● 設定:アクターコマンド
  #--------------------------------------------------------------------------
  # コマンドの項目数が 4 を超える場合、項目がすべて見えるように
  # コマンドウィンドウの高さを拡張する true = 有効 / false = 無効
  ACTOR_COMMAND_NOSCROLL   = true  # 規定値:true
  
  # コマンドを横並びにする true = 横並び / false = 縦並び
  ACTOR_COMMAND_HORIZON    = false # 規定値:false

  # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  ACTOR_COMMAND_ALIGNMENT  = 0     # 規定値:0
  
  # ウィンドウの横幅
  #  コマンドを横並びにする場合、大きめの値を設定してください。
  ACTOR_COMMAND_WIDTH      = 128   # 規定値:128
  
  # ウィンドウの位置
  #  0 = アクターの頭上 / 1 = Y座標を固定 / 2 = XY座標を固定
  ACTOR_COMMAND_POSITION   = 0     # 規定値:0

    #------------------------------------------------------------------------
    # ○ ウィンドウの位置 [1:Y座標固定 2:XY座標] の設定
    #------------------------------------------------------------------------
    # 固定Y座標の基準位置
    # 0 = 画面下端 - ウィンドウの高さ / 画面上端
    ACTOR_COMMAND_Y_POSITION = 0   # 規定値:0
  
    # ウィンドウのXY座標修正 :x = X座標 / :y = Y座標
    # * コマンド位置が 1 or 2 の場合、ここで設定した値で座標を固定します。
    ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16} # 規定値:{:x => 0, :y => -16}
  
  #--------------------------------------------------------------------------
  # ● 設定:パーティコマンド
  #--------------------------------------------------------------------------
  # コマンドを横並びにする true = 横並び / false = 縦並び
  PARTY_COMMAND_HORIZON   = true  # 規定値:true
  
  # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  PARTY_COMMAND_ALIGNMENT = 1     # 規定値:1
  
  # ウィンドウの幅

  PARTY_COMMAND_WIDTH = Graphics.width # 規定値:Graphics.width 這裡很弔詭
  
  # ウィンドウの座標 :x = X座標 / :y = Y座標
  PARTY_COMMAND_XY        = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}
  
  #--------------------------------------------------------------------------
  # ● 設定:ターゲットカーソル
  #--------------------------------------------------------------------------
  # カーソルグラフィックのファイル名 (Graphics/System/*)
  #  "" を設定した場合、Bitmap の機能でカーソルを自動生成します。
  CURSOR_NAME       = ""    # 規定値:""
  
    #------------------------------------------------------------------------
    # ○ 自動生成のカーソルグラフィックの設定
    #------------------------------------------------------------------------
    # カーソルの色調 (Red, Green, Blue)
    #  nil を設定した場合、データベースのウィンドウカラーと同じになります。
    CURSOR_TONE     = Tone.new(-34, 0, 68)  # 規定値:Tone.new(-34, 0, 68)
  
  # アニメーションスピード
  CURSOR_ANI_SPEED  = 3     # 規定値:3
   
  # 移動スピード
  CURSOR_SPEED      = 3     # 規定値:3
  
  # 対象選択時にカーソルを点滅させる
  CURSOR_BLINK      = true  # 規定値:true
  
  # カーソルのY座標の制限 :min = 最小値 / :max = 最大値
  CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
             # 規定値:{:min => 48, :max => Graphics.height}
  
  # カーソル位置のXY座標修正 :x = X座標 / :y = Y座標
  CURSOR_OFFSET     = {:x => 0, :y => 0} # 規定値:{:x => 0, :y => 0}

  #--------------------------------------------------------------------------
  # ● 設定:ターゲットヘルプ
  #--------------------------------------------------------------------------
  # バトラーの各パラメータ表示 true = 表示 / false = 非表示
  HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
    # アクター規定値:{:hp => true ,:mp => true ,:tp => true ,:state => true }
    # 敵キャラ規定値:{:hp => false,:mp => false,:tp => false,:state => true }
  
  # HP/MP/TP ゲージの幅
  HELP_PARAM_WIDTH    = 72  # 規定値:72
  
  # 敵ランダムの表示形式
  # 0 = 敵全体 ランダム / 1 = 敵n体 ランダム
  RANDOMSCOPE_DISPLAY = 1   # 規定値:1
  
  #--------------------------------------------------------------------------
  # ● 設定:ポップアップ
  #--------------------------------------------------------------------------
  # ポップアップ位置 0 = 足元 / 1 = 中心 / 2 = 頭上 / 3 = 一定(アクターのみ)
  ACTOR_POPUP_POSITION   = 3  # アクター     規定値:3
  ENEMY_POPUP_POSITION   = 1  # 敵キャラ     規定値:1
  LEVELUP_POPUP_POSITION = 3  # レベルアップ 規定値:3
  
    #------------------------------------------------------------------------
    # ○ ポップアップ位置 [3:一定(アクターのみ)] の設定
    #------------------------------------------------------------------------
    # アクターのポップアップの Y 座標
    #  ゲーム画面の高さ(Graphics.height)を基準とします。
    ACTOR_POPUP_Y     =  -100  # 規定値:-100
   
    # レベルアップのポップアップの Y 座標
    #  ゲーム画面の高さ(Graphics.height)を基準とします。
    LEVELUP_POPUP_Y   =  -112  # 規定値:-112
  
  # 数字のフォント
  NUMBER_FONT   =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]
  
  # ステート等のテキストのフォント
  TEXT_FONT     =  ["Arial Black", "VL Gothic"] # ["Arial Black", "VL Gothic"]
  TEXT_FONT_MCS =  ["VL Gothic"]       #日本語を含む場合。規定値:["VL Gothic"]
  
  # 画像フォントのファイル名 (Graphics/System/*) <<ver1.10>>
  #  "" を設定した場合、通常のフォントを利用します。
  # 数字
  LARGE_NUMBER_NAME = "popup_number02_large"       # 規定値:""
  SMALL_NUMBER_NAME = "popup_number02_small"       # 規定値:""
  # 能力強化/弱体
  LARGE_BUFFS_NAME  = "popup_buffs_large"       # 規定値:""
  SMALL_BUFFS_NAME  = "popup_buffs_small"       # 規定値:""
  
  # 数字のサイズ・字間
  #  :fontsize = フォントサイズ / :spacing = 字間
  #  :width    = 一字あたりの幅 / :height = 一字あたりの高さ
  LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  # 大サイズ規定値:{:fontsize => 38, :spacing => -4, :line_height => 26}
  # 小サイズ規定値:{:fontsize => 28, :spacing => -4, :line_height => 20}
  
  # テキストのフォントサイズ倍率
  #   :normal     = テキスト単体
  #   :left_right = ダメージ左右   :top_bottom = ダメージ上下
  # * 数字のフォントサイズからの割合で指定します。
  TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
             # 規定値:{:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
  
  # 日本語を含むテキストのフォントサイズ倍率
  # * 通常のテキストフォントサイズからの倍率で指定します。
  TEXT_SIZERATE_MCS = 0.9   # 規定値:0.9
  
  # ポップアップの修飾文字
  # ["テキスト", 修飾文字の位置(2 = 下 / 4 = 左 / 6 = 右 / 8 = 上)]
  # * 文字列中の \mp \tp はデータベースで設定した用語(短)に置き換わります
  DECORATION_NUMBER = {            # 規定値
  :critical    => ["_CRITICAL", 8], # ["CRITICAL", 8] / クリティカル
  :weakness    => ["_WEAKNESS", 8], # ["WEAKNESS", 8] / 弱点ダメージ
  :resist      => ["_RESIST"  , 8], # ["RESIST"  , 8] / 耐性ダメージ
  :mp_damage   => ["_\mp"     , 4], # ["\mp"     , 4] / MP ダメージ・回復
  :mp_plus     => ["_\mp+"    , 4], # ["\mp+"    , 4] / MP 再生
  :mp_minus    => ["_\mp-"    , 4], # ["\mp-"    , 4] / MP 消費
  :tp_plus     => ["_\tp+"    , 4], # ["\tp+"    , 4] / TP 増加
  :tp_minus    => ["_\tp-"    , 4], # ["\tp-"    , 4] / TP 減少
  }
  # ステートや能力強化/弱体のポップアップの修飾文字
  #  %s にステート・能力名が入る
  DECORATION_TEXT = {              # 規定値
  :add_state   => "+%s",           # "+%s"           / ステート付加
  :rem_state   => "-%s",           # "-%s"           / ステート解除
  :add_buff    => "%s UP",         # "%s UP"         / 能力強化付加
  :add_debuff  => "%s DOWN",       # "%s DOWN"       / 能力弱体付加
  :rem_buff    => "-%s Buff",      # "-%s Buff"      / 能力強化/弱体解除
  }
  # ポップアップの表示用語
  POPUP_VOCAB = {                  # 規定値
  :miss        => "_MISS",         # "MISS!"         / ミス
  :counter     => "_Counter",       # "Counter"       / 反撃
  :reflection  => "_Reflection",    # "Reflection"    / 反射
  :substitute  => "_Substitute",    # "Substitute"    / 身代わり
  :levelup     => "_LEVELUP",      # "LEVELUP!"      / レベルアップ
  }
  # 能力強化/弱体ポップアップのパラメータ表記
  # * 文字列中の \hp \mp はデータベースで設定した用語(短)に置き換わります
  POPUP_VOCAB_PARAMS = [ # 規定値
  "MAX\hp",              # "MAX\hp"  / 最大HP    MAXimum Hit Point
  "MAX\mp",              # "MAX\mp"  / 最大MP    MAXimum Magic Point
  "ATK",                 # "ATK"     / 攻撃力    ATtacK power
  "DEF",                 # "MATK"    / 防御力    DEFense power
  "MATK",                # "MDEF"    / 魔法力    Magic ATtacK power
  "MDEF",                # "MDEF"    / 魔法防御  Magic DEFense power
  "AGI",                 # "AGI"     / 敏捷性    AGIlity
  "LUCK",                # "LUCK"    / 運        LUCK
  ]
  # ポップアップの色([Color1, Color2])
  # * ハッシュの順序を変更しないこと
  POPUP_COLOR = {
  # HP ダメージ(ミス)
  :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # クリティカルダメージ
  :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  # 弱点ダメージ
  :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 耐性ダメージ
  :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  # HP 回復(再生,吸収)
  :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  # MP ダメージ
  :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  # MP 回復(再生,吸収)
  :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  # TP 増減
  :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  # 有利なステートの付加
  :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  # 有利なステートの解除
  :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  # ステートの付加
  :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  # ステートの解除
  :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 能力強化の付加
  :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  # 能力弱体の付加
  :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  # 能力強化/弱体の解除
  :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  # 反撃
  :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  # 反射
  :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  # 身代わり
  :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  # レベルアップ
  :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  }
  # ポップアップのタイプ        -1 = ポップアップしない
  #  0 = 跳ねるポップアップ(大)  4 = スライド(大)
  #  1 = 跳ねるポップアップ(小)  5 = スライド(小)
  #  2 = ゆっくり上昇(大)        6 = オーバーレイ(大)
  #  3 = ゆっくり上昇(小)        7 = オーバーレイ(小)
  POPUP_TYPE = {          # 規定値
  :miss          =>   0,  #   0 / ミス
  :hp_damage     =>   0,  #   0 / HP ダメージ
  :hp_slipdamage =>   1,  #   1 / HP スリップダメージ
  :hp_recovery   =>   0,  #   0 / HP 回復
  :hp_regenerate =>   1,  #   1 / HP 再生
  :hp_drain      =>   0,  #   0 / HP 被吸収
  :hp_drainrecv  =>   0,  #   0 / HP 吸収回復
  :mp_damage     =>   0,  #   0 / MP ダメージ
  :mp_slipdamage =>   1,  #   1 / MP スリップダメージ
  :mp_recovery   =>   0,  #   0 / MP 回復
  :mp_regenerate =>   1,  #   1 / MP 再生
  :mp_drain      =>   0,  #   0 / MP 被吸収
  :mp_drainrecv  =>   0,  #   0 / MP 吸収回復
  :mp_paycost    =>  -1,  #  -1 / MP 消費
  :tp_damage     =>   1,  #   1 / TP 増加(ダメージ)
  :tp_charge     =>  -1,  #  -1 / TP チャージ(被ダメージ時の TP 増加)
  :tp_gain       =>   7,  #   7 / TP 得
  :tp_regenerate =>   1,  #   1 / TP 再生(スリップダメージ)
  :tp_paycost    =>  -1,  #  -1 / TP 消費
  # ステート/能力
  :add_state     =>   2,  #   2 / 有利なステートの付加
  :rem_state     =>   2,  #   2 / 有利なステートの解除
  :add_badstate  =>   2,  #   2 / 不利なステートの付加
  :rem_badstate  =>   2,  #   2 / 不利なステートの解除
  :add_buff      =>   3,  #   3 / 能力強化の付加
  :add_debuff    =>   3,  #   3 / 能力弱体の付加
  :rem_buff      =>   3,  #   3 / 能力強化/弱体の解除
  # 特殊
  :counter       =>   6,  #   6 / 反撃
  :reflection    =>   6,  #   6 / 反射
  :substitute    =>   4,  #   4 / 身代わり
  }
  # 0:跳ねるポップアップの動き(大)
  LARGE_MOVEMENT = {
  :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
                       :duration     =>   40,  :fadeout      =>  20 }
  # 1:跳ねるポップアップの動き(小)
  SMALL_MOVEMENT = {
  :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
                       :duration     =>   60,  :fadeout      =>  16 }
  # 2,3:上昇ポップアップの動き
  RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
                       :duration     =>   40,  :fadeout      =>   8 }
  # 4,5:スライドポップアップの動き
  SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
                       :duration     =>   50,  :fadeout      =>  32 }
  # 6,7:オーバーレイポップアップの動き
  OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }

  # :inirate      = 初速度                :gravity    = 重力加速度
  # :side_scatter = 左右移動のばらつき    :ref_height = 跳ね返り位置
  # :ref_factor   = 反発係数              :ref_count  = 跳ね返り回数
  # :duration     = 消え始めるまでの時間  :fadeout    = 消える速度
  # :rising_speed = 上昇速度              :x_speed    = 横移動速度
  # :line_spacing = ポップアップの行間
  
  #--------------------------------------------------------------------------
  # ● 設定:ユーザビリティ
  #--------------------------------------------------------------------------  
  # 効果範囲が 使用者/全体/ランダム のスキル・アイテムの対象確認を行う
  #  true = 有効 / false = 無効
  FIX_TARGET_CHECKE     = true   # 規定値:true
   
  # 防御コマンドの対象確認を行う     true = 有効 / false = 無効
  GUARD_TARGET_CHECKE   = true   # 規定値:true
  
  # アクターの対象選択を最適化する   true = 有効 / false = 無効
  SMART_TARGET_SELECT   = true   # 規定値:true
  
  # 対象選択のカーソル位置を記憶する true = 有効 / false = 無効
  LAST_TARGET           = true   # 規定値:true

  # パーティコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_PARTY_COMMAND    = true   # 規定値:true
  
  # アクターコマンドのカーソル位置を記憶する    true = 有効 / false = 無効
  LAST_ACTOR_COMMAND    = true   # 規定値:true
  
  # 敵キャラのインデックスを X 座標でソートする true = 有効 / false = 無効
  TROOP_X_SORT          = true   # 規定値:true
  
  # パーティコマンド入力回数を最適化する        true = 有効 / false = 無効
  PARTY_COMMAND_SKIP    = true   # 規定値:true
  
  #--------------------------------------------------------------------------
  # ● 設定:その他
  #--------------------------------------------------------------------------
  # スキルリストとアイテムリストを項目数に合わせてリサイズする
  #  true = 有効 / false = 無効
  FITTING_LIST          = true   # 規定値:true
   
  # バトラーの行動時の白フラッシュを強める          true = 有効 / false = 無効
  ENHANCED_WHITEN       = true   # 規定値:true
  
  # ダメージを受けた時の画面のシェイクを行わない    true = 有効 / false = 無効
  DISABLED_DAMAGE_SHAKE = true   # 規定値:true
  
  # 敵キャラの X 座標を画面サイズに合わせて修正する true = 有効 / false = 無効
  TROOP_X_SCREEN_FIX    = true   # 規定値:true
  
  # 敵キャラの Y 座標の調整
  TROOP_Y_OFFSET        = 0      # 規定値:0
  
  #
  # 設定ここまで お疲れ様でした。
  #
end
#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx11aconf] = 110 # version
p "OK:LNX11aconf_XPスタイルバトル#コンフィグ"[/pre]

二、
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11a_XPスタイルバトル
#  戦闘画面をRPGツクールXP準拠のものに変更します。
#
#  version   : 1.11 (13/06/19)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-9.html
#
#==============================================================================

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

module LNX11
  #--------------------------------------------------------------------------
  # ● 正規表現
  #--------------------------------------------------------------------------
  # アクター:バトラーグラフィック = "ファイル名"
  RE_BATTLER = /(?:バトラーグラフィック|battler_graphic)\s*=\s*"([^"]*)"/i
  # アイテム/スキル:使用時アニメ = アニメーションID
  RE_USE_ANIMATION = /(?:使用時アニメ|use_animation)\s*=\s*(\d+)/i
  # アイテム/スキル:ヘルプ説明 = "説明文"
  RE_SHORT_DESCRIPTION =/(?:ヘルプ説明|short_description)\s*=\s*"([^"]*)"/i
  # アイテム/スキル:ヘルプ非表示
  RE_USABLEITEM_NO_DISPLAY = /(?:ヘルプ非表示|no_display)/i
  # アイテム/スキル:使用時追加ウェイト = duration
  RE_DISPLAY_WAIT = /(?:使用時追加ウェイト|display_wait)\s*=\s*(\d+)/i
  # アイテム/スキル:終了時追加ウェイト = duration
  RE_END_WAIT = /(?:終了時追加ウェイト|end_wait)\s*=\s*(\d+)/i
  # 敵キャラ:通常攻撃アニメ = アニメーションID
  RE_ATK_ANIMATION = /(?:通常攻撃アニメ|atk_animation)\s*=\s*(\d+)/i
  # ステート:ステートアニメ = アニメーションID
  RE_STATE_ANIMATION = /(?:ステートアニメ|state_animation)\s*=\s*(\d+)/i
  # ステート:ポップアップ表示名 = "表示名"
  RE_STATE_DISPLAY = /(?:ポップアップ表示名|display_name)\s*=\s*"([^"]*)"/i
  # ステート:ポップアップ非表示
  RE_STATE_NO_DISPLAY = /(?:ポップアップ非表示|no_display)/i
  # ステート:付加ポップアップ非表示
  RE_STATE_ADD_NO_DISPLAY = /(?:付加ポップアップ非表示|add_no_display)/i
  # ステート:解除ポップアップ非表示
  RE_STATE_REM_NO_DISPLAY = /(?:解除ポップアップ非表示|remove_no_display)/i
  # ステート:有利なステート
  RE_STATE_ADVANTAGE = /(?:有利なステート|advantage_state)/i
  # ステート:ポップアップタイプ = type_id
  RE_STATE_TYPE = /(?:ポップアップタイプ|popup_type)\s*=\s*(\d+)/i
  # ステート:付加ポップアップタイプ = type_id
  RE_STATE_ADD_TYPE = /(?:付加ポップアップタイプ|add_popup_type)\s*=\s*(\d+)/i
  # ステート:解除ポップアップタイプ = type_id
  RE_STATE_REM_TYPE=/(?:解除ポップアップタイプ|remove_popup_type)\s*=\s*(\d+)/i
  # ステート:修飾文字非表示
  RE_STATE_NO_DECORATION = /(?:修飾文字非表示|no_decoration)/i
  # ステート:付加修飾文字非表示
  RE_STATE_ADD_NO_DECORATION = /(?:付加修飾文字非表示|add_no_decoration)/i
  # ステート:解除修飾文字非表示
  RE_STATE_REM_NO_DECORATION = /(?:解除修飾文字非表示|remove_no_decoration)/i
  # <<ver1.10>>
  # ステート:付加ポップアップ表示名 = "表示名"
  RE_STATE_ADD_DISPLAY =
  /(?:付加ポップアップ表示名|add_display_name)\s*=\s*"([^"]*)"/i
  # ステート:解除ポップアップ表示名 = "表示名"
  RE_STATE_REM_DISPLAY =
  /(?:解除ポップアップ表示名|remove_display_name)\s*=\s*"([^"]*)"/i
  #--------------------------------------------------------------------------
  # ● バトルステータス更新
  #--------------------------------------------------------------------------
  # LNX11.バトルステータス更新
  def self.battle_status_refresh
    $game_temp.battle_status_refresh
  end
  def self.バトルステータス更新
    self.battle_status_refresh
  end  
  #--------------------------------------------------------------------------
  # ● アクターエリア表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクターエリア表示
  def self.actor_area_show
    self.actor_show
    self.status_show
    self.actor_bg_show
  end
  def self.アクターエリア表示
    self.actor_area_show
  end
  # LNX11.アクターエリア非表示
  def self.actor_area_hide
    self.actor_hide
    self.status_hide
    self.actor_bg_hide
  end
  def self.アクターエリア非表示
    self.actor_area_hide
  end
  #--------------------------------------------------------------------------
  # ● アクター表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクター表示
  def self.actor_show
    $game_party.actor_invisible = false
  end
  def self.アクター表示
    self.actor_show
  end
  # LNX11.アクター非表示
  def self.actor_hide
    $game_party.actor_invisible = true
  end
  def self.アクター非表示
    self.actor_hide
  end
  #--------------------------------------------------------------------------
  # ● バトルステータス表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.バトルステータス表示
  def self.status_show
    $game_party.status_invisible = false
    self.battle_status_refresh
  end
  def self.バトルステータス表示
    self.status_show
  end
  # LNX11.バトルステータス非表示
  def self.status_hide
    $game_party.status_invisible = true
    self.battle_status_refresh
  end
  def self.バトルステータス非表示
    self.status_hide
  end
  #--------------------------------------------------------------------------
  # ● アクター背景表示/非表示
  #--------------------------------------------------------------------------
  # LNX11.アクター背景表示
  def self.actor_bg_show
    $game_party.actor_bg_invisible = false
  end
  def self.アクター背景表示
    self.actor_bg_show
  end
  # LNX11.アクター背景非表示
  def self.actor_bg_hide
    $game_party.actor_bg_invisible = true
  end
  def self.アクター背景非表示
    self.actor_bg_hide
  end  
  #--------------------------------------------------------------------------
  # ● バトラーグラフィックのスクリプト指定
  #--------------------------------------------------------------------------
  # LNX11.バトラーグラフィック(id, filename)
  def self.battler_graphic(id ,filename)
    if id.is_a?(Numeric) && filename.is_a?(String)
      p "LNX11a:バトラーグラフィックを変更しました:ID#{id} #{filename}"
      $game_actors[id].battler_graphic_name = filename
    else
      errormes =  "LNX11a:バトラーグラフィック指定の引数が正しくありません。"
      p errormes, "LNX11a:バトラーグラフィックの指定は行われませんでした。"
      msgbox errormes
    end
  end
  def self.バトラーグラフィック(id ,filename)
    self.battler_graphic(id ,filename)
  end
  #--------------------------------------------------------------------------
  # ● 任意のポップアップを生成
  #--------------------------------------------------------------------------
  # LNX11.ポップアップ(battler, popup, type, color, deco)
  def self.make_popup(battler, popup, type = 0, color = :hp_damage, deco = nil)
    return unless $game_party.in_battle
    target = self.battler_search(battler)
    unless target.is_a?(Game_Battler)
      p "LNX11a:任意のポップアップの生成に失敗しました。バトラー指定が"
      p "LNX11a:間違っているか、バトラーが存在していない可能性があります。"
      return
    end
    $game_temp.popup_data.popup_custom(target, popup, type, color, deco)   
  end
  def self.ポップアップ(battler, popup, type=0, color=:hp_damage, deco=nil)
    self.make_popup(battler, popup, type, color, deco)
  end
  #--------------------------------------------------------------------------
  # ● バトラー指定
  #--------------------------------------------------------------------------
  def self.battler_search(val)
    if val.is_a?(String)
      # 名前指定
      a = ($game_party.members + $game_troop.members).find {|b| b.name == val }
      return a
    elsif val.is_a?(Array)
      # インデックス指定
      case val[0]
      when :actor ; return $game_party.members[val[1]]
      when :enemy ; return $game_troop.members[val[1]]
      else        ; return nil
      end
    else
      # オブジェクト
      return val
    end
  end
  #--------------------------------------------------------------------------
  # ● バトルログプッシュ
  #--------------------------------------------------------------------------
  # LNX11.バトルログ(text)
  def self.battle_log_push(text)
    return unless $game_party.in_battle
    case BATTLELOG_TYPE
    when 0..1 # バトルログ
      BattleManager.log_window.add_text(text)
    when 2 # 簡易ヘルプ表示
      BattleManager.helpdisplay_set(text, 0)
    end
  end
  def self.バトルログ(text)
    self.battle_log_push(text)
  end
  #--------------------------------------------------------------------------
  # ● バトルログ消去
  #--------------------------------------------------------------------------
  # LNX11.バトルログ消去
  def self.battle_log_clear
    return unless $game_party.in_battle
    case BATTLELOG_TYPE
    when 0 # バトルログ
      BattleManager.log_window.clear
    when 1 # 蓄積型
      BattleManager.log_window.clear
      $game_temp.battlelog_clear = true
      self.battle_wait(1)
    when 2 # 簡易ヘルプ
      BattleManager.helpdisplay_clear(0)
    end
  end
  def self.バトルログ消去
    self.battle_log_clear
  end
  #--------------------------------------------------------------------------
  # ● バトルウェイト
  #--------------------------------------------------------------------------
  # LNX11.バトルウェイト(duration)
  def self.battle_wait(duration)
    return unless $game_party.in_battle
    BattleManager.log_window.abs_wait(duration)
  end
  def self.バトルウェイト(duration)
    self.battle_wait(duration)
  end
  #--------------------------------------------------------------------------
  # ● 設定値
  #  ※ 設定を変更する場合、LNX11aconf を使用してください。
  #--------------------------------------------------------------------------
  # <<ver1.00>>
  if !$lnx_include[:lnx11aconf] ||
     $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 100
  DEFAULT_BATTLER_GRAPHIC = 0
  DEFAULT_BG_COLOR        = [Color.new(0, 0, 0, 0), Color.new(0, 0, 0, 0)]
  ACTOR_SCREEN_TONE       = false
  TP_POPUP_TYPE           = 1
  INDEXZERO_NO_POPUP      = true
  ACTOR_BACKGROUND        = 2
  ACTOR_BACKGROUND_HEIGHT = 112
  ACTOR_BG_GRADIENT_COLOR = [Color.new(0, 0, 0, 96), Color.new(0, 0, 0, 224)]
  BATTLELOG_TYPE  =  1
  STORAGE_LINE_NUMBER     = 6
  STORAGE_LINE_HEIGHT     = 20
  STORAGE_UP_MESSAGE_TIME = 90
  STORAGE_TURNEND_CLEAR   = true
  STORAGE_OFFSET = {:x => 0, :y => 6}
  STORAGE_FONT   = {:size => 20, :out_color => Color.new(0, 0, 0, 192)}
  STORAGE_GRADIENT_COLOR = [Color.new(0, 0, 0, 128), Color.new(0, 0, 0, 0)]
  POPUP_ADD_WAIT          = 6
  HELPDISPLAY_TYPE        = 1
  HELPDISPLAT_WAIT        = 20
  HELPDISPLAT_END_WAIT    = 24
  HELPDISPLAY_DESCRIPTION = {:size => 20, :delimiter => " "}
  MESSAGE_TYPE  =  2
  MESSAGE_WINDOW_BACKGROUND  = 1
  MESSAGE_WINDOW_POSITION    = 0
  MESSAGE_WAIT = {:battle_start => [120, false], :victory   => [ 60, false],
                  :defeat       => [120, false], :escape    => [120, false],
                  :drop_item    => [ 60,  true], :levelup   => [ 60,  true]}
  MESSAGE_WINDOW_ENEMY_NAMES = false
  LEVELUP_SE  = RPG::SE.new("Up4", 90, 100)
  DROPITEM_SE = RPG::SE.new("Item3", 80, 125)
  ACTOR_CENTERING  =  true
  ACTOR_SPACING_ADJUST = 32
  ACTOR_OFFSET  = {:x => -16, :y => 0}
  ACTOR_PADDING = {:side => 4, :bottom => 8}
  SCREEN_ANIMATION_OFFSET = 128
  STATUS_OFFSET = {:x => 64, :y => -12}
  STATUS_SIDE_PADDING   = 6
  STATUS_WIDTH          = 72
  STATUS_AUTOADJUST     = true
  STATUS_LINE_HEIGHT    = 22
  STATUS_NAME_SIZE      = 20
  STATUS_PARAM_SIZE     = 23
  STATUS_GAUGE_OPACITY  = 192
  ACTOR_COMMAND_NOSCROLL   = true
  ACTOR_COMMAND_HORIZON    = false
  ACTOR_COMMAND_ALIGNMENT  = 0
  ACTOR_COMMAND_WIDTH      = 128
  ACTOR_COMMAND_POSITION   = 0
  ACTOR_COMMAND_Y_POSITION = 0
  ACTOR_COMMAND_OFFSET  = {:x => 0, :y => -16}
  PARTY_COMMAND_HORIZON   = true
  PARTY_COMMAND_ALIGNMENT = 1
  PARTY_COMMAND_WIDTH = Graphics.width
  PARTY_COMMAND_XY        = {:x => 0, :y => 0}
  CURSOR_NAME       = ""
  CURSOR_TONE     = Tone.new(-34, 0, 68)
  CURSOR_ANI_SPEED  = 3
  CURSOR_SPEED      = 3
  CURSOR_BLINK      = true
  CURSOR_MINMAX     = {:min => 48, :max => Graphics.height}
  CURSOR_OFFSET     = {:x => 0, :y => 0}
  HELP_ACTOR_PARAM = {:hp => true ,:mp => true ,:tp => true ,:state => true }
  HELP_ENEMY_PARAM = {:hp => false,:mp => false,:tp => false,:state => true }
  HELP_PARAM_WIDTH    = 72
  RANDOMSCOPE_DISPLAY = 1
  ACTOR_POPUP_POSITION   = 3
  ENEMY_POPUP_POSITION   = 1
  LEVELUP_POPUP_POSITION = 3
  ACTOR_POPUP_Y     =  -100
  LEVELUP_POPUP_Y   =  -112
  NUMBER_FONT   =  ["Arial Black", "VL Gothic"]
  TEXT_FONT     =  ["Arial Black", "VL Gothic"]
  TEXT_FONT_MCS =  ["VL Gothic"]
  LARGE_NUMBER  =  {:fontsize => 38, :spacing => -4, :line_height => 26}
  SMALL_NUMBER  =  {:fontsize => 28, :spacing => -4, :line_height => 20}
  TEXT_SIZERATE     = {:normal => 0.8, :left_right => 0.7, :top_bottom => 0.6}
  TEXT_SIZERATE_MCS = 0.9
  DECORATION_NUMBER = {
  :critical    => ["CRITICAL", 8], :weakness    => ["WEAKNESS", 8],
  :resist      => ["RESIST"  , 8], :mp_damage   => ["\mp"     , 4],
  :mp_plus     => ["\mp+"    , 4], :mp_minus    => ["\mp-"    , 4],
  :tp_plus     => ["\tp+"    , 4], :tp_minus    => ["\tp-"    , 4]}
  DECORATION_TEXT = {
  :add_state   => "+%s",      :rem_state   => "-%s",
  :add_buff    => "%s UP",    :add_debuff  => "%s DOWN",
  :rem_buff    => "-%s Buff"}
  POPUP_VOCAB = {
  :miss        => "MISS!",      :counter     => "Counter",
  :reflection  => "Reflection", :substitute  => "Substitute",
  :levelup     => "LEVELUP!"}
  POPUP_VOCAB_PARAMS = [
  "MAX\hp","MAX\mp","ATK","DEF","MATK","MDEF","AGI","LUCK"]
  POPUP_COLOR = {
  :hp_damage     => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  :critical      => [Color.new(255, 255,  80), Color.new(224,  32,   0)],
  :weakness      => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  :resist        => [Color.new(232, 224, 216), Color.new( 56,  48,  40)],
  :hp_recovery   => [Color.new( 96, 255, 128), Color.new(  0,  64,  32)],
  :mp_damage     => [Color.new(248,  80, 172), Color.new( 48,   0,  32)],
  :mp_recovery   => [Color.new(160, 240, 255), Color.new( 32,  48, 144)],
  :tp_damage     => [Color.new(248, 240,  64), Color.new(  0,  80,  40)],
  :add_state     => [Color.new(255, 255, 255), Color.new(  0,  56, 144)],
  :rem_state     => [Color.new(224, 232, 240), Color.new( 32,  64, 128, 128)],
  :add_badstate  => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  :rem_badstate  => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  :add_buff      => [Color.new(255, 255, 192), Color.new( 96,  64,   0)],
  :add_debuff    => [Color.new(200, 224, 232), Color.new( 40,  48,  56)],
  :rem_buff      => [Color.new(224, 224, 224), Color.new( 32,  32,  32, 128)],
  :counter       => [Color.new(255, 255, 224), Color.new(128,  96,   0)],
  :reflection    => [Color.new(224, 255, 255), Color.new(  0,  96, 128)],
  :substitute    => [Color.new(224, 255, 224), Color.new(  0, 128,  64)],
  :levelup       => [Color.new(255, 255, 255), Color.new(  0,   0,   0)],
  }
  POPUP_TYPE = {
  :miss          =>   0,:hp_damage     =>   0,:hp_slipdamage =>   1,
  :hp_recovery   =>   0,:hp_regenerate =>   1,:hp_drain      =>   0,
  :hp_drainrecv  =>   0,:mp_damage     =>   0,:mp_slipdamage =>   1,
  :mp_recovery   =>   0,:mp_regenerate =>   1,:mp_drain      =>   0,
  :mp_drainrecv  =>   0,:mp_paycost    =>  -1,:tp_damage     =>   1,
  :tp_charge     =>  -1,:tp_gain       =>   7,:tp_regenerate =>   1,
  :tp_paycost    =>  -1,:add_state     =>   2,:rem_state     =>   2,
  :add_badstate  =>   2,:rem_badstate  =>   2,:add_debuff    =>   3,
  :rem_buff      =>   3,:counter       =>   6,:reflection    =>   6,
  :substitute    =>   4,}
  LARGE_MOVEMENT = {
  :inirate    => 6.4,  :gravity      => 0.68,  :side_scatter => 1.2,
  :ref_height =>  32,  :ref_factor   => 0.60,  :ref_count    =>   2,
                       :duration     =>   40,  :fadeout      =>  20 }
  SMALL_MOVEMENT = {
  :inirate    => 4.4,  :gravity      => 0.60,  :side_scatter => 0.0,
  :ref_height =>  12,  :ref_factor   => 0.70,  :ref_count    =>   0,
                       :duration     =>   60,  :fadeout      =>  16 }
  RISE_MOVEMENT     = {:rising_speed => 0.75,  :line_spacing => 0.9,
                       :duration     =>   40,  :fadeout      =>   8 }
  SLIDE_MOVEMENT    = {:x_speed      =>    2,  :line_spacing => 0.9,
                       :duration     =>   50,  :fadeout      =>  32 }
  OVERLAY_MOVEMENT  = {:duration     =>   36,  :fadeout      =>  32 }
  FIX_TARGET_CHECKE     = true
  GUARD_TARGET_CHECKE   = true
  SMART_TARGET_SELECT   = true
  LAST_TARGET           = true
  LAST_PARTY_COMMAND    = true
  LAST_ACTOR_COMMAND    = true
  TROOP_X_SORT          = true
  PARTY_COMMAND_SKIP    = true
  FITTING_LIST          = true
  ENHANCED_WHITEN       = true
  DISABLED_DAMAGE_SHAKE = true
  TROOP_X_SCREEN_FIX    = true
  TROOP_Y_OFFSET        = 0
  end
  # <<ver1.10>>
  if !$lnx_include[:lnx11aconf] ||
    $lnx_include[:lnx11aconf] && $lnx_include[:lnx11aconf] < 110
  LARGE_NUMBER_NAME = ""
  SMALL_NUMBER_NAME = ""
  LARGE_BUFFS_NAME  = ""
  SMALL_BUFFS_NAME  = ""
  end
end

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

class Popup_Data
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@make_methods = {} # ポップアップ作成メソッドのハッシュ
  #--------------------------------------------------------------------------
  # ● 定数(ポップアップのタイプID)
  #--------------------------------------------------------------------------
  SPRING_LARGE  = 0
  SPRING_SMALL  = 1
  RISING_LARGE  = 2
  RISING_SMALL  = 3
  SLIDING_LARGE = 4
  SLIDING_SMALL = 5
  OVERLAY_LARGE = 6
  OVERLAY_SMALL = 7
  LEVELUP       = :levelup
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :type       # ポップアップのタイプ
  attr_accessor :popup      # 表示する内容
  attr_accessor :popup_size # ポップアップの大きさ
  attr_accessor :color      # 色
  attr_accessor :deco       # 修飾文字
  attr_accessor :battler    # ポップアップするバトラー
  attr_accessor :delay      # 表示開始までの時間
  attr_accessor :viewport   # ビューポート
  attr_accessor :popup_wait # ポップアップウェイト
  attr_accessor :buff_data  # 能力強化/弱体 <<ver1.10>>
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @sprites = []
    @viewport = Viewport.new
    @viewport.z = 120 # ポップアップの Z 座標
    spb = Sprite_PopupBase.new
    spb.create_number
    spb.dispose
    set_methods
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ生成メソッドの登録
  #--------------------------------------------------------------------------
  def set_methods
    @@make_methods[SPRING_LARGE]  = method(:makeup_spring_large)
    @@make_methods[SPRING_SMALL]  = method(:makeup_spring_small)
    @@make_methods[RISING_LARGE]  = method(:makeup_rising_large)
    @@make_methods[RISING_SMALL]  = method(:makeup_rising_small)
    @@make_methods[SLIDING_LARGE] = method(:makeup_sliding_large)
    @@make_methods[SLIDING_SMALL] = method(:makeup_sliding_small)
    @@make_methods[OVERLAY_LARGE] = method(:makeup_overlay_large)
    @@make_methods[OVERLAY_SMALL] = method(:makeup_overlay_small)
    @@make_methods[LEVELUP]       = method(:makeup_levelup)
  end
  #--------------------------------------------------------------------------
  # ● スプライト解放
  #--------------------------------------------------------------------------
  def dispose
    @sprites.each {|sprite| sprite.dispose}
    @viewport.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    @sprites.each do |sprite|
      sprite.update
      @sprites.delete(sprite) if sprite.disposed?
    end
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    @type  = 0
    @popup = nil
    @popup_size = :large
    @color = :hp_damage
    @deco = ["", -1] # [テキスト, テキストの位置]
    @battler = nil
    @delay = 0
    @popup_wait = false
    # <<ver1.10>> 能力強化/弱体ポップアップを画像で表示する際に利用
    @buff_data = [-1, -1] # [能力, 強化or弱体or解除]
  end
  #--------------------------------------------------------------------------
  # ● ポップアップを生成
  #--------------------------------------------------------------------------
  def makeup
    if @@make_methods[@type]
      @@make_methods[@type].call
      @popup_wait = true
    end
  end
  #--------------------------------------------------------------------------
  # ● ポップアップウェイト
  #  バトルログタイプが [2:ヘルプ表示] の場合のみ実行されます。
  #--------------------------------------------------------------------------
  def add_wait
    return if LNX11::BATTLELOG_TYPE != 2 || !@popup_wait
    LNX11::POPUP_ADD_WAIT.times {BattleManager.log_window.abs_wait(1)}
    @popup_wait = false
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ生成メソッド
  #  これらのメソッドを @@make_methods に登録して呼び出します。
  # これはポップアップタイプの拡張を容易にするための仕様です。
  #--------------------------------------------------------------------------
  def makeup_spring_large
    # @type   0 : 跳ねるポップアップ(大)
    @popup_size = :large
    @sprites.push(Sprite_PopupSpring.new(self))
  end
  def makeup_spring_small
    # @type   1 : 跳ねるポップアップ(小)
    @popup_size = :small
    @delay = @battler.popup_delay[1]
    @sprites.push(Sprite_PopupSpring.new(self))
  end
  def makeup_rising_large
    # @type   2 : ゆっくり上昇(大)
    @popup_size = :large
    @delay = @battler.popup_delay[2]
    @sprites.push(Sprite_PopupRising.new(self))
  end
  def makeup_rising_small
    # @type   3 : ゆっくり上昇(小)
    @popup_size = :small      
    @delay = @battler.popup_delay[2]
    @sprites.push(Sprite_PopupRising.new(self))
  end
  def makeup_sliding_large
    # @type   4 : スライド(大)
    @popup_size = :large
    @delay = @battler.popup_delay[3]
    @sprites.push(Sprite_PopupSliding.new(self))
  end
  def makeup_sliding_small
    # @type   5 : スライド(小)
    @popup_size = :small
    @delay = @battler.popup_delay[3]
    @sprites.push(Sprite_PopupSliding.new(self))      
  end
  def makeup_overlay_large
    # @type   6 : オーバーレイ(大)
    @popup_size = :large
    @sprites.push(Sprite_PopupOverlay.new(self))
  end
  def makeup_overlay_small
    # @type   7 : オーバーレイ(小)
    @popup_size = :small
    @sprites.push(Sprite_PopupOverlay.new(self))
  end
  def makeup_levelup
    # @type :levelup : レベルアップ
    @battler.popup_delay[3] = 0
    @popup_size = :large
    @sprites.push(Sprite_PopupLevelUp.new(self))
  end
  #--------------------------------------------------------------------------
  # ● TP のポップアップが有効か?
  #--------------------------------------------------------------------------
  def tp_popup_enabled?(target)
    return false if !$data_system.opt_display_tp
    return true  if LNX11::TP_POPUP_TYPE == 0 # すべてポップアップ
    return true  if LNX11::TP_POPUP_TYPE == 1 && target.actor? # アクターのみ
    false # ポップアップしない
  end
  #--------------------------------------------------------------------------
  # ● 任意のポップアップ
  #--------------------------------------------------------------------------
  def popup_custom(target, popup, type = 0, color = :hp_damage, deco = nil)
    refresh
    @battler = target
    @popup = popup
    type = LNX11::POPUP_TYPE[type] if type.is_a?(Symbol)
    @type = type
    @color = color
    @deco = LNX11::DECORATION_NUMBER[deco] if deco.is_a?(Symbol)
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● レベルアップのポップアップ
  #--------------------------------------------------------------------------
  def popup_levelup(target)
    # 戦闘に参加している場合のみポップアップ
    return unless $game_party.battle_members.include?(target)
    refresh
    @type = :levelup
    @battler = target
    @popup = LNX11::POPUP_VOCAB[:levelup]
    @color = :levelup
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● 単一テキストのポップアップ
  #--------------------------------------------------------------------------
  def popup_text(target, type)
    refresh
    @type = LNX11::POPUP_TYPE[type]
    @battler = target
    @popup = LNX11::POPUP_VOCAB[type]
    @color = type
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● ミスのポップアップ
  #--------------------------------------------------------------------------
  def popup_miss(target, item)
    refresh
    @type = LNX11::POPUP_TYPE[:miss]
    @battler = target
    @popup = LNX11::POPUP_VOCAB[:miss]
    @color = :hp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● HP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_hp_damage(target, item)
    return if target.result.hp_damage == 0 && item && !item.damage.to_hp?
    refresh
    @popup = target.result.hp_damage
    @battler = target
    if target.result.hp_drain > 0
      # 被吸収
      @type = LNX11::POPUP_TYPE[:hp_drain]
      # 弱点/耐性
      if target.result.element_rate > 1
        @deco = LNX11::DECORATION_NUMBER[:weakness]
        @color = :weakness
      elsif target.result.element_rate < 1
        @deco = LNX11::DECORATION_NUMBER[:resist]
        @color = :resist
      else
        @color = :hp_damage
      end
    elsif target.result.hp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:hp_damage]
      @color = :hp_damage
      if target.result.critical
        # クリティカル
        @deco = LNX11::DECORATION_NUMBER[:critical]
        @color = :critical
      end
      # 弱点/耐性
      if target.result.element_rate > 1
        @deco = LNX11::DECORATION_NUMBER[:weakness]
        @color = :weakness if @color != :critical
      elsif target.result.element_rate < 1
        @deco = LNX11::DECORATION_NUMBER[:resist]
        @color = :resist if @color != :critical
      end
    elsif target.result.hp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:hp_recovery]
      @color = :hp_recovery
    else
      # 0 ダメージ
      @type = LNX11::POPUP_TYPE[:hp_damage]
      @color = :hp_damage
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_mp_damage(target, item)
    return if target.dead? || target.result.mp_damage == 0
    refresh
    @popup = target.result.mp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[:mp_damage]
    if target.result.mp_drain > 0
      # 被吸収
      @type = LNX11::POPUP_TYPE[:mp_drain]
      @color = :mp_damage
    elsif target.result.mp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:mp_damage]
      @color = :mp_damage
    elsif target.result.mp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:mp_recovery]
      @color = :mp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP ダメージポップアップ
  #--------------------------------------------------------------------------
  def popup_tp_damage(target, item)
    return unless tp_popup_enabled?(target)
    return if target.dead? || target.result.tp_damage == 0
    refresh
    @popup = target.result.tp_damage
    @battler = target
    deco = target.result.tp_damage > 0 ? :tp_minus : :tp_plus
    @deco = LNX11::DECORATION_NUMBER[deco]
    @type = LNX11::POPUP_TYPE[:tp_damage]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● HP 吸収回復
  #--------------------------------------------------------------------------
  def popup_hp_drain(target, hp_drain)
    return if hp_drain == 0
    refresh
    @popup = hp_drain
    @battler = target
    @type = LNX11::POPUP_TYPE[:hp_drainrecv]
    @color = :hp_recovery
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP 吸収回復
  #--------------------------------------------------------------------------
  def popup_mp_drain(target, mp_drain)
    return if mp_drain == 0
    refresh
    @popup = mp_drain
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[:mp_damage]
    @type = LNX11::POPUP_TYPE[:mp_drainrecv]
    @color = :mp_recovery
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● ステート付加のポップアップ
  #--------------------------------------------------------------------------
  def popup_added_states(target)
    refresh
    @battler = target
    target.result.added_state_objects.each do |state|
      next if state.id == target.death_state_id
      next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
      next if state.add_no_display?      
      if state.add_no_decoration?
        @popup = state.add_display_name
      else
        @popup = sprintf(LNX11::DECORATION_TEXT[:add_state],
                         state.add_display_name)
      end
      type = state.advantage? ? :add_state : :add_badstate
      if state.add_popup_type
        @type = state.add_popup_type
      else
        @type = LNX11::POPUP_TYPE[type]
      end
      @color = type
      # ポップアップ作成
      makeup
    end
  end
  #--------------------------------------------------------------------------
  # ● ステート解除のポップアップ
  #--------------------------------------------------------------------------
  def popup_removed_states(target)
    refresh
    @type = LNX11::POPUP_TYPE[:rem_badstate]
    @battler = target
    target.result.removed_state_objects.each do |state|
      next if state.id == target.death_state_id
      next if state.icon_index == 0 && LNX11::INDEXZERO_NO_POPUP
      next if state.remove_no_display?
      if state.remove_no_decoration?
        @popup = state.remove_display_name
      else
        @popup = sprintf(LNX11::DECORATION_TEXT[:rem_state],
                         state.remove_display_name)
      end
      type = state.advantage? ? :rem_state : :rem_badstate
      if state.remove_popup_type
        @type = state.remove_popup_type
      else
        @type = LNX11::POPUP_TYPE[type]
      end
      @color = type
      # ポップアップ作成
      makeup
    end
  end
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体のポップアップ
  #--------------------------------------------------------------------------
  def popup_buffs(target, buffs, fmt)
    return if buffs.empty?
    refresh
    @battler = target
    case fmt
    when Vocab::BuffAdd
      buffdeco = LNX11::DECORATION_TEXT[:add_buff]
      @type = LNX11::POPUP_TYPE[:add_buff]
      @color = :add_buff
      @buff_data[1] = 0
    when Vocab::DebuffAdd
      buffdeco = LNX11::DECORATION_TEXT[:add_debuff]
      @type = LNX11::POPUP_TYPE[:add_debuff]
      @color = :add_debuff
      @buff_data[1] = 1
    when Vocab::BuffRemove
      buffdeco = LNX11::DECORATION_TEXT[:rem_buff]
      @type = LNX11::POPUP_TYPE[:rem_buff]
      @color = :rem_buff
      @buff_data[1] = 2
    end
    buffs.each do |param_id|
      @popup = sprintf(buffdeco, LNX11::POPUP_VOCAB_PARAMS[param_id])
      @buff_data[0] = param_id
      # ポップアップ作成
      makeup
      @popup_wait = false
    end
  end
  #--------------------------------------------------------------------------
  # ● HP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_hp(target, hp_damage, paycost = false)
    return if hp_damage == 0
    refresh
    @popup = hp_damage
    @battler = target
    if hp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[:hp_slipdamage]
      @color = :hp_damage
    elsif hp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[:hp_regenerate]
      @color = :hp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● MP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_mp(target, mp_damage, paycost = false)
    return if mp_damage == 0
    refresh
    @popup = mp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[mp_damage > 0 ? :mp_minus : :mp_plus]
    if mp_damage > 0
      # ダメージ
      @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_slipdamage]
      @color = :mp_damage
    elsif mp_damage < 0
      # 回復
      @type = LNX11::POPUP_TYPE[paycost ? :mp_paycost : :mp_regenerate]
      @color = :mp_recovery
    end
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP 再生
  #--------------------------------------------------------------------------
  def popup_regenerate_tp(target, tp_damage, paycost = false)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[paycost ? :tp_paycost : :tp_regenerate]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP チャージ
  #--------------------------------------------------------------------------
  def popup_tp_charge(target, tp_damage)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[:tp_charge]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
  #--------------------------------------------------------------------------
  # ● TP 得
  #--------------------------------------------------------------------------
  def popup_tp_gain(target, tp_damage)
    return unless tp_popup_enabled?(target)
    return if tp_damage == 0
    refresh
    @popup = tp_damage
    @battler = target
    @deco = LNX11::DECORATION_NUMBER[tp_damage > 0 ? :tp_minus : :tp_plus]
    @type = LNX11::POPUP_TYPE[:tp_gain]
    @color = :tp_damage
    # ポップアップ作成
    makeup
  end
end

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

class Sprite_PopupBase < Sprite
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@cache_number = []
  @@cache_text   = {}
  @@w = []
  @@h = []
  @@priority = 0
  @@count    = 0
  @@buf_bitmap = nil
  #--------------------------------------------------------------------------
  # ● 定数
  #--------------------------------------------------------------------------
  NUMBER_COLOR_SIZE = 8
  NUMBERS    = [0,1,2,3,4,5,6,7,8,9]
  COLOR_KEYS = LNX11::POPUP_COLOR.keys
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     data : ポップアップデータ
  #--------------------------------------------------------------------------
  def initialize(data = nil)
    if data == nil || !data.battler.battle_member?
      # 非表示のポップアップ
      super(nil)
      @remove = true
      return
    end
    # ポップアップデータを適用
    super(data.viewport)
    @battler = data.battler # ポップアップを表示するバトラー
    @delay   = data.delay   # ディレイ(遅延) ※サブクラスによって扱いが違います
    @popup_size = data.popup_size # ポップアップの大きさ 大/小
    # 基本設定
    @duration = 60  # 消え始める時間
    @fadeout  = 16  # 消える速さ
    @rx = ry  = 0   # XY座標
    # Z座標
    @rz = base_z * 128 + priority
    popup_add
    self.visible = false
    # ポップアップデータからビットマップを作成
    if data.popup.is_a?(Numeric)
      # ダメージ値
      self.bitmap = number(data.popup, data.color, data.popup_size, data.deco)
    elsif data.popup.is_a?(String)
      # テキスト
      self.bitmap = text(data.popup, data.color,
                         data.popup_size, data.buff_data)
    end
    # 位置設定
    self.ox = self.width  / 2
    self.oy = self.height / 2
    set_position
    start
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    popup_remove
    terminate
    self.bitmap.dispose if self.bitmap
    super
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if removed? || delay?
    update_popup
    update_xy
    @duration -= 1
    self.opacity -= @fadeout if @duration <= 0
    dispose if self.opacity == 0
  end
  #--------------------------------------------------------------------------
  # ● 開始処理(サブクラスで定義)
  #--------------------------------------------------------------------------
  def start
  end
  #--------------------------------------------------------------------------
  # ● 終了処理(サブクラスで定義)
  #--------------------------------------------------------------------------
  def terminate
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(サブクラスで定義)
  #--------------------------------------------------------------------------
  def update_popup
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    0
  end
  #--------------------------------------------------------------------------
  # ● ポップアップのプライオリティを返す
  #  同一Z座標のポップアップで、後から生成されたものが手前に表示されるように
  # Z座標の修正値をクラス変数で管理しています。
  #--------------------------------------------------------------------------
  def priority
    @@priority * 2
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ追加
  #--------------------------------------------------------------------------
  def popup_add
    @@priority += 1
    @@count += 1
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ消去
  #--------------------------------------------------------------------------
  def popup_remove
    @remove = true
    @@count -= 1
    @@priority = 0 if @@count <= 0
  end
  #--------------------------------------------------------------------------
  # ● ディレイが残っている?
  #  サブクラスの update メソッドで使用します。
  #--------------------------------------------------------------------------
  def delay?
    @delay -= 1
    self.visible = (@delay <= 0)
    !self.visible
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ消去済み?
  #--------------------------------------------------------------------------
  def removed?
    @remove
  end  
  #--------------------------------------------------------------------------
  # ● 座標更新
  #--------------------------------------------------------------------------
  def update_xy
    self.x = @rx
    self.y = @ry
    self.z = @rz
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ位置の設定
  #--------------------------------------------------------------------------
  def set_position
    @rx = @battler.screen_x
    if @battler.actor?
      pos = LNX11::ACTOR_POPUP_POSITION
    else
      pos = [LNX11::ENEMY_POPUP_POSITION, 2].min
    end
    case pos
    when 0 ; @ry = @battler.screen_y        # 足元
    when 1 ; @ry = @battler.screen_y_center # 中心
    when 2 ; @ry = @battler.screen_y_top    # 頭上
    when 3 ; @ry = Graphics.height + LNX11::ACTOR_POPUP_Y # Y座標統一(アクター)
    end
  end
  #--------------------------------------------------------------------------
  # ● 描画するテキストの矩形を取得
  #--------------------------------------------------------------------------
  def text_size(str, name, size, bold = false)
    @@buf_bitmap = Bitmap.new(4, 4) if !@@buf_bitmap || @@buf_bitmap.disposed?
    @@buf_bitmap.font.name = name
    @@buf_bitmap.font.size = size
    @@buf_bitmap.font.bold = bold
    return @@buf_bitmap.text_size(str)
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップの取得
  #--------------------------------------------------------------------------
  def bitmap_number(size = :large)
    return @@cache_number[size == :large ? 0 : 1]
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップキャッシュの作成
  #--------------------------------------------------------------------------
  def create_number
    return if @@cache_number[0] && !@@cache_number[0].disposed?
    n_index = NUMBER_COLOR_SIZE
    @@cache_number.clear
    colors = LNX11::POPUP_COLOR.values # 色
    name = LNX11::NUMBER_FONT
    # 大・小の 2 パターンを作成する(ループ)
    [LNX11::LARGE_NUMBER, LNX11::SMALL_NUMBER].each_with_index do |n_size, i|
      next if get_number(i)
      size = n_size[:fontsize]
      # 数字の幅・高さ
      w = NUMBERS.collect{|n| text_size(n.to_s, name, size).width}.max + 4
      nh = NUMBERS.collect{|n| text_size(n.to_s, name, size).height}.max
      h = n_size[:line_height]
      @@w = w
      @@h = h
      # ビットマップ作成
      bitmap = Bitmap.new(w * NUMBERS.size, h * [colors.size, n_index].min)
      bitmap.font.name = LNX11::NUMBER_FONT
      bitmap.font.size = n_size[:fontsize]
      y = ((h - nh) / 2) - 1
      # 色ごとに分けて描画する(ループ)
      n_index.times do |col|
        # 色を変更
        bitmap.font.color.set(colors[col][0])
        bitmap.font.out_color.set(colors[col][1])
        # 文字ごとに分けて描画(ループ)
        NUMBERS.size.times do |num|
          bitmap.draw_text(num * w, (col * h) + y, w, nh, NUMBERS[num], 2)
        end
      end
      @@cache_number.push(bitmap)
    end
    p "LNX11a:数字ビットマップのキャッシュを作成しました。"
    # 数字ビットマップを表示する(テスト用)
    # s = Sprite.new
    # s.z = 1000000
    # s.bitmap = @@cache_number[1] # 0 or 1
    # loop do Graphics.update end
  end
  #--------------------------------------------------------------------------
  # ● 数字ビットマップの取得
  #--------------------------------------------------------------------------
  def get_number(i)
    case i
    when 0 # 大
      return false if LNX11::LARGE_NUMBER_NAME.empty?
      bitmap = Cache.system(LNX11::LARGE_NUMBER_NAME)
    when 1 # 小
      return false if LNX11::SMALL_NUMBER_NAME.empty?
      bitmap = Cache.system(LNX11::SMALL_NUMBER_NAME)
    end
    @@cache_number.push(bitmap)
    @@w = bitmap.width / NUMBERS.size
    @@h = bitmap.height / NUMBER_COLOR_SIZE
    true
  end
  #--------------------------------------------------------------------------
  # ● ダメージ数を描画したビットマップの取得
  #--------------------------------------------------------------------------
  def number(num, color, size = :large, deco = nil)
    # 数値を文字列の配列にする
    numbers = (num.abs.to_s).split(//)
    # 色番号を取得
    color_index = COLOR_KEYS.index(color)
    # ポップアップサイズを設定
    n_bitmap = bitmap_number(size)
    if size == :large
      n_size = LNX11::LARGE_NUMBER
      i = 0
    else
      n_size = LNX11::SMALL_NUMBER
      i = 1
    end
    spacing = n_size[:spacing]
    w = @@w
    h = @@h
    # ダメージ値のビットマップサイズ
    @bw = w * numbers.size + spacing * (numbers.size - 1)
    @bh = h
    # 修飾文字の描画
    @offset_x = @offset_y = 0
    text_bitmap = deco_text(deco,color,n_size[:fontsize]) if deco[1] >= 0
    # ビットマップを作成
    bitmap = Bitmap.new(@bw, @bh)
    # 塗りつぶし(テスト用)
    # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
    # ダメージ値を描画
    rect = Rect.new(0, h * color_index, w, h)
    numbers.size.times do |n|
      rect.x = numbers[n].to_i * w
      bitmap.blt(w * n + spacing * n + @offset_x, @offset_y, n_bitmap, rect)
    end
    # 修飾文字の描画をコールバック
    @decoblt.call(bitmap) if @decoblt
    @decoblt = nil
    # ビットマップを返す
    bitmap
  end
  #--------------------------------------------------------------------------
  # ● 修飾文字の描画
  #--------------------------------------------------------------------------
  def deco_text(deco, color, sizerate)
    # 元の幅・高さ
    ow = @bw
    oh = @bh
    case deco[1]   
    when 2 # ダメージ値の下
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :top_bottom)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height * 0.8
      # 最終的なビットマップのサイズ
      @bw = [@bw, tw].max
      @bh += th
      # ダメージ値の描画位置の修正
      @offset_x = (@bw - ow) / 2
      @offset_y = 0
      # 修飾文字の描画位置を設定
      x = (@bw - tw) / 2
      y = oh * 0.8
    when 4 # ダメージ値の左
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :left_right)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height
      # 最終的なビットマップのサイズ
      @bw += tw
      @bh = [@bh, th].max
      # ダメージ値の描画位置の修正
      @offset_x = tw
      @offset_y = (@bh - oh) / 2
      # 修飾文字の描画位置を設定
      x = 2
      y = (@bh - th) / 2
    when 6 # ダメージ値の右
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :left_right)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height
      # 最終的なビットマップのサイズ
      @bw += tw
      @bh = [@bh, th].max
      # ダメージ値の描画位置の修正
      @offset_x = 0
      @offset_y = (@bh - oh) / 2
      # 修飾文字の描画位置を設定
      x = ow
      y = (@bh - th) / 2
    when 8 # ダメージ値の上
      # テキストのビットマップを取得
      size = decosize(deco[0], sizerate, :top_bottom)
      text_bitmap = text(deco[0], color, size)
      # テキストの幅・高さ
      tw = text_bitmap.width
      th = text_bitmap.height * 0.8
      # 最終的なビットマップのサイズ
      @bw = [@bw, tw].max
      @bh += th
      # ダメージ値の描画位置の修正
      @offset_x = (@bw - ow) / 2
      @offset_y = @bh - oh
      # 修飾文字の描画位置を設定
      x = (@bw - tw) / 2
      y = 0
    end
    # 修飾文字の描画(コールバック)
    @decoblt = Proc.new {|bitmap|
    bitmap.blt(x, y, text_bitmap, text_bitmap.rect)
    text_bitmap.dispose}
    return text_bitmap
  end
  #--------------------------------------------------------------------------
  # ● 修飾文字のサイズ
  #--------------------------------------------------------------------------
  def decosize(text, size, pos)
    if text.length != text.bytesize
      return size * LNX11::TEXT_SIZERATE[pos] * LNX11::TEXT_SIZERATE_MCS
    else
      return size * LNX11::TEXT_SIZERATE[pos]
    end
  end
  #--------------------------------------------------------------------------
  # ● テキストを描画したビットマップの取得
  #  ステートやダメージ値の修飾文字の描画に使用します。
  #--------------------------------------------------------------------------
  def text(text, color, size = :large, buff_data = [-1, -1])
    # キャッシュがあればそれを返す(無ければ作成)
    key = text + color.to_s + size.to_s
    if @@cache_text[key] && !@@cache_text[key].disposed?
      return @@cache_text[key].clone
    end
    # 用語の置き換え
    text.gsub!("\hp") { Vocab::hp_a } if text.include?("\hp")
    text.gsub!("\mp") { Vocab::mp_a } if text.include?("\mp")
    text.gsub!("\tp") { Vocab::tp_a } if text.include?("\tp")
    # <<ver1.10>> テキストの頭に _ があれば対応する画像ファイルを参照する
    if text[/^[\_]./]
      bitmap = get_text_bitmap(text, color, size)
      # キャッシュに保存
      @@cache_text[key] = bitmap
      # ビットマップを返す
      return bitmap.clone
    end
    # <<ver1.10>>
    # 能力強化/弱体のポップアップで、ファイル名が指定されていればそれを返す
    if buff_data[0] >= 0 &&
      (size == :large && !LNX11::LARGE_BUFFS_NAME.empty?) ||
      (size == :small && !LNX11::SMALL_BUFFS_NAME.empty?)
      bitmap = get_buff_bitmap(buff_data, size)
      # キャッシュに保存
      @@cache_text[key] = bitmap
      # ビットマップを返す
      return bitmap.clone
    end
    # テキストにマルチバイト文字があれば日本語用フォントを使う
    if text.length != text.bytesize
      fontname = LNX11::TEXT_FONT_MCS
      sizerate = LNX11::TEXT_SIZERATE[:normal] * LNX11::TEXT_SIZERATE_MCS
    else
      fontname = LNX11::TEXT_FONT
      sizerate = LNX11::TEXT_SIZERATE[:normal]
    end
    # ポップアップサイズを設定
    case size
    when :large ; fontsize = LNX11::LARGE_NUMBER[:fontsize] * sizerate
    when :small ; fontsize = LNX11::SMALL_NUMBER[:fontsize] * sizerate
    else        ; fontsize = size
    end
    # テキストサイズ計算
    rect = text_size(text, fontname, fontsize)
    rect.width += 2
    # ビットマップを作成
    bitmap = Bitmap.new(rect.width, rect.height)
    # 塗りつぶし(テスト用)
    # bitmap.fill_rect(bitmap.rect, Color.new(0,0,0,128))
    # フォント設定
    bitmap.font.name = fontname
    bitmap.font.size = fontsize
    bitmap.font.color.set(LNX11::POPUP_COLOR[color][0])
    bitmap.font.out_color.set(LNX11::POPUP_COLOR[color][1])
    # テキスト描画
    bitmap.draw_text(rect, text, 1)
    # キャッシュに保存
    @@cache_text[key] = bitmap
    # ビットマップを返す
    bitmap.clone
  end
  #--------------------------------------------------------------------------
  # ● 能力強化/弱体ビットマップの取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def get_buff_bitmap(buff_data, size)
    case size
    when :large ; src_bitmap = Cache.system(LNX11::LARGE_BUFFS_NAME)
    when :small ; src_bitmap = Cache.system(LNX11::SMALL_BUFFS_NAME)
    end
    src_rect = Rect.new
    src_rect.width  = src_bitmap.width  / 2
    src_rect.height = src_bitmap.height / 12
    src_rect.x = (buff_data[0] / 4) * src_rect.width
    src_rect.y = (buff_data[0] % 4) * src_rect.height * 3 +
                  buff_data[1] * src_rect.height
    bitmap = Bitmap.new(src_rect.width, src_rect.height)
    bitmap.blt(0, 0, src_bitmap, src_rect)
    bitmap
  end
  #--------------------------------------------------------------------------
  # ● テキストビットマップの取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def get_text_bitmap(text, color, size)
    # クリティカルカラーかつ、弱点/耐性なら参照するビットマップを変更
    if LNX11::POPUP_COLOR[color] == LNX11::POPUP_COLOR[:critical] &&
      (text == LNX11::DECORATION_NUMBER[:weakness][0] ||
       text == LNX11::DECORATION_NUMBER[:resist][0])
      # ファイル名に _critcolor を加える
      text += "_critcolor"
    end
    # MPダメージ/回復(符号なし)なら参照するビットマップを変更
    if text == LNX11::DECORATION_NUMBER[:mp_damage][0]
      # カラーに応じてファイル名を変更
      case LNX11::POPUP_COLOR[color]
      when LNX11::POPUP_COLOR[:mp_damage]   ; text += "_damage"
      when LNX11::POPUP_COLOR[:mp_recovery] ; text += "_recovery"
      end
    end
    # popup_xxxxxx_(large or small)
    Cache.system("popup" + text + (size == :large ? "_large" : "_small"))
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupSpring
#------------------------------------------------------------------------------
#  通常の跳ねるポップアップ。
#==============================================================================

class Sprite_PopupSpring < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    14
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    # ディレイ設定 同じタイプのポップアップが重ならないようにする
    if @popup_size == :small
      self.oy -= @battler.popup_delay[1]
      @delay_clear = (@delay == 0)
      dy = self.bitmap.height * 0.8
      @battler.popup_delay[1] += dy
      @delay = 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------  
  def terminate
    # 一番上のポップアップなら、ディレイを初期化する
    @battler.popup_delay[1] = 0 if @delay_clear
  end
  #--------------------------------------------------------------------------
  # ● 投射運動の設定
  #--------------------------------------------------------------------------
  def set_movement
    if @popup_size == :large
      movement = LNX11::LARGE_MOVEMENT
    else
      movement = LNX11::SMALL_MOVEMENT
    end
    @fall       = -movement[:inirate]
    @gravity    =  movement[:gravity]
    @side       =  movement[:side_scatter] * rand(0) * (rand(2) == 0 ? -1 : 1)
    @ref_move   =  movement[:ref_height]
    @ref_factor =  movement[:ref_factor]
    @ref_count  =  movement[:ref_count]
    @duration   =  movement[:duration]
    @fadeout    =  movement[:fadeout]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    update_freefall
  end
  #--------------------------------------------------------------------------
  # ● 投射運動の更新
  #--------------------------------------------------------------------------
  def update_freefall
    if @ref_count >= 0
      # X:左右移動
      @rx += @side
      # Y:自由落下
      @ry += @fall
      @ref_move -= @fall
      @fall += @gravity
      # 跳ね返り
      if @ref_move <= 0 && @fall >= 0
        @ref_count -= 1
        @fall = -@fall * @ref_factor
      end      
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupRising
#------------------------------------------------------------------------------
#  少しずつ上昇するポップアップ。
#==============================================================================

class Sprite_PopupRising < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    6
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    self.opacity = 0
    d = self.bitmap.height * LNX11::RISE_MOVEMENT[:line_spacing]
    @delay_count = d / @rising_speed
    @battler.popup_delay[2] += @delay_count
  end
  #--------------------------------------------------------------------------
  # ● 動きの設定
  #--------------------------------------------------------------------------
  def set_movement
    @rising_speed = LNX11::RISE_MOVEMENT[:rising_speed]
    @duration = LNX11::RISE_MOVEMENT[:duration]
    @fadeout  = LNX11::RISE_MOVEMENT[:fadeout]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    @delay_count -= 1
    @battler.popup_delay[2] -= 1 if @delay_count >= 0
    @ry -= @rising_speed # すこしずつ上昇
    self.opacity += 32 if @duration > 0
  end
end

#==============================================================================
# ■ [追加]:Sprite_PopupSliding
#------------------------------------------------------------------------------
#  スライド表示するポップアップ。
#==============================================================================

class Sprite_PopupSliding < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    8
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    # 動き設定
    set_movement
    d = self.bitmap.height * LNX11::SLIDE_MOVEMENT[:line_spacing]
    self.oy += @delay + d / 2 if @delay > 0
    self.opacity = 0
    # ディレイ設定 同じタイプのポップアップが重ならないようにする
    @delay_clear = (@delay == 0)
    @battler.popup_delay[3] += (@delay <= 0 ? d / 2 : d)
    @delay = 0
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------  
  def terminate
    # 一番下のポップアップなら、ディレイを初期化する
    @battler.popup_delay[3] = 0 if @delay_clear
  end
  #--------------------------------------------------------------------------
  # ● 動きの設定
  #--------------------------------------------------------------------------
  def set_movement
    @x_speed  = LNX11::SLIDE_MOVEMENT[:x_speed]
    @duration = LNX11::SLIDE_MOVEMENT[:duration]
    @fadeout  = LNX11::SLIDE_MOVEMENT[:fadeout]
    # フェードインのスライド分だけ X を移動
    @rx -= @x_speed * 255.0 / @fadeout
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    @rx += @x_speed if opacity != 255 # スライド
    self.opacity += @fadeout if @duration > 0
  end
end

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

class Sprite_PopupOverlay < Sprite_PopupBase
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    10
  end
  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    @duration = LNX11::OVERLAY_MOVEMENT[:duration]
    @fadeout  = LNX11::OVERLAY_MOVEMENT[:fadeout]
    # オーバーレイの作成
    create_overlay
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    @overlay.dispose
    @overlay = nil
  end
  #--------------------------------------------------------------------------
  # ● オーバーレイ(複製)の作成
  #--------------------------------------------------------------------------
  def create_overlay
    @overlay = Sprite.new
    @overlay.bitmap   = self.bitmap
    @overlay.viewport = self.viewport
    @overlay.ox = self.ox
    @overlay.oy = self.oy
    @overlay.visible = false
    @overlay.blend_type = 1
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    self.opacity += @fadeout * 2 if @duration > 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_overlay
  end
  #--------------------------------------------------------------------------
  # ● オーバーレイの更新
  #--------------------------------------------------------------------------
  def update_overlay
    return if self.disposed? || @overlay.opacity == 0
    @overlay.x = self.x
    @overlay.y = self.y
    @overlay.z = self.z
    # 拡大・消去
    @overlay.zoom_x += 0.16
    @overlay.zoom_y += 0.12
    @overlay.opacity -= 20
    @overlay.visible = (@overlay.opacity != 0)
  end
end

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

class Sprite_PopupLevelUp < Sprite_PopupSliding
  #--------------------------------------------------------------------------
  # ● ポップアップ Z 座標
  #--------------------------------------------------------------------------
  def base_z
    32
  end
  #--------------------------------------------------------------------------
  # ● ポップアップ位置の設定
  #--------------------------------------------------------------------------
  def set_position
    @rx = @battler.screen_x - LNX11::ACTOR_OFFSET[:x]
    case LNX11::LEVELUP_POPUP_POSITION
    when 0 ; @ry = @battler.screen_y        # 足元
    when 1 ; @ry = @battler.screen_y_center # 中心
    when 2 ; @ry = @battler.screen_y_top    # 頭上
    when 3 ; @ry = Graphics.height + LNX11::LEVELUP_POPUP_Y # Y座標統一
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_popup
    super
    # リザルト中なら自動的に消去しない
    @duration += 1 if $game_troop.all_dead? || $game_message.busy?
  end
end

#==============================================================================
# ■ Bitmap
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  # ● [追加]:カーソル用三角形の描画
  #--------------------------------------------------------------------------
  def lnx_cursor_triangle(size, color, oy = 0, grad = 1)
    color = color.clone
    x = (self.width - size) / 2
    y = (self.height - size) / 2 + oy
    rect = Rect.new(x, y, size, 1)
    count = size / 2
    minus = 128 / count / 2
    count.times do
      clear_rect(rect)
      fill_rect(rect, color)
      color.red   = [color.red   - minus * grad, 0].max
      color.green = [color.green - minus * grad, 0].max
      color.blue  = [color.blue  - minus * grad, 0].max
      rect.y += rect.height
      clear_rect(rect)
      fill_rect(rect, color)
      color.red   = [color.red   - minus * grad, 0].max
      color.green = [color.green - minus * grad, 0].max
      color.blue  = [color.blue  - minus * grad, 0].max
      rect.x += 1
      rect.y += rect.height
      rect.width -= 2
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_TargetCursor
#------------------------------------------------------------------------------
#  対象選択されているバトラーや行動選択中のアクターを示すアローカーソルです。
#==============================================================================
class Sprite_TargetCursor < Sprite
  #--------------------------------------------------------------------------
  # ● クラス変数
  #--------------------------------------------------------------------------
  @@cursor_cache = nil
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :battler     # バトラー
  attr_accessor :blink       # 点滅(対象の選択中)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    @wait = LNX11::CURSOR_ANI_SPEED
    @speed = [LNX11::CURSOR_SPEED, 1].max
    @battler = nil
    @sub_cursor = []
    @blink = false
    self.bitmap = cursor_bitmap
    partition = self.bitmap.width / self.height
    self.src_rect.set(0, 0, self.width / partition, self.height)
    self.ox = self.width / 2
    self.oy = self.height / 2
    self.x = @rx = @tx = 0
    self.y = @ry = @ty = 0
    self.z = 98
    self.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    dispose_subcursor
    super
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル作成
  #  メンバー全体にカーソルを表示するために複数のカーソルを作成します。
  #--------------------------------------------------------------------------  
  def create_subcursor(members)
    return unless @sub_cursor.empty?
    members.each_with_index do |battler, i|
      @sub_cursor = Sprite_TargetCursor.new(self.viewport)
      @sub_cursor.set(@rx, @ry)
      @sub_cursor.set(battler, true)
    end
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル解放
  #--------------------------------------------------------------------------  
  def dispose_subcursor
    @sub_cursor.each {|sprite| sprite.dispose }
    @sub_cursor = []
  end
  #--------------------------------------------------------------------------
  # ● サブカーソル更新
  #--------------------------------------------------------------------------  
  def update_subcursor
    @sub_cursor.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● ビットマップの設定
  #--------------------------------------------------------------------------
  def cursor_bitmap
    if !LNX11::CURSOR_NAME.empty?
      return Cache.system(LNX11::CURSOR_NAME)
    else
      # カーソルファイル名が指定されていなければRGSS側で生成
      return @@cursor_cache if @@cursor_cache && !@@cursor_cache.disposed?
      @@cursor_cache = Bitmap.new(32, 32)
      color = Color.new(0, 0, 0)
      @@cursor_cache.lnx_cursor_triangle(26, color, 2)
      2.times {@@cursor_cache.blur}
      color.set(255, 255, 255)
      @@cursor_cache.lnx_cursor_triangle(24, color, 1, 0.5)
      tone = LNX11::CURSOR_TONE ? LNX11::CURSOR_TONE : $game_system.window_tone
      r = 118 + tone.red
      g = 118 + tone.green
      b = 118 + tone.blue
      color.set(r, g, b, 232)
      @@cursor_cache.lnx_cursor_triangle(20, color,  0)
      @@cursor_cache.lnx_cursor_triangle(20, color,  1)
      p "LNX11a:カーソルビットマップを作成しました。"
      return @@cursor_cache
    end
  end
  #--------------------------------------------------------------------------
  # ● カーソルの表示
  #--------------------------------------------------------------------------
  def show
    self.x = @rx = @tx
    self.y = @ry = @ty
    self.visible = true
  end
  #--------------------------------------------------------------------------
  # ● カーソルの非表示
  #--------------------------------------------------------------------------
  def hide
    dispose_subcursor
    @battler = nil
    self.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 移動平均
  #--------------------------------------------------------------------------
  def sma(a, b, p)
    # a = 目標位置 b = 現在地
    return a if a == b || (a - b).abs < 0.3 || p == 1
    result = ((a + b * (p.to_f - 1)) / p.to_f)
    return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_subcursor
    self.opacity = @sub_cursor.empty? ? 255 : 0
    return if !visible || !@sub_cursor.empty?
    super
    # 点滅
    if LNX11::CURSOR_BLINK
      self.blend_type = @blink && Graphics.frame_count / 3 % 2 == 0 ? 1 : 0
    end
    # アニメーションを進める
    @wait -= 1
    if @wait <= 0
      @wait += LNX11::CURSOR_ANI_SPEED
      self.src_rect.x += self.width
      self.src_rect.x = 0 if self.src_rect.x >= self.bitmap.width
    end
    # カーソルの座標を更新
    set_xy if @battler && @sub_cursor.empty?
    self.x = @rx = sma(@tx, @rx, @speed)
    self.y = @ry = sma(@ty, @ry, @speed)
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置の設定
  #--------------------------------------------------------------------------
  def set(*args)
    if args[0].is_a?(Numeric)
      # 引数一つ目が数値なら、XY指定
      @battler = nil
      set_xy(args[0], args[1])
      @blink = args[2] ? args[2] : false
    else
      # バトラーorシンボル指定
      if @battler != args[0]
        @battler = args[0]
        dispose_subcursor
        case args[0]
        when :party        ; create_subcursor($game_party.members)
        when :troop        ; create_subcursor($game_troop.alive_members)
        when :troop_random ; create_subcursor($game_troop.alive_members)
        else ; args[0] ? set_xy : hide
        end
      end
      @blink = args[1] ? args[1] : false
    end
    # スピードが1かカーソルが非表示なら表示に変える
    show if @sub_cursor.empty? && (@speed == 1 || !visible)
  end
  #--------------------------------------------------------------------------
  # ● カーソル位置をバトラーの位置に設定
  #--------------------------------------------------------------------------
  def set_xy(x = nil, y = nil)
    if x
      # 直接指定
      x += LNX11::CURSOR_OFFSET[:x]
      y += LNX11::CURSOR_OFFSET[:y]
    else
      # バトラーの座標
      x = @battler.screen_x + LNX11::CURSOR_OFFSET[:x]
      y = @battler.screen_y_top + LNX11::CURSOR_OFFSET[:y]
    end
    @tx = x
    minmax = LNX11::CURSOR_MINMAX
    @ty = [[y, minmax[:min] + self.oy].max, minmax[:max]].min
  end
end

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

class Sprite_OneLine_BattleLog < Sprite
  @@grad_cache = nil
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor   :position # 表示位置(行)
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(width, height, max_line_number)
    super(nil)
    @rx = @ry = 0
    @line_height = height
    @max_line_number = max_line_number
    @position = -1
    @visible = true
    self.ox = -LNX11::STORAGE_OFFSET[:x]
    self.oy = -LNX11::STORAGE_OFFSET[:y]
    self.opacity = 0
    self.z = 96
    self.bitmap = Bitmap.new(width * 0.75, height)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    self.bitmap.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● スプライトの表示
  #--------------------------------------------------------------------------  
  def show
    @visible = true
  end
  #--------------------------------------------------------------------------
  # ● スプライトの非表示
  #--------------------------------------------------------------------------  
  def hide
    @visible = false
    @position = -1
  end
  #--------------------------------------------------------------------------
  # ● 表示しているか?
  #--------------------------------------------------------------------------  
  def visible?
    @visible
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if self.opacity == 0
    self.opacity += @visible && @position >= 0 ? 24 : -24
    self.visible = self.opacity > 0
    return unless @visible # 不可視状態なら座標を更新しない
    @ry = (target_y + (@ry * 5)) / 6.0 if target_y < @ry
    @rx += 2 if @rx < 0
    self.x = @rx
    self.y = @ry
  end
  #--------------------------------------------------------------------------
  # ● テキストの描画
  #  自身が持つ Bitmap で描画するのではなく、Window の contents から
  # コピーします(Sprite からでは Window_Base#draw_text_ex が扱えないため)。
  #--------------------------------------------------------------------------
  def set_text(window, position)
    self.bitmap.clear
    # 横グラデーション
    if @@grad_cache && !@@grad_cache.disposed?
      self.bitmap.blt(0, 0, @@grad_cache, self.bitmap.rect)
    else
      color = LNX11::STORAGE_GRADIENT_COLOR
      fillrect = self.bitmap.rect
      fillrect.width /= 2
      self.bitmap.gradient_fill_rect(fillrect, color[0], color[1])
      @@grad_cache = self.bitmap.clone
    end
    # contents からコピー
    self.bitmap.blt(4, 0, window.contents, self.bitmap.rect)
    self.opacity = 1
    @rx = -8
    @position = position
    @ry = target_y
  end
  #--------------------------------------------------------------------------
  # ● 位置の繰り上げ
  #--------------------------------------------------------------------------
  def up_position
    @position -= 1
  end
  #--------------------------------------------------------------------------
  # ● メッセージが空か?(表示待ち)
  #--------------------------------------------------------------------------
  def mes_empty?
    @position < 0
  end
  #--------------------------------------------------------------------------
  # ● 移動するべき Y 座標
  #--------------------------------------------------------------------------
  def target_y
    @position * @line_height
  end
end

#==============================================================================
# ■ Window_BattleLog
#------------------------------------------------------------------------------
#  戦闘の進行を実況表示するウィンドウです。
#==============================================================================

class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    lnx11a_initialize
    # バトルログタイプが 1 以上なら非表示にする
    @storage_number = 0
    hide if LNX11::BATTLELOG_TYPE >= 1
    BattleManager.log_window = self
  end
  #--------------------------------------------------------------------------
  # ● [追加]:文章の配列のクリア
  #--------------------------------------------------------------------------
  def lines_clear
    @lines.clear if LNX11::BATTLELOG_TYPE == 1
  end
  #--------------------------------------------------------------------------
  # ● [追加]:指定ウェイト
  #--------------------------------------------------------------------------
  def abs_wait(wait)
    @method_wait.call(wait) if @method_wait
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:メッセージ速度の取得
  #--------------------------------------------------------------------------
  def message_speed
    return 20
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:エフェクト実行が終わるまでウェイト
  #--------------------------------------------------------------------------
  def wait_for_effect
    return if LNX11::BATTLELOG_TYPE > 0
    @method_wait_for_effect.call if @method_wait_for_effect
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アニメーションのウェイト用メソッドの設定
  #--------------------------------------------------------------------------
  def method_wait_for_animation=(method)
    @method_wait_for_animation = method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:アニメーション再生が終わるまでウェイト
  #--------------------------------------------------------------------------
  def wait_for_animation
    @method_wait_for_animation.call if @method_wait_for_animation
  end
  
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウィンドウ高さの取得
  #--------------------------------------------------------------------------
  alias :lnx11a_window_height :window_height
  def window_height
    LNX11::BATTLELOG_TYPE == 1 ? fitting_height(1) : lnx11a_window_height
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:最大行数の取得
  #--------------------------------------------------------------------------
  alias :lnx11a_max_line_number :max_line_number
  def max_line_number
    num = LNX11::STORAGE_LINE_NUMBER
    LNX11::BATTLELOG_TYPE == 1 ? num : lnx11a_max_line_number
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:行の高さを取得
  #--------------------------------------------------------------------------
  def line_height
    LNX11::BATTLELOG_TYPE == 1 ? LNX11::STORAGE_LINE_HEIGHT : super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フォント設定のリセット
  #--------------------------------------------------------------------------
  def reset_font_settings
    super
    return unless LNX11::BATTLELOG_TYPE == 1
    contents.font.size = LNX11::STORAGE_FONT[:size]
    contents.font.out_color.set(LNX11::STORAGE_FONT[:out_color])
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:データ行数の取得
  #--------------------------------------------------------------------------
  alias :lnx11a_line_number :line_number
  def line_number
    return 0 if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? @storage_number : lnx11a_line_number
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:背景スプライトの作成
  #--------------------------------------------------------------------------
  alias :lnx11a_create_back_sprite :create_back_sprite
  def create_back_sprite
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      create_message_sprite
    else
      # 背景
      lnx11a_create_back_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:背景スプライトの解放
  #--------------------------------------------------------------------------
  alias :lnx11a_dispose_back_sprite :dispose_back_sprite
  def dispose_back_sprite
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      dispose_message_sprite
    else
      # 背景
      lnx11a_dispose_back_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの作成
  #--------------------------------------------------------------------------
  def create_message_sprite
    # メッセージスプライト 行数分だけ作成する
    @mes_position = 0 # 次にメッセージを表示させる位置
    @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME # ログが進行するまでの時間
    @mes_sprites = Array.new(max_line_number + 1) {
    Sprite_OneLine_BattleLog.new(self.width, line_height, max_line_number)}
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの解放
  #--------------------------------------------------------------------------
  def dispose_message_sprite
    @mes_sprites.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを表示
  #--------------------------------------------------------------------------
  def show_message_sprite
    @mes_sprites.each {|sprite| sprite.show }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを非表示
  #--------------------------------------------------------------------------
  def hide_message_sprite
    @mes_sprites.each {|sprite| sprite.hide }
    @mes_position = 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトを一つ進める
  #--------------------------------------------------------------------------
  def up_message_sprite
    @mes_sprites.each {|sprite| sprite.up_position }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:空のメッセージスプライトを返す
  #--------------------------------------------------------------------------
  def empty_message_sprite
    @mes_sprites.each {|sprite| return sprite if sprite.mes_empty? }
    @mes_sprites[0]
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトの更新
  #--------------------------------------------------------------------------
  def update_message_sprite
    # バトルログ消去フラグが有効
    if $game_temp.battlelog_clear
      $game_temp.battlelog_clear = false
      # スプライトが表示されていれば非表示にする
      if @mes_sprites[0].visible?
        hide_message_sprite
        lines_clear
      end
    end
    # ログの自動進行
    @mesup_count -= 1
    if @mesup_count <= 0 && @mes_position > 0
      up_message_sprite
      @mes_position -= 1
      @mesup_count = LNX11::STORAGE_UP_MESSAGE_TIME
    end
    @mes_sprites.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージスプライトのリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_message_sprite
    # 文章が無ければ何もしない
    return if @lines.empty?
    # スプライトを表示する
    show_message_sprite unless @mes_sprites[0].visible?
    # 文章の描画
    contents.clear
    @lines[0] = last_text
    return if @lines[0].empty?
    draw_line(0)
    @storage_number += 1
    # ウィンドウの内容をスプライトにコピー
    empty_message_sprite.set_text(self, @mes_position)
    # スプライト位置の変動   
    if @mes_position < max_line_number
      @mes_position += 1
    elsif @mesup_count > 0
      up_message_sprite
    end
    @mesup_count = (LNX11::STORAGE_UP_MESSAGE_TIME * 1.5).truncate
  end  
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_message_sprite if LNX11::BATTLELOG_TYPE == 1
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:リフレッシュ
  #--------------------------------------------------------------------------
  alias :lnx11a_refresh :refresh
  def refresh
    return if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? refresh_message_sprite : lnx11a_refresh
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:クリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear :clear
  def clear
    return if LNX11::BATTLELOG_TYPE == 2
    LNX11::BATTLELOG_TYPE == 1 ? @storage_number = 0 : lnx11a_clear
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:一行戻る
  #--------------------------------------------------------------------------
  alias :lnx11a_back_one :back_one
  def back_one
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      @storage_number = [@storage_number - 1, 0].max
    else
      # 通常
      lnx11a_back_one
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:指定した行に戻る
  #--------------------------------------------------------------------------
  alias :lnx11a_back_to :back_to
  def back_to(line_number)
    if LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      @storage_number -= 1 while @storage_number > line_number
    else
      # 通常
      lnx11a_back_to(line_number)
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ウェイト
  #--------------------------------------------------------------------------
  alias :lnx11a_wait :wait
  def wait
    return if LNX11::BATTLELOG_TYPE == 2
    # 元のメソッドを呼ぶ
    lnx11a_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテム使用の表示
  #  使用時アニメーションの処理を追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_display_use_item :display_use_item
  def display_use_item(subject, item)
    if item.use_animation > 0
      # 使用時アニメーションが設定されていれば再生
      subject.animation_id = item.use_animation
      subject.animation_mirror = false
    end
    # 元のメソッドを呼ぶ
    lnx11a_display_use_item(subject, item)
    # アニメーションのウェイト
    wait_for_animation if item.use_animation > 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップデータの取得
  #--------------------------------------------------------------------------
  def popup_data
    $game_temp.popup_data
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:反撃の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_counter :display_counter
  def display_counter(target, item)
    # ポップアップ
    popup_data.popup_text(target, :counter)
    # 元のメソッドを呼ぶ
    lnx11a_display_counter(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:反射の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_reflection :display_reflection
  def display_reflection(target, item)
    # ポップアップ
    popup_data.popup_text(target, :reflection)
    # 元のメソッドを呼ぶ
    lnx11a_display_reflection(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:身代わりの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_substitute :display_substitute
  def display_substitute(substitute, target)
    # ポップアップ
    popup_data.popup_text(substitute, :substitute)
    # 元のメソッドを呼ぶ
    lnx11a_display_substitute(substitute, target)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:失敗の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_failure :display_failure
  def display_failure(target, item)
    if target.result.hit? && !target.result.success
      # ポップアップ (ミスと同じ扱いにする)
      popup_data.popup_miss(target, item)
    end
    # 元のメソッドを呼ぶ
    lnx11a_display_failure(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ミスの表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_miss :display_miss
  def display_miss(target, item)
    # ポップアップ
    popup_data.popup_miss(target, item)
    # 元のメソッドを呼ぶ   
    lnx11a_display_miss(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:回避の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_evasion :display_evasion
  def display_evasion(target, item)
    # ポップアップ (ミスと同じ扱いにする)
    popup_data.popup_miss(target, item)
    # 元のメソッドを呼ぶ   
    lnx11a_display_evasion(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:HP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_hp_damage :display_hp_damage
  def display_hp_damage(target, item)
    # ポップアップ
    popup_data.popup_hp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_hp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:MP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_mp_damage :display_mp_damage
  def display_mp_damage(target, item)
    # ポップアップ
    popup_data.popup_mp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_mp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:TP ダメージ表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_tp_damage :display_tp_damage
  def display_tp_damage(target, item)
    # ポップアップ
    popup_data.popup_tp_damage(target, item)
    # 元のメソッドを呼ぶ
    lnx11a_display_tp_damage(target, item)
    # ポップアップウェイト
    popup_data.add_wait
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート付加の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_added_states :display_added_states
  def display_added_states(target)
    # ポップアップ
    popup_data.popup_added_states(target)
    # 元のメソッドを呼ぶ
    lnx11a_display_added_states(target)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート解除の表示
  #--------------------------------------------------------------------------
  alias :lnx11a_display_removed_states :display_removed_states
  def display_removed_states(target)
    # ポップアップ
    popup_data.popup_removed_states(target)
    # 元のメソッドを呼ぶ
    lnx11a_display_removed_states(target)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:能力強化/弱体の表示(個別)
  #--------------------------------------------------------------------------
  alias :lnx11a_display_buffs :display_buffs
  def display_buffs(target, buffs, fmt)
    # ポップアップ
    popup_data.popup_buffs(target, buffs, fmt)
    # 元のメソッドを呼ぶ
    lnx11a_display_buffs(target, buffs, fmt)
  end
end

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

class RPG::BaseItem  
  #--------------------------------------------------------------------------
  # ● [追加]:バトラーグラフィックファイル名を取得
  #--------------------------------------------------------------------------
  def default_battler_graphic
    # キャッシュがある場合、それを返す
    return @default_battler_graphic if @default_battler_graphic
    # メモ取得
    re = LNX11::RE_BATTLER =~ note
    @default_battler_graphic = re ? $1 : ""
  end
  #--------------------------------------------------------------------------
  # ● [追加]:敵キャラの通常攻撃アニメの取得
  #--------------------------------------------------------------------------
  def atk_animation
    # キャッシュがある場合、それを返す
    return @atk_animation if @atk_animation
    # メモ取得
    re = LNX11::RE_ATK_ANIMATION =~ note
    @atk_animation = re ? $1.to_i : 0 #1
  end
end

#==============================================================================
# ■ RPG::UsableItem
#------------------------------------------------------------------------------
#  スキルとアイテムのスーパークラス。
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● [エイリアス]:対象の選択操作が必要か否かを取得
  #--------------------------------------------------------------------------
  alias :lnx11a_need_selection? :need_selection?
  def need_selection?
    LNX11::FIX_TARGET_CHECKE && scope > 0 ? true : lnx11a_need_selection?
  end
  #--------------------------------------------------------------------------
  # ● [追加]:使用時アニメの取得
  #--------------------------------------------------------------------------
  def use_animation
    # キャッシュがある場合、それを返す
    return @use_animation if @use_animation
    # メモ取得
    re = LNX11::RE_USE_ANIMATION =~ note
    @use_animation = re ? $1.to_i : 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ非表示の取得
  #--------------------------------------------------------------------------
  def no_display
    # キャッシュがある場合、それを返す
    return @no_display if @no_display
    # メモ取得
    re = LNX11::RE_USABLEITEM_NO_DISPLAY =~ note
    @no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:使用時追加ウェイトの取得
  #--------------------------------------------------------------------------
  def display_wait
    # キャッシュがある場合、それを返す
    return @display_wait if @display_wait
    # メモ取得
    re = LNX11::RE_DISPLAY_WAIT =~ note
    @display_wait = re ? $1.to_i : LNX11::HELPDISPLAT_WAIT
  end
  #--------------------------------------------------------------------------
  # ● [追加]:終了時追加ウェイトの取得
  #--------------------------------------------------------------------------
  def end_wait
    # キャッシュがある場合、それを返す
    return @end_wait if @end_wait
    # メモ取得
    re = LNX11::RE_END_WAIT =~ note
    @end_wait = re ? $1.to_i : LNX11::HELPDISPLAT_END_WAIT
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ説明を取得
  #--------------------------------------------------------------------------
  def short_description
    # キャッシュがある場合、それを返す
    return @short_description if @short_description
    # メモ取得
    re = LNX11::RE_SHORT_DESCRIPTION =~ note
    @short_description = re ? $1 : ""
  end
end

#==============================================================================
# ■ RPG::State
#------------------------------------------------------------------------------
#  ステートのデータクラス。
#==============================================================================

class RPG::State < RPG::BaseItem
  #--------------------------------------------------------------------------
  # ● [追加]:ステートアニメの取得
  #--------------------------------------------------------------------------
  def state_animation
    # キャッシュがある場合、それを返す
    return @state_animation if @state_animation
    # メモ取得
    re = LNX11::RE_STATE_ANIMATION =~ note
    @state_animation = re ? $1.to_i : 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップ表示名の取得
  # <<ver1.10>>
  #  このメソッドは付加/解除ポップアップ表示名が設定されていない場合のみ
  # 呼び出されるようになりました。
  #--------------------------------------------------------------------------
  def display_name
    # キャッシュがある場合、それを返す
    return @display_name if @display_name
    # メモ取得
    re = LNX11::RE_STATE_DISPLAY =~ note
    @display_name = re ? $1 : name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップ表示名の取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def add_display_name
    # キャッシュがある場合、それを返す
    return @add_display_name if @add_display_name
    # メモ取得
    re = LNX11::RE_STATE_ADD_DISPLAY =~ note
    @add_display_name = re ? $1 : display_name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップ表示名の取得 <<ver1.10>>
  #--------------------------------------------------------------------------
  def remove_display_name
    # キャッシュがある場合、それを返す
    return @remove_display_name if @remove_display_name
    # メモ取得
    re = LNX11::RE_STATE_REM_DISPLAY =~ note
    @remove_display_name = re ? $1 : display_name
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def no_display?
    # キャッシュがある場合、それを返す
    return @no_display if @no_display
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_NO_DISPLAY =~ note ||
       LNX11::RE_STATE_REM_NO_DISPLAY =~ note
      return @no_display = false
    end
    # メモ取得
    re = LNX11::RE_STATE_NO_DISPLAY =~ note
    @no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def add_no_display?
    return true if no_display?
    # キャッシュがある場合、それを返す
    return @add_no_display if @add_no_display
    # メモ取得
    re = LNX11::RE_STATE_ADD_NO_DISPLAY =~ note
    @add_no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップ非表示の取得
  #--------------------------------------------------------------------------
  def remove_no_display?
    return true if no_display?
    # キャッシュがある場合、それを返す
    return @remove_no_display if @remove_no_display
    # メモ取得
    re = LNX11::RE_STATE_REM_NO_DISPLAY =~ note
    @remove_no_display = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:有利なステートの取得
  #--------------------------------------------------------------------------
  def advantage?
    # キャッシュがある場合、それを返す
    return @advantage if @advantage
    # メモ取得
    re = LNX11::RE_STATE_ADVANTAGE =~ note
    @advantage = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def popup_type
    # キャッシュがある場合、それを返す
    return @popup_type if @popup_type != nil
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_TYPE =~ note ||
       LNX11::RE_STATE_REM_TYPE =~ note
      return @popup_type = false
    end
    # メモ取得
    re = LNX11::RE_STATE_TYPE =~ note
    @popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def add_popup_type
    return popup_type if popup_type
    # キャッシュがある場合、それを返す
    return @add_popup_type if @add_popup_type != nil
    # メモ取得
    re = LNX11::RE_STATE_ADD_TYPE =~ note
    @add_popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除ポップアップタイプの取得
  #--------------------------------------------------------------------------
  def remove_popup_type
    return popup_type if popup_type
    # キャッシュがある場合、それを返す
    return @remove_popup_type if @remove_popup_type != nil
    # メモ取得
    re = LNX11::RE_STATE_REM_TYPE =~ note
    @remove_popup_type = re ? $1.to_i : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def no_decoration?
    # キャッシュがある場合、それを返す
    return @no_decoration if @no_decoration
    # 付加/解除のどちらかで設定されていれば無視する
    if LNX11::RE_STATE_ADD_NO_DECORATION =~ note ||
       LNX11::RE_STATE_REM_NO_DECORATION =~ note
      return @no_decoration = false
    end
    # メモ取得
    re = LNX11::RE_STATE_NO_DECORATION =~ note
    @no_decoration = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:付加修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def add_no_decoration?
    return true if no_decoration?
    # キャッシュがある場合、それを返す
    return @add_no_decoration if @add_no_decoration
    # メモ取得
    re = LNX11::RE_STATE_ADD_NO_DECORATION =~ note
    @add_no_decoration = re ? true : false
  end
  #--------------------------------------------------------------------------
  # ● [追加]:解除修飾文字非表示の取得
  #--------------------------------------------------------------------------
  def remove_no_decoration?
    return true if no_decoration?
    # キャッシュがある場合、それを返す
    return @remove_no_decoration if @remove_no_decoration
    # メモ取得
    re = LNX11::RE_STATE_REM_NO_DECORATION =~ note
    @remove_no_decoration = re ? true : false
  end
end

#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  戦闘の進行を管理するモジュールです。
#==============================================================================

class << BattleManager
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :preemptive             # 先制攻撃フラグ
  attr_reader   :surprise               # 不意打ちフラグ
  attr_accessor :log_window             # バトルログウィンドウ
  attr_accessor :update_for_wait_method # ウェイト中のフレーム更新
  attr_accessor :helpdisplay_set_method        # 簡易ヘルプ表示
  attr_accessor :helpdisplay_clear_method      # 簡易ヘルプ消去
  attr_accessor :helpdisplay_wait_short_method # 簡易ヘルプ・短時間ウェイト
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ表示
  #--------------------------------------------------------------------------
  def helpdisplay_set(*args)
    @helpdisplay_set_method.call(*args) if @helpdisplay_set_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ消去
  #--------------------------------------------------------------------------
  def helpdisplay_clear(*args)
    @helpdisplay_clear_method.call(*args) if @helpdisplay_clear_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:簡易ヘルプ・短時間ウェイト
  #--------------------------------------------------------------------------
  def helpdisplay_wait_short
    @helpdisplay_wait_short_method.call if @helpdisplay_wait_short_method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:キー入力待ち
  #--------------------------------------------------------------------------
  def helpdisplay_wait_input
    return if $game_message.helpdisplay_texts.empty?
    return if LNX11::MESSAGE_TYPE == 0
    return if !@helpdisplay_wait_input || !@update_for_wait_method
    update_for_wait_method.call while !Input.press?(:B) && !Input.press?(:C)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージ進行の SE 再生
  #--------------------------------------------------------------------------
  def messagedisplay_se_play
    return if !@helpdisplay_se
    @helpdisplay_se.play  
    @helpdisplay_se = nil if @helpdisplay_se == LNX11::LEVELUP_SE
  end
  #--------------------------------------------------------------------------
  # ● [追加]:メッセージ進行
  #--------------------------------------------------------------------------
  def process_messagedisplay(wait)
    return if $game_message.helpdisplay_texts.empty?
    return if LNX11::MESSAGE_TYPE == 0
    $game_temp.battlelog_clear = true
    BattleManager.log_window.update
    if LNX11::BATTLELOG_TYPE == 2 || LNX11::MESSAGE_TYPE == 2
      # 簡易ヘルプ
      $game_message.helpdisplay_texts.each do |text|
        helpdisplay_wait_short
        messagedisplay_se_play
        helpdisplay_set(text, wait)
        helpdisplay_wait_input
      end
      helpdisplay_clear
    elsif LNX11::BATTLELOG_TYPE == 0
      # VXAceデフォルト
      BattleManager.log_window.clear
      $game_message.helpdisplay_texts.each do |text|
        messagedisplay_se_play
        BattleManager.log_window.add_text(text)
        BattleManager.log_window.abs_wait(wait)
        helpdisplay_wait_input
        max = BattleManager.log_window.max_line_number
        # 表示がいっぱいになったら消去
        if BattleManager.log_window.line_number >= max
          BattleManager.log_window.clear
        end
      end
      BattleManager.log_window.clear
    elsif LNX11::BATTLELOG_TYPE == 1
      # 蓄積型
      $game_message.helpdisplay_texts.each do |text|
        messagedisplay_se_play
        BattleManager.log_window.add_text(text)
        BattleManager.log_window.abs_wait(wait)
        helpdisplay_wait_input
      end
      $game_temp.battlelog_clear = true
      BattleManager.log_window.update
    end
    $game_message.helpdisplay_texts.clear
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:メッセージ表示が終わるまでウェイト
  #--------------------------------------------------------------------------
  alias :lnx11a_wait_for_message :wait_for_message
  def wait_for_message
    # 簡易ヘルプ表示
    process_messagedisplay(@helpdisplay_wait ? @helpdisplay_wait : 60)
    return if $game_message.texts.empty?
    # 元のメソッドを呼ぶ
    lnx11a_wait_for_message
  end  
  #--------------------------------------------------------------------------
  # ● [エイリアス]:戦闘開始
  #--------------------------------------------------------------------------
  alias :lnx11a_battle_start :battle_start
  def battle_start   
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:battle_start][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:battle_start][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    lnx11a_battle_start
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:勝利の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_victory :process_victory
  def process_victory
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:victory][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:victory][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_victory
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:逃走の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_escape :process_escape
  def process_escape
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:escape][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:escape][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_escape
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:敗北の処理
  #--------------------------------------------------------------------------
  alias :lnx11a_process_defeat :process_defeat
  def process_defeat
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:defeat][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:defeat][1]
    # メッセージウィンドウへのテキスト追加を禁止する
    $game_message.add_disabled
    # 元のメソッドを呼ぶ
    success = lnx11a_process_defeat
    # メッセージウィンドウへのテキスト追加を許可する
    $game_message.add_enabled
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    return success
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ドロップアイテムの獲得と表示
  #--------------------------------------------------------------------------
  alias :lnx11a_gain_drop_items :gain_drop_items
  def gain_drop_items
    helpdisplay_clear
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:drop_item][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:drop_item][1]
    @helpdisplay_se = LNX11::DROPITEM_SE
    # 元のメソッドを呼ぶ
    lnx11a_gain_drop_items
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    @helpdisplay_se = nil
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:経験値の獲得とレベルアップの表示
  #--------------------------------------------------------------------------
  def gain_exp
    count = 0 #
    $game_party.battle_members.each do |actor| #
      count += 1 if actor.alive? #
    end #
   
    @helpdisplay_wait = LNX11::MESSAGE_WAIT[:levelup][0]
    @helpdisplay_wait_input = LNX11::MESSAGE_WAIT[:levelup][1]
    $game_party.all_members.each do |actor|
      @helpdisplay_se = LNX11::LEVELUP_SE
      actor.gain_exp(($game_troop.exp_total.to_f/count).ceil.to_i)
      #actor.gain_exp($game_troop.exp_total)
      # レベルアップ毎にメッセージ表示ウェイト
      wait_for_message
    end
    @helpdisplay_wait = nil
    @helpdisplay_wait_input = nil
    @helpdisplay_se = nil
  end
end

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

class Game_Temp
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :popup_data            # ポップアップスプライト
  attr_accessor :actor_battler_graphic # アクターのバトラーグラフィック
  attr_accessor :battlelog_clear       # バトルログ消去フラグ
  attr_accessor :target_cursor_sprite  # ターゲットカーソルスプライト
  attr_accessor :last_target_cursor    # 対象選択のカーソル記憶
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11a_initialize :initialize
  def initialize
    # 元のメソッドを呼ぶ
    lnx11a_initialize
    # 追加
    @popup_data = nil
    @actor_battler_graphic = []
    @battlelog_clear = false
    @battle_status_refresh = nil
    @target_cursor_sprite = nil
    clear_last_target_cursor
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトルステータス更新メソッドの設定
  #--------------------------------------------------------------------------
  def method_battle_status_refresh=(method)
    @battle_status_refresh = method
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトルステータス更新
  #--------------------------------------------------------------------------
  def battle_status_refresh
    return unless $game_party.in_battle
    @battle_status_refresh.call if @battle_status_refresh
  end
  #--------------------------------------------------------------------------
  # ● [追加]:対象選択のカーソル記憶をクリア
  #--------------------------------------------------------------------------
  def clear_last_target_cursor
    @last_target_cursor = {:actor => nil, :enemy => nil}
  end
end

#==============================================================================
# ■ Game_Action
#------------------------------------------------------------------------------
#  戦闘行動を扱うクラスです。
#==============================================================================

class Game_Action
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ターゲットの配列作成
  #--------------------------------------------------------------------------
  alias :lnx11a_make_targets :make_targets
  def make_targets   
    if LNX11::TROOP_X_SORT
      # 元のメソッドを呼んでソート
      return lnx11a_make_targets.sort {|a,b| a.screen_x <=> b.screen_x}
    else
      return lnx11a_make_targets
    end
  end
end

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

class Game_ActionResult
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :element_rate               # 属性修正値
  #--------------------------------------------------------------------------
  # ● ダメージ値のクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_damage_values :clear_damage_values
  def clear_damage_values
    # 元のメソッドを呼ぶ
    lnx11a_clear_damage_values
    # 属性修正値をクリア
    @element_rate = 1.0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:属性修正値の取得
  #--------------------------------------------------------------------------
  def element_rate
    return @element_rate if @element_rate
    @element_rate = 1.0
  end
end

#==============================================================================
# ■ Game_BattlerBase
#------------------------------------------------------------------------------
#  バトラーを扱う基本のクラスです。
#==============================================================================

class Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップデータの取得
  #--------------------------------------------------------------------------
  def popup_data
    $game_temp.popup_data
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル使用コストの支払い
  #--------------------------------------------------------------------------
  alias :lnx11a_pay_skill_cost :pay_skill_cost
  def pay_skill_cost(skill)
    rmp = self.mp
    rtp = self.tp
    # 元のメソッドを呼ぶ   
    lnx11a_pay_skill_cost(skill)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_mp(self, (rmp - self.mp).truncate, true)
    popup_data.popup_regenerate_tp(self, (rtp - self.tp).truncate, true)
  end
end

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

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :loop_animation_id     # ループアニメーション ID
  attr_accessor :loop_animation_mirror # ループアニメーション 左右反転フラグ
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スプライトのエフェクトをクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_sprite_effects :clear_sprite_effects
  def clear_sprite_effects
    # 元のメソッドを呼ぶ
    lnx11a_clear_sprite_effects
    @loop_animation_id = 0
    @loop_animation_mirror = false
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:アニメーション ID の設定
  #--------------------------------------------------------------------------  
  def animation_id=(id)
    return unless battle_member?
    @animation_id = id
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステートのループアニメーションの設定
  #--------------------------------------------------------------------------
  def set_state_animation
    # 表示優先度が高いステートを優先
    sort_states
    anime = @states.collect {|id| $data_states[id].state_animation }
    anime.delete(0)
    @loop_animation_id = anime[0] ? anime[0] : 0
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステート情報をクリア
  #--------------------------------------------------------------------------
  alias :lnx11a_clear_states :clear_states
  def clear_states
    # 元のメソッドを呼ぶ
    lnx11a_clear_states
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステートの付加
  #--------------------------------------------------------------------------
  alias :lnx11a_add_state :add_state
  def add_state(state_id)
    # 元のメソッドを呼ぶ
    lnx11a_add_state(state_id)
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ステートの解除
  #--------------------------------------------------------------------------
  alias :lnx11a_remove_state :remove_state
  def remove_state(state_id)
    # 元のメソッドを呼ぶ
    lnx11a_remove_state(state_id)
    # ステートアニメ設定
    set_state_animation
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの取得
  #--------------------------------------------------------------------------
  def popup_delay
    return @popup_delay if @popup_delay
    popup_delay_clear
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの設定
  #--------------------------------------------------------------------------
  def popup_delay=(delay)
    @popup_delay = delay
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ポップアップディレイの設定
  #--------------------------------------------------------------------------
  def popup_delay_clear
    @popup_delay = Array.new(16) { 0 }
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテムの属性修正値を取得
  #  弱点/耐性の判定を追加します。
  #--------------------------------------------------------------------------
  alias :lnx11a_item_element_rate :item_element_rate
  def item_element_rate(user, item)
    # 元のメソッドを呼ぶ
    rate = lnx11a_item_element_rate(user, item)
    return rate unless $game_party.in_battle
    # レートを結果に保存する
    @result.element_rate = rate
    rate
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ダメージの処理
  #  吸収による回復のポップアップを生成します。
  #--------------------------------------------------------------------------
  alias :lnx11a_execute_damage :execute_damage
  def execute_damage(user)
    # 元のメソッドを呼ぶ
    lnx11a_execute_damage(user)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_hp_drain(user, @result.hp_drain)
    popup_data.popup_mp_drain(user, @result.mp_drain)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:HP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_hp :regenerate_hp
  def regenerate_hp
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_hp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_hp(self, @result.hp_damage)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:MP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_mp :regenerate_mp
  def regenerate_mp
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_mp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_mp(self, @result.mp_damage)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:TP の再生
  #--------------------------------------------------------------------------
  alias :lnx11a_regenerate_tp :regenerate_tp
  def regenerate_tp
    rtp = self.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_regenerate_tp
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_regenerate_tp(self, rtp - self.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● 被ダメージによる TP チャージ
  #--------------------------------------------------------------------------
  alias :lnx11a_charge_tp_by_damage :charge_tp_by_damage
  def charge_tp_by_damage(damage_rate)
    rtp = self.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_charge_tp_by_damage(damage_rate)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_tp_charge(self, rtp - self.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:スキル/アイテムの使用者側への効果(TP 得)
  #--------------------------------------------------------------------------
  alias :lnx11a_item_user_effect :item_user_effect
  def item_user_effect(user, item)
    rtp = user.tp.to_i
    # 元のメソッドを呼ぶ
    lnx11a_item_user_effect(user, item)
    return unless $game_party.in_battle
    # ポップアップ
    popup_data.popup_tp_gain(user, rtp - user.tp.to_i)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:高さの取得
  #--------------------------------------------------------------------------
  def bitmap_height
    return @bitmap_height if @bitmap_height
    @bitmap_height = 0
  end
  #--------------------------------------------------------------------------
  # ● [追加]:高さの設定
  #--------------------------------------------------------------------------
  def bitmap_height=(y)
    @bitmap_height = y
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Y 座標(頭上)の取得
  #--------------------------------------------------------------------------
  def screen_y_top
    screen_y - @bitmap_height
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Y 座標(中心)の取得
  #--------------------------------------------------------------------------
  def screen_y_center
    screen_y - @bitmap_height / 2
  end
end

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

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :battler_graphic_name    # 後指定のバトラーグラフィック
  attr_accessor :refresh_battler_graphic # バトラーグラフィックの更新フラグ
  attr_accessor :screen_x                # バトル画面 X 座標
  attr_accessor :screen_y                # バトル画面 Y 座標
  attr_accessor :last_actor_command      # 最後に選択したコマンド
  #--------------------------------------------------------------------------
  # ● [再定義]:スプライトを使うか?
  #--------------------------------------------------------------------------
  def use_sprite?
    return true # 使う
  end
  #--------------------------------------------------------------------------
  # ● [追加]:バトル画面 Z 座標の取得
  #--------------------------------------------------------------------------
  def screen_z
    return $game_party.members_screen_z[0] if index == nil
    return $game_party.members_screen_z[index] # Game_EnemyのZ座標は100
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:ダメージ効果の実行
  #--------------------------------------------------------------------------
  alias :lnx11a_perform_damage_effect :perform_damage_effect
  def perform_damage_effect
    # 元のメソッドを呼ぶ
    lnx11a_perform_damage_effect
    # シェイクを無効にしている場合、シェイクをクリア
    $game_troop.screen.clear_shake if LNX11::DISABLED_DAMAGE_SHAKE
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:コラプス効果の実行
  #  アクターの[特徴>その他>消滅エフェクト]の設定を適用するようにします。
  #  処理内容は Game_Enemy のものとほぼ同一です。
  #--------------------------------------------------------------------------
  def perform_collapse_effect
    if $game_party.in_battle
      case collapse_type
      when 0
        @sprite_effect_type = :collapse
        Sound.play_actor_collapse
      when 1
        @sprite_effect_type = :boss_collapse
        Sound.play_boss_collapse1
      when 2
        @sprite_effect_type = :instant_collapse
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:グラフィック設定の配列を返す
  #--------------------------------------------------------------------------
  def graphic_name_index
    case LNX11::DEFAULT_BATTLER_GRAPHIC
    when 0 ; [@face_name, @face_index]
    when 1 ; [@character_name, @character_index]
    end
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:グラフィックの変更
  #--------------------------------------------------------------------------
  alias :lnx11a_set_graphic :set_graphic
  def set_graphic(*args)
    face = graphic_name_index
    # 元のメソッドを呼ぶ
    lnx11a_set_graphic(*args)
    @refresh_battler_graphic = (face != graphic_name_index)
  end
  #--------------------------------------------------------------------------
  # ● [追加]:デフォルトバトラーグラフィックの取得
  #--------------------------------------------------------------------------
  def facebattler
    $game_temp.actor_battler_graphic[id]
  end
  def facebattler=(bitmap)
    facebattler.dispose if facebattler && !facebattler.disposed?
    $game_temp.actor_battler_graphic[id] = bitmap
  end
  #--------------------------------------------------------------------------
  # ● [追加]:後指定のバトラーグラフィックファイル名の取得
  #--------------------------------------------------------------------------
  def battler_graphic_name
    return @battler_graphic_name if @battler_graphic_name != nil
    @battler_graphic_name = ""
  end
  #--------------------------------------------------------------------------
  # ● [追加]:後指定のバトラーグラフィックファイル名の指定
  #--------------------------------------------------------------------------
  def battler_graphic_name=(filename)
    @battler_graphic_name = filename
    @refresh_battler_graphic = true
  end
  #--------------------------------------------------------------------------
  # ● [追加]:顔グラフィックを描画して返す
  #  処理内容は Window_Base の draw_face に準じたものです。
  #--------------------------------------------------------------------------
  def draw_face(face_name, face_index, enabled = true)
    fw = 96
    fh = 96
    # ビットマップを作成して返す
    bitmap = Cache.face(face_name)
    rect = Rect.new(face_index % 4 * fw, face_index / 4 * fh, fw, fh)
    face = Bitmap.new(fw, fh)
    color = LNX11::DEFAULT_BG_COLOR
    face.gradient_fill_rect(face.rect, color[0], color[1], true)
    face.blt(0, 0, bitmap, rect)
    bitmap.dispose
    face
  end
  #--------------------------------------------------------------------------
  # ● [追加]:歩行グラフィックを描画して返す
  #  処理内容は Window_Base の draw_character に準じたものです。
  #--------------------------------------------------------------------------
  def draw_character(character_name, character_index)
    return unless character_name
    bitmap = Cache.character(character_name)
    sign = character_name[/^[\!\$]./]
    if sign && sign.include?('$')
      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) && !@battler.actor?)
      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 !@text.short_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[/pre]

三、
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11b_リフォーム・バトルステータス
#  Spriteでパラメータやゲージを実装した動的なバトルステータスです。
#  画像や設定を変更することでデザインをアレンジすることが可能です。
#   
#  * このスクリプトは LNX11a_XPスタイルバトル の機能拡張スクリプトです。
#  LNX11a_XPスタイルバトル より下のセクションに導入してください。
#
#  また、ステータスの各要素の配置設定を行う
#  LNX11bskin_リフォーム・バトルステータス#スキン設定 も必ず導入してください。
#
#  version   : 1.01 (12/03/13)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-12.html
#
#==============================================================================

#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx11b] = 101 # version
module LNX11b ; end
unless $lnx_include[:lnx11a]
  p "NG:LNX11b_リフォーム・バトルステータス"
  text = "LNX11b: Error! LNX11a より下位のセクションに配置してください。"
  p text
  msgbox text
  exit
end
p "OK:LNX11b_リフォーム・バトルステータス"

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

class Window_BattleStatus < Window_Selectable
  #--------------------------------------------------------------------------
  # ● [エイリアス]:オブジェクト初期化
  #--------------------------------------------------------------------------
  alias :lnx11b_initialize :initialize
  def initialize
    unless $lnx_include[:lnx11bskin]
      text = "LNX11b:Error! LNX11bskin が導入されていません。"
      p text
      msgbox text
      exit
    end
    @sprite_viewport = Viewport.new
    # 元のメソッドを呼ぶ
    lnx11b_initialize
    @sprite_viewport.z = self.z
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]解放
  #--------------------------------------------------------------------------
  def dispose
    @sprite_viewport.dispose
    dispose_status_sprites
    super
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:表示行数の取得
  #--------------------------------------------------------------------------
  def visible_line_number
    return 4
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:行の高さを取得
  #--------------------------------------------------------------------------
  def line_height
    return 24 # ステートアイコン描画領域を確保
  end
  #--------------------------------------------------------------------------
  # ● [オーバーライド]:フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
    update_invisible
    update_status_sprites
  end  
  #--------------------------------------------------------------------------
  # ● [再定義]:表示状態更新
  #--------------------------------------------------------------------------
  def update_invisible
    @sprite_viewport.visible = !$game_party.status_invisible
  end  
  #--------------------------------------------------------------------------
  # ● [再定義]:リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    set_xy
    # ステータススプライトの作成
    create_status_sprites
    draw_all_items
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステータススプライトの作成
  #--------------------------------------------------------------------------
  def create_status_sprites
    return if @sprite != nil
    @sprite = []
    $game_party.battle_members.each_with_index do |actor, i|
      @sprite = Spriteset_BattleStatus.new(actor, self, @sprite_viewport)
    end
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステータススプライトの解放
  #--------------------------------------------------------------------------
  def dispose_status_sprites
    return unless @sprite
    @sprite.each do |sprite|
      sprite.dispose
    end
    @sprite = nil
  end
  #--------------------------------------------------------------------------
  # ● [追加]:ステータススプライトの更新
  #--------------------------------------------------------------------------
  def update_status_sprites
    return unless @sprite
    @sprite.each {|sprite| sprite.update}
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:基本エリアの描画
  #--------------------------------------------------------------------------
  def draw_basic_area(rect, actor)
    # スプライトの更新
    @sprite[actor.index].refresh
  end
  #--------------------------------------------------------------------------
  # ● [再定義]:ゲージエリアの描画
  #--------------------------------------------------------------------------
  def draw_gauge_area(*args)
    # 何もしない
  end
  #--------------------------------------------------------------------------
  # ● [エイリアス]:内容の消去
  #--------------------------------------------------------------------------
  alias :lnx11b_all_clear :all_clear
  def all_clear
    # 元のメソッドを呼ぶ
    lnx11b_all_clear
    # ステータススプライトの解放
    dispose_status_sprites
  end
end

#==============================================================================
# ■ [追加]:Spriteset_BattleStatus
#------------------------------------------------------------------------------
#  スプライトによるバトルステータス。
#==============================================================================

class Spriteset_BattleStatus
  include LNX11
  include LNX11b
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(battler, status_window, viewport = nil)
    @battler = battler
    @viewport = viewport
    @status_window = status_window
    # 基準座標
    @x = $game_party.members_screen_x[battler.index] + STATUS_OFFSET[:x]
    @x -= STATUS_WIDTH / 2
    @y = @status_window.y + STATUS_OFFSET[:y]
    # メインスキン
    @main_skin_sprite = create_skin(MAIN_SKIN)
    # ステート
    @state_skin_sprite = create_skin(STATE_SKIN)
    @state_icon = create_state_icon(STATE_ICON)
    # 名前
    @name_sprite = create_name(NAME)
    # 数字
    num = @battler.hp ; max = @battler.mhp
    @hp_number_sprite = create_number(num, max, HP_NUMBER_FORMAT)
    num = @battler.mp ; max = @battler.mmp
    @mp_number_sprite = create_number(num, max, MP_NUMBER_FORMAT)
    if $data_system.opt_display_tp
      num = @battler.tp ; max = @battler.max_tp
      @tp_number_sprite = create_number(num, max, TP_NUMBER_FORMAT)
    end
    # 数字(最大値)
    num = @battler.mhp
    @mhp_number_sprite = create_number(num, num, MAXHP_NUMBER_FORMAT)
    num = @battler.mmp
    @mmp_number_sprite = create_number(num, num, MAXMP_NUMBER_FORMAT)
    if $data_system.opt_display_tp
      num = @battler.max_tp
      @mtp_number_sprite = create_number(num, num, MAXTP_NUMBER_FORMAT)
    end
    # ゲージ
    @hp_gauge_sprite = create_gauge(@battler.hp_rate, HP_GAUGE_FORMAT)
    @mp_gauge_sprite = create_gauge(@battler.mp_rate, MP_GAUGE_FORMAT)
    if $data_system.opt_display_tp
      @tp_gauge_sprite = create_gauge(@battler.tp_rate, TP_GAUGE_FORMAT)
    end
    # ゲージと数字スプライトの同期
    if HP_GAUGE_FORMAT[:number_link] && @hp_number_sprite
      @hp_gauge_sprite.number = @hp_number_sprite if @hp_gauge_sprite
    end
    if MP_GAUGE_FORMAT[:number_link] && @mp_number_sprite
      @mp_gauge_sprite.number = @mp_number_sprite if @mp_gauge_sprite
    end
    if TP_GAUGE_FORMAT[:number_link] && @tp_number_sprite
      @tp_gauge_sprite.number = @tp_number_sprite if @tp_gauge_sprite
    end
    # 更新するスプライトの配列
    @sprites = [@main_skin_sprite, @state_skin_sprite, @state_icon,
      @name_sprite, @hp_number_sprite, @mp_number_sprite, @tp_number_sprite,
      @mhp_number_sprite, @mmp_number_sprite, @mtp_number_sprite,
      @hp_gauge_sprite, @mp_gauge_sprite, @tp_gauge_sprite]
    @sprites.delete(nil)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    @sprites.each {|sprite| sprite.dispose }
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    @sprites.each {|sprite| sprite.update }
  end
  #--------------------------------------------------------------------------
  # ● スプライトの位置設定
  #--------------------------------------------------------------------------  
  def move(sprite, format)
    # 表示基準 X 座標
    x = format[:x_fixed] ? @x : @x - @status_window.min_offset     
    sprite.move(x + format[:x], @y + format[:y], format[:z])
  end
  #--------------------------------------------------------------------------
  # ● スキンの作成
  #--------------------------------------------------------------------------  
  def create_skin(format)
    return nil unless format[:enabled]
    sprite = Sprite_Skin.new(format, @viewport)
    move(sprite, format)
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● 名前の作成
  #--------------------------------------------------------------------------  
  def create_name(format)
    return nil unless format[:enabled]
    sprite = Sprite_BattlerName.new(@battler, format, @viewport)
    move(sprite, format)
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● 数字の作成
  #--------------------------------------------------------------------------  
  def create_number(num, max, format)
    return nil unless format[:enabled]
    sprite = Sprite_Number.new(num, max, format, @viewport)
    move(sprite, format)
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● ゲージの作成
  #--------------------------------------------------------------------------  
  def create_gauge(rate, format)
    return nil unless format[:enabled]
    case format[:type]
    when 0 # 横ゲージ
      sprite = Sprite_HorzGauge.new(rate, format, @viewport)
    when 1 # セルゲージ
      sprite = Sprite_CellGauge.new(rate, format, @viewport)
    end
    move(sprite, format)
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● ステートアイコンの作成
  #--------------------------------------------------------------------------  
  def create_state_icon(format)
    return nil unless format[:enabled]
    sprite = Sprite_StateIcon.new(@battler, @status_window, format, @viewport)
    move(sprite, format)
    return sprite
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    # ゲージ
    @hp_gauge_sprite.set(@battler.hp_rate) if @hp_gauge_sprite
    @mp_gauge_sprite.set(@battler.mp_rate) if @mp_gauge_sprite
    @tp_gauge_sprite.set(@battler.tp_rate) if @tp_gauge_sprite
    # 数字
    @hp_number_sprite.set(@battler.hp, @battler.mhp) if @hp_number_sprite
    @mp_number_sprite.set(@battler.mp, @battler.mmp) if @mp_number_sprite
    @tp_number_sprite.set(@battler.tp, @battler.max_tp) if @tp_number_sprite
    # 数字(最大値)
    @mhp_number_sprite.set(@battler.mhp, @battler.mhp) if @mhp_number_sprite
    @mmp_number_sprite.set(@battler.mmp, @battler.mmp) if @mmp_number_sprite
    mtp = @battler.max_tp
    @mtp_number_sprite.set(mtp, mtp) if @mtp_number_sprite
    # ステート
    @state_icon.refresh if @state_icon
    @state_skin_sprite.visible = @state_icon.visible if @state_skin_sprite
    # 名前
    if @name_sprite
      @name_sprite.refresh
      if @state_icon && NAME[:auto_hide]
        @name_sprite.visible = !@state_icon.visible
      end
    end
  end
end

module LNX11
  # X 座標の自動調整を行う
  STATUS_AUTOADJUST = true
end

#==============================================================================
# ■ [追加]:Sprite_BattleStatus
#------------------------------------------------------------------------------
#  バトルステータスのスプライト群のスーパークラス。
#==============================================================================

class Sprite_BattleStatus < Sprite
  #--------------------------------------------------------------------------
  # ● 移動
  #--------------------------------------------------------------------------
  def move(x, y, z)
    self.x = x
    self.y = y
    self.z = z
  end
end

#==============================================================================
# ■ [追加]:Sprite_Skin
#------------------------------------------------------------------------------
#  バトルステータス:スキンのスプライト。
#==============================================================================

class Sprite_Skin < Sprite_BattleStatus
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(format, viewport = nil)
    super(viewport)
    self.bitmap = Cache.system(format[:bitmap])
  end
end

#==============================================================================
# ■ [追加]:Sprite_BattlerName
#------------------------------------------------------------------------------
#  バトルステータス:名前を表示するスプライト。
#==============================================================================

class Sprite_BattlerName < Sprite_BattleStatus
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(battler, format, viewport = nil)
    super(viewport)
    @battler = battler
    @format = format
    @name = ""
    refresh
  end
  #--------------------------------------------------------------------------
  # ● ビットマップの解放
  #--------------------------------------------------------------------------  
  def bitmap_dispose
    self.bitmap.dispose if self.bitmap && !self.bitmap.disposed?
    self.bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------  
  def refresh
    return if @name == @battler.name
    @name = @battler.name
    bitmap_dispose
    if @format[:bitmap_name]
      self.bitmap = Cache.system("name_#{@name}")
    else
      self.bitmap = Bitmap.new(@format[:width], @format[:height])
      self.bitmap.font.name = @format[:name]
      self.bitmap.font.size = @format[:size]
      self.bitmap.font.bold = @format[:bold]
      self.bitmap.font.italic = @format[:italic]
      self.bitmap.font.color = @format[:color][0]
      self.bitmap.font.out_color = @format[:color][1]  
      self.bitmap.draw_text(self.bitmap.rect, @name, @format[:align])
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_HorzGauge
#------------------------------------------------------------------------------
#  バトルステータス:横方向のゲージ。
#==============================================================================

class Sprite_HorzGauge < Sprite_BattleStatus
  NUMBERS    = [0,1,2,3,4,5,6,7,8,9]
  COLOR_SIZE = 4
  # 0:通常 1:ピンチ 2:最大 3:サブゲージ
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :number   # 同期する数字スプライト
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(rate, format, viewport)
    super(viewport)
    self.bitmap = Cache.system(format[:bitmap])
    @speed = format[:speed]
    @s_speed = format[:s_speed]
    @crisis = format[:crisis]   
    @sub_gauge = Sprite.new(viewport)
    @sub_gauge.bitmap = self.bitmap
    @number = nil
    color_set_rect(3, @sub_gauge)
    set(rate, true)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    @sub_gauge.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● 移動
  #--------------------------------------------------------------------------
  def move(x, y, z)
    super(x, y, z)
    @sub_gauge.x = x
    @sub_gauge.y = y
    @sub_gauge.z = z - 1
  end
  #--------------------------------------------------------------------------
  # ● ゲージ最大か?
  #--------------------------------------------------------------------------
  def max?
    @gauge_width / max_gauge_widht >= 1.0
  end
  #--------------------------------------------------------------------------
  # ● ゲージが少ない?
  #--------------------------------------------------------------------------  
  def crisis?
    @gauge_width / max_gauge_widht < @crisis
  end
  #--------------------------------------------------------------------------
  # ● 最大ゲージ幅の取得
  #--------------------------------------------------------------------------
  def max_gauge_widht
    self.bitmap.width.to_f
  end
  #--------------------------------------------------------------------------
  # ● ゲージ色変更(Rect)
  #--------------------------------------------------------------------------
  def color_set_rect(color, sprite)
    sprite.src_rect.height = self.bitmap.height / COLOR_SIZE
    sprite.src_rect.y = color * self.bitmap.height / COLOR_SIZE
  end
  #--------------------------------------------------------------------------
  # ● ゲージ色変更
  #--------------------------------------------------------------------------
  def gauge_color_set
    color_set_rect(max? ? 2 : crisis? ? 1 : 0, self)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # メインゲージ幅の更新
    if @real_gauge_width != @gauge_width
      if @number
        # 数字スプライトと同期
        rate = @number.real_rate
        width = ([max_gauge_widht * rate, rate != 0 ? 1 : 0].max).to_i
        @real_gauge_width = width
      else
        @real_gauge_width = sma(@gauge_width, @real_gauge_width, @speed)
      end
      # ゲージ色変更
      gauge_color_set
    end
    # サブゲージ幅の更新
    if @sub_gauge_width > @gauge_width
      @sub_gauge_width = [@sub_gauge_width - @s_speed, @gauge_width].max
    elsif @sub_gauge_width != @gauge_width
      @sub_gauge_width = @real_gauge_width
    end
    # スプライトの更新
    update_sprite
  end
  #--------------------------------------------------------------------------
  # ● スプライトの更新
  #--------------------------------------------------------------------------
  def update_sprite
    self.src_rect.width = @real_gauge_width
    @sub_gauge.x = self.x + @real_gauge_width
    @sub_gauge.src_rect.x = @real_gauge_width
    @sub_gauge.src_rect.width = @sub_gauge_width - @real_gauge_width
  end
  #--------------------------------------------------------------------------
  # ● ゲージレートの設定
  #--------------------------------------------------------------------------  
  def set(rate, apply = false)
    @gauge_rate = rate
    @gauge_width = ([max_gauge_widht * rate, rate != 0 ? 1 : 0].max).to_i
    # すぐに適用
    if apply
      @real_gauge_width = @gauge_width
      @sub_gauge_width = @gauge_width
      # ゲージ色変更
      gauge_color_set
      # スプライトの更新
      update_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● 移動平均
  #--------------------------------------------------------------------------
  def sma(a, b, p)
    # a = 目標位置 b = 現在地
    return a if a == b || (a - b).abs < 0.3 || p == 1
    result = ((a + b * (p.to_f - 1)) / p.to_f)
    return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result
  end
end

#==============================================================================
# ■ [追加]:Sprite_CellGauge
#------------------------------------------------------------------------------
#  バトルステータス:値に応じたセルを参照して表示する擬似ゲージ。
#==============================================================================

class Sprite_CellGauge < Sprite_BattleStatus
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :number   # 同期する数字スプライト  
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(rate, format, viewport)
    super(viewport)
    self.bitmap = Cache.system(format[:bitmap])
    @speed = format[:speed]
    @pattern = format[:pattern]
    @pattern_direction = format[:direction]
    @cell_width = format[:width]
    @cell_height = format[:height]
    # パターン
    @horz_size = self.bitmap.width / @cell_width
    @vtcl_size = self.bitmap.height / @cell_height
    @number = nil
    set(rate, true)
  end
  #--------------------------------------------------------------------------
  # ● パターン数の取得
  #--------------------------------------------------------------------------
  def pattern
    @pattern == :auto ? @horz_size * @vtcl_size - 1 : @pattern - 1
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # メインゲージ幅の更新
    if @real_rate.truncate != @rate.truncate
      if number
        # 数字スプライトと同期
        @real_rate = @number.real_rate * 100
      else
        @real_rate = sma(@rate, @real_rate, @speed)
      end
      # スプライトの更新
      update_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● スプライトの更新
  #--------------------------------------------------------------------------
  def update_sprite
    pt = (pattern * @real_rate / 100).truncate
    if @pattern_direction == 0
      # 横方向にパターンが並んでいる
      cx = pt % @horz_size * @cell_width
      cy = pt / @horz_size * @cell_height
    else
      # 縦方向にパターンが並んでいる
      cx = pt / @vtcl_size * @cell_width
      cy = pt % @vtcl_size * @cell_height
    end
    self.src_rect.set(cx, cy, @cell_width, @cell_height)
  end
  #--------------------------------------------------------------------------
  # ● ゲージレートの設定
  #--------------------------------------------------------------------------  
  def set(rate, apply = false)
    @rate = rate * 100
    # すぐに適用
    if apply
      @real_rate = @rate
      # スプライトの更新
      update_sprite
    end
  end
  #--------------------------------------------------------------------------
  # ● 移動平均
  #--------------------------------------------------------------------------
  def sma(a, b, p)
    # a = 目標位置 b = 現在地
    return a if a == b || (a - b).abs < 0.3 || p == 1
    result = ((a + b * (p.to_f - 1)) / p.to_f)
    return (a - result).abs <= 1.0 ? (b < a ? b + 0.3 : b - 0.3) : result
  end
end

#==============================================================================
# ■ [追加]:Sprite_Number
#------------------------------------------------------------------------------
#  バトルステータス:数字を表示するスプライト。
#==============================================================================

class Sprite_Number < Sprite_BattleStatus
  COLOR_SIZE = 3
  # 0:通常
  # 1:1/4(ピンチ)
  # 2:死亡
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(num, max, format, viewport = nil)
    super(viewport)
    @src_bitmap = Cache.system(format[:bitmap])
    @speed = format[:speed]
    @align  = format[:align]
    @spacing = format[:spacing]
    @crisis = format[:crisis]
    @dead = format[:dead]
    digit = format[:digit]
    # 数字幅
    @num_width = @src_bitmap.width / 10
    # 数字高さ
    @num_height = @src_bitmap.height / COLOR_SIZE
    bw = @num_width * digit + @spacing * (digit - 1)   
    self.bitmap = Bitmap.new(bw, @num_height)
    # 文字揃えによる基準座標の変更
    case @align
    when 0 ; self.ox = 0
    when 1 ; self.ox = self.width / 2
    when 2 ; self.ox = self.width
    end
    # 初期値適用
    set(num, max, true)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    self.bitmap.dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● レートの取得
  #--------------------------------------------------------------------------
  def rate
    @num / @max.to_f
  end
  #--------------------------------------------------------------------------
  # ● 表示レートの取得
  #--------------------------------------------------------------------------
  def real_rate
    @real_num / @max.to_f
  end
  #--------------------------------------------------------------------------
  # ● 数値が少ない?
  #--------------------------------------------------------------------------  
  def crisis?
    rate < @crisis
  end
  #--------------------------------------------------------------------------
  # ● 数値が 0 か?
  #--------------------------------------------------------------------------  
  def dead?
    rate <= @dead
  end
  #--------------------------------------------------------------------------
  # ● 数字色取得
  #--------------------------------------------------------------------------
  def number_color
    dead? ? 2 : crisis? ? 1 : 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # 数値の更新
    if @real_num != @num
      ac = [1, ((@real_num - @num).abs / @speed).truncate].max
      if @real_num > @num
        @real_num = [@real_num - ac, @num].max
      else
        @real_num = [@real_num + ac, @num].min
      end
      # ビットマップの更新
      update_bitmap
    end
  end
  #--------------------------------------------------------------------------
  # ● 数値の設定
  #--------------------------------------------------------------------------  
  def set(num, max, apply = false)
    @num = num
    @max = max
    # すぐに適用
    if apply
      @real_num = @num
      # ビットマップの更新
      update_bitmap
    end
  end
  #--------------------------------------------------------------------------
  # ● ビットマップの更新
  #--------------------------------------------------------------------------
  def update_bitmap
    self.bitmap.clear
    # 数値を文字列の配列にする
    numbers = (@real_num.to_i.abs.to_s).split(//)
    # 数字の色
    sy = @num_height * number_color
    # ダメージ値の幅
    nw = @num_width * numbers.size + @spacing * (numbers.size - 1)
    # 描画 X 座標
    case @align
    when 0 ; bx = 0                            # 左揃え
    when 1 ; bx = (self.bitmap.width - nw) / 2 # 中央揃え
    when 2 ; bx = self.bitmap.width - nw       # 右揃え
    end
    # 数字を描画
    rect = Rect.new(0, sy, @num_width, @num_height)
    numbers.size.times do |n|
      rect.x = numbers[n].to_i * @num_width
      self.bitmap.blt(bx + @num_width * n + @spacing * n, 0, @src_bitmap, rect)
    end
  end
end

#==============================================================================
# ■ [追加]:Sprite_StateIcon
#------------------------------------------------------------------------------
#  バトルステータス:ステートアイコンをスクロール表示するスプライト。
#==============================================================================

class Sprite_StateIcon < Sprite_BattleStatus
  #--------------------------------------------------------------------------
  # ● [追加]:公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :min_offset   # ステータス描画 X 座標の位置修正
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------  
  def initialize(battler, bufwindow, format, viewport = nil)
    super(viewport)
    @battler = battler
    @bufwindow = bufwindow
    @size = format[:size]
    @background_color = format[:background_color]
    @scroll_interval = format[:scroll_interval]
    @icons = [-128]
    self.visible = false
    # リフレッシュ
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------  
  def dispose
    bitmap_dispose
    super
  end
  #--------------------------------------------------------------------------
  # ● ビットマップの解放
  #--------------------------------------------------------------------------  
  def bitmap_dispose
    self.visible = false
    self.bitmap.dispose if self.bitmap && !self.bitmap.disposed?
    self.bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● ステートアイコン配列の取得
  #--------------------------------------------------------------------------
  def icons
    @battler.state_icons + @battler.buff_icons
  end
  #--------------------------------------------------------------------------
  # ● ステートアイコン数の取得
  #--------------------------------------------------------------------------
  def icons_size
    @bufwindow.states(@battler, @bufwindow.contents_width)
  end
  #--------------------------------------------------------------------------
  # ● スクロールのリセット
  #--------------------------------------------------------------------------
  def reset_scroll
    self.src_rect.x = 0
  end
  #--------------------------------------------------------------------------
  # ● スクロールを進める
  #--------------------------------------------------------------------------
  def update_scroll
    self.src_rect.x += self.src_rect.width
    reset_scroll if self.src_rect.x >= self.bitmap.width
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_scroll if self.bitmap && Graphics.frame_count % @scroll_interval == 0
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------  
  def refresh
    i = icons
    return if @icons == i
    @icons = i
    i_size = icons_size
    # ビットマップの作成
    bitmap_dispose if self.bitmap && !self.bitmap.disposed?
    return if i_size == 0
    self.visible = true
    self.bitmap = Bitmap.new(i_size * 24, 24)
    self.src_rect.set(0, 0, @size * 24, 24)
    # バッファウィンドウにアイコンの描画
    @bufwindow.contents.clear
    @bufwindow.draw_actor_icons(@battler, 0, 0, @bufwindow.contents_width)
    # 描画したアイコンをビットマップに転送
    self.bitmap.fill_rect(self.bitmap.rect, @background_color)
    self.bitmap.blt(0, 0, @bufwindow.contents, self.bitmap.rect)
    @bufwindow.contents.clear
    reset_scroll
  end
end[/pre]

四、
[pre lang="ruby" line="1"]#==============================================================================
# ★ RGSS3-Extension
# LNX11bskin_リフォーム・バトルステータス#スキン設定
#  ☆「スタンダード」プリセット
#
#  このスクリプトは LNX11b_リフォーム・バトルステータス の設定スクリプトです。
#  LNX11b の動作に必須ですので、必ず導入してください。
#  スキンファイルは Graphics/System にインポートしてください。
#   
#  version   : 1.00 (12/02/28)
#  author    : ももまる
#  reference : http://peachround.blog.fc2.com/blog-entry-12.html
#
#==============================================================================

module LNX11
  #--------------------------------------------------------------------------
  # ● 基本設定
  #--------------------------------------------------------------------------
  # ステータス全体の座標調整  :x = X座標 / :y = Y座標
  STATUS_OFFSET = {:x => 60, :y => 0}
  
  # アクター1人あたりのステータス幅
  STATUS_WIDTH  = 64
end
module LNX11b
  #--------------------------------------------------------------------------
  # ● メインスキン
  #--------------------------------------------------------------------------
  MAIN_SKIN = {
  :enabled => true,                # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_mainskin",   # スキンのファイル名
  :x_fixed => false,   # X 座標を自動調整しない   true = 有効 / false = 無効
  :x =>  2, :y => 44, :z =>  0,    # XYZ 座標
  }
  #--------------------------------------------------------------------------
  # ● ステートスキン
  #--------------------------------------------------------------------------
  STATE_SKIN = {
  :enabled => true,                # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_stateskin",  # スキンのファイル名
  :x_fixed => true,      # X 座標を自動調整しない true = 有効 / false = 無効
  :x => -80, :y => -18, :z => 2,   # XYZ 座標
  }
  #--------------------------------------------------------------------------
  # ● ステートアイコン
  #--------------------------------------------------------------------------
  STATE_ICON = {
  # ○ 基本
  :enabled => true,    # 表示するか?           true = 表示 / false = 非表示
  :x_fixed => true,    # X 座標を自動調整しない true = 有効 / false = 無効
  :x => -76, :y => -8, :z => 1,    # XYZ 座標
  # ○ 機能
  :size             => 2,          # 一度に表示するアイコン数
  :scroll_interval  => 30,         # スクロール速度(フレーム)
  :background_color => Color.new(0, 0, 0, 0),  # ステートアイコンの背景色
  }
  #--------------------------------------------------------------------------
  # ● 名前
  #--------------------------------------------------------------------------
  NAME = {
  # ○ 基本
  :enabled => false,  # 表示するか?           true = 表示 / false = 非表示
  :x_fixed => true,   # X 座標を自動調整しない true = 有効 / false = 無効
  :x => -76, :y => -8, :z => 2,     # XYZ 座標
  # ○ 機能
  :bitmap_name => false, # 名前表示に画像を使用する true = 有効 / false = 無効
  
    # bitmap_name => false :  名前表示に画像を使用しない場合
    :width  => 96, :height => 20, # 名前のサイズ :width = 幅 / :height = 高さ
    :name   => ["VL Gothic"], # フォント名
    :size   => 16,            # フォントサイズ
    :bold   => false,         # 太字    true = 有効 / false = 無効
    :italic => false,         # 斜体    true = 有効 / false = 無効
    :align  => 0,             # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
    # 描画色([文字色, 縁取り色])
    :color  => [Color.new(255, 255, 255), Color.new(0, 0, 0, 192)],
   
  # ステートが表示されている時、自動的に隠す true = 有効 / false = 無効
  :auto_hide   => true
  }
  #--------------------------------------------------------------------------
  # ● HP ゲージ
  #--------------------------------------------------------------------------
  HP_GAUGE_FORMAT = {
  # ○ 基本
  :enabled => true,              # 表示するか?   true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_hpgauge",  # ゲージのファイル名
  :x_fixed => false,     # X 座標を自動調整しない true = 有効 / false = 無効
  :x => 6, :y => 55, :z => 2,    # XYZ 座標
  # ○ 機能
  :number_link => true,  # ゲージ量を表示されている表示と一致させる
  :speed      => 4.0,   # ゲージ変化スピード 1.0以上(一致させない場合)
  :type        => 0,     # ゲージタイプ 0 = 横ゲージ / 1 = セルゲージ
  
    # type => 0 : 横ゲージの設定
    :crisis    => 0.25,  # ピンチ状態とみなすパーセンテージ
    :s_speed   => 0.2,   # サブゲージ変化スピード(pixel per frame)
   
    # type => 1 : セルゲージの設定
    :width => 36, :height => 36, # セルのサイズ :width = 幅 / :height = 高さ
    :pattern   => :auto, # パターン数 :auto を指定するとパターン数を自動判定
    :direction => 1,     # パターンの方向 0 = 横 / 1 = 縦
  }
  #--------------------------------------------------------------------------
  # ● MP ゲージ
  #--------------------------------------------------------------------------
  MP_GAUGE_FORMAT = {
  # ○ 基本
  :enabled => true,             # 表示するか?     true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_mpgauge", # ゲージのファイル名
  :x_fixed => false,      # X 座標を自動調整しない true = 有効 / false = 無効
  :x => 6, :y => 77, :z => 2,   # XYZ 座標
  # ○ 機能
  :number_link => true,   # ゲージ量を表示されている表示と一致させる
  :speed      => 4.0,    # ゲージ変化スピード 1.0以上(一致させない場合)  
  :type        => 0,      # ゲージタイプ 0 = 横ゲージ / 1 = セルゲージ
  
    # type => 0 : 横ゲージの設定
    :crisis    => 0.25,   # ピンチ状態とみなすパーセンテージ
    :s_speed   => 0.2,    # サブゲージ変化スピード(pixel per frame)  
   
    # type => 1 : セルゲージの設定
    :width     => 36, :height => 36, # セルのサイズ :width = 幅 / :height = 高さ
    :pattern   => :auto,  # パターン数 :auto を指定するとパターン数を自動判定
    :direction => 1,      # パターンの方向 0 = 横 / 1 = 縦
  }
  #--------------------------------------------------------------------------
  # ● TP ゲージ
  #--------------------------------------------------------------------------
  TP_GAUGE_FORMAT = {
  # ○ 基本
  :enabled => true,              # 表示するか?   true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_tpcircle", # ゲージのファイル名
  :x_fixed => false,     # X 座標を自動調整しない true = 有効 / false = 無効
  :x => 16, :y => 0, :z => 3,    # XYZ 座標
  # ○ 機能
  :number_link => true,  # ゲージ量を表示されている表示と一致させる
  :speed      => 4.0,   # ゲージ変化スピード 1.0以上(一致させない場合)  
  :type        => 1,     # ゲージタイプ 0 = 横ゲージ / 1 = セルゲージ
  
    # type => 0 : 横ゲージの設定
    :crisis    => 0.25,  # ピンチ状態とみなすパーセンテージ
    :s_speed   => 0.2,   # サブゲージ変化スピード(pixel per frame)
   
    # type => 1 : セルゲージの設定
    :width     => 36, :height => 36, # セルのサイズ :width = 幅 / :height = 高さ
    :pattern   => :auto, # パターン数 :auto を指定するとパターン数を自動判定
    :direction => 1,     # パターンの方向 0 = 横 / 1 = 縦
  }
  #--------------------------------------------------------------------------
  # ● HP 数字
  #--------------------------------------------------------------------------
  HP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => true,                 # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_largenumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 64, :y => 39, :z => 4,      # XYZ 座標
  # ○ 機能
  :digit   => 4,       # 桁数
  :spacing => -2,      # 字間
  :align   => 2,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => 0.25,    # ピンチ状態とみなすパーセンテージ
  :dead    => 0.0,     # 死亡状態とみなすパーセンテージ
  }
  #--------------------------------------------------------------------------
  # ● MP 数字
  #--------------------------------------------------------------------------
  MP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => true,                 # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_largenumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 64, :y => 61, :z => 4,      # XYZ 座標
  # ○ 機能
  :digit   => 4,       # 桁数
  :spacing => -2,      # 字間
  :align   => 2,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => 0.25,    # ピンチ状態とみなすパーセンテージ
  :dead    => -1.0,    # 死亡状態とみなすパーセンテージ
  }
  #--------------------------------------------------------------------------
  # ● TP 数字
  #--------------------------------------------------------------------------
  TP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => true,                 # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_smallnumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 34, :y => 14, :z => 5,      # XYZ 座標
  # ○ 機能
  :digit   => 3,       # 桁数
  :spacing => -2,      # 字間
  :align   => 1,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => -1.0,    # ピンチ状態とみなすパーセンテージ
  :dead    => -1.0,    # 死亡状態とみなすパーセンテージ
  }
  #--------------------------------------------------------------------------
  # ● 最大 HP 数字
  #--------------------------------------------------------------------------
  MAXHP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => false,                # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_smallnumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 64, :y => 39, :z => 6,      # XYZ 座標
  # ○ 機能
  :digit   => 4,       # 桁数
  :spacing => -2,      # 字間
  :align   => 0,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => 0.25,    # ピンチ状態とみなすパーセンテージ
  :dead    => 0.0,     # 死亡状態とみなすパーセンテージ
  }  
  #--------------------------------------------------------------------------
  # ● 最大 MP 数字
  #--------------------------------------------------------------------------
  MAXMP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => false,                # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_smallnumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 64, :y => 61, :z => 6,      # XYZ 座標
  # ○ 機能
  :digit   => 4,       # 桁数
  :spacing => -2,      # 字間
  :align   => 0,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => 0.25,    # ピンチ状態とみなすパーセンテージ
  :dead    => -1.0,    # 死亡状態とみなすパーセンテージ
  }  
  #--------------------------------------------------------------------------
  # ● 最大 TP 数字
  #--------------------------------------------------------------------------
  MAXTP_NUMBER_FORMAT = {
  # ○ 基本
  :enabled => false,                # 表示するか? true = 表示 / false = 非表示
  :bitmap  => "Lnx11b_smallnumber", # 数字のファイル名
  :x_fixed => false,   # X 座標を自動調整しない    true = 有効 / false = 無効
  :x => 34, :y => 26, :z => 6,      # XYZ 座標
  # ○ 機能
  :digit   => 3,       # 桁数
  :spacing => -2,      # 字間
  :align   => 1,       # 文字揃え 0 = 左揃え / 1 = 中央揃え / 2 = 右揃え
  :speed   => 12,      # 数字の変化スピード 1 以上
  :crisis  => -1.0,    # ピンチ状態とみなすパーセンテージ
  :dead    => -1.0,    # 死亡状態とみなすパーセンテージ
  }
  #
  # 設定ここまで お疲れ様でした。
  #
end
#==============================================================================
# ■ LNXスクリプト導入情報
#==============================================================================
$lnx_include = {} if $lnx_include == nil
$lnx_include[:lnx11bskin] = 100 # version
p "OK:LNX11bskin_リフォーム・バトルステータス#スキン設定"
[/pre]

大功告成!


樓主如果要增加浮動狀態圖標的話 popup_poison_add_large.png

以中毒為範例,在備註加上文字,如圖:
備註設定.jpg
付加ポップアップ表示名="_poison_add"
解除ポップアップ表示名="_poison_remove"
修飾文字非表示

表示名的後面要寫的文字為圖檔名稱的
請參考:
添加的文字.jpg

效果圖:
浮動圖標.jpg

点评

我已經提供了的說.............................  发表于 2013-8-18 01:12
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部