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

Project1

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

[已经解决] 请求将这段代码的参数更动一下。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
114
在线时间
411 小时
注册时间
2020-1-11
帖子
253
跳转到指定楼层
1
发表于 2021-6-23 22:02:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
300星屑
本帖最后由 alianlord 于 2021-6-23 22:02 编辑

RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● [追加]:バトル画面 X 座標の設定
  3.   #  ここで設定した座標は Game_Actor や ステータス表示等で利用されます。
  4.   #--------------------------------------------------------------------------
  5.   def set_screen_x
  6.     @members_screen_x = []
  7.     @members_screen_x_nooffset = []
  8.     padding = LNX11::ACTOR_PADDING[:side]
  9.     if LNX11::ACTOR_CENTERING
  10.       # アクターのセンタリングが有効
  11.       a_spacing = LNX11::ACTOR_SPACING_ADJUST
  12.       padding += (max_battle_members - battle_members.size) * a_spacing
  13.       width = (Graphics.width - padding * 2) / battle_members.size
  14.     else
  15.       # アクターのセンタリングが無効
  16.       width = (Graphics.width - padding * 2) / max_battle_members
  17.     end
  18.     battle_members.each_with_index do |actor, i|
  19.       offset = LNX11::ACTOR_OFFSET[:x]
  20.       @members_screen_x_nooffset[i] = width * i + width / 2 + padding
  21.       @members_screen_x[i] = @members_screen_x_nooffset[i] + offset
  22.       actor.screen_x = @members_screen_x[i]
  23.     end
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● [追加]:バトル画面 Y 座標の設定
  27.   #  ここで設定した座標は Game_Actor や ステータス表示等で利用されます。
  28.   #--------------------------------------------------------------------------
  29.   def set_screen_y
  30.     offset = LNX11::ACTOR_OFFSET[:y]
  31.     ay = Graphics.height - LNX11::ACTOR_PADDING[:bottom] + offset
  32.     @members_screen_y = Array.new(max_battle_members) {ay}
  33.     battle_members.each {|actor| actor.screen_y = ay}
  34.   end


这是某个脚本中,在战斗场景下,有关我方X、Y座标的指定。原先的脚本布局是横一列。每个角色的X座标是自动随占宽生成的。
我想改动成------前三人后三人,一共六人的队形。这脚本的结构比较紧骤,使得我想直接填入各个角色的数字座标也不知如何下手。
请求各位高手,不管各种手段。高明的编码还是简单粗暴的直接填写,请给我一个可以解决问题的手段吧。

最佳答案

查看完整内容

直接参看 set_screen_x 最后那部分 i 就对应第 X 个参战角色,所以简单粗暴的改法就是这样

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20965
在线时间
9334 小时
注册时间
2012-6-19
帖子
7106

开拓者短篇九导演组冠军

2
发表于 2021-6-23 22:02:55 | 只看该作者
直接参看 set_screen_x 最后那部分

  1. battle_members.each_with_index do |actor, i|
  2.       offset = LNX11::ACTOR_OFFSET[:x]
  3.       @members_screen_x_nooffset[i] = width * i + width / 2 + padding
  4.       @members_screen_x[i] = @members_screen_x_nooffset[i] + offset
  5.       actor.screen_x = @members_screen_x[i]
  6. end
复制代码


i 就对应第 X 个参战角色,所以简单粗暴的改法就是这样

  1. battle_members.each_with_index do |actor, i|
  2.   if i == 0
  3.     @members_screen_x_nooffset[i] = 1
  4.     @members_screen_x[i] = 1
  5.     actor.screen_x = 1
  6.   elsif i == 1
  7.     @members_screen_x_nooffset[i] = 2
  8.     @members_screen_x[i] = 2
  9.     actor.screen_x = 2
  10.   elsif i == 2
  11.     @members_screen_x_nooffset[i] = 3
  12.     @members_screen_x[i] = 3
  13.     actor.screen_x = 3
  14.   elsif i == 3
  15.     @members_screen_x_nooffset[i] = 4
  16.     @members_screen_x[i] = 4
  17.     actor.screen_x = 4
  18.   elsif i == 4
  19.     @members_screen_x_nooffset[i] = 5
  20.     @members_screen_x[i] = 5
  21.     actor.screen_x = 5
  22.   elsif i == 5
  23.     @members_screen_x_nooffset[i] = 6
  24.     @members_screen_x[i] = 6
  25.     actor.screen_x = 6
  26.   end
  27. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
411 小时
注册时间
2020-1-11
帖子
253
3
 楼主| 发表于 2021-7-6 22:34:49 | 只看该作者
RUBY 代码复制
  1. #==============================================================================
  2. # ■ 世界樹的迷宮風戦闘画面
  3. #   @version 1.14 10/03/18
  4. #   @author さば缶
  5. #------------------------------------------------------------------------------
  6. #  世界树迷宫风的战斗画面显示的脚本。
  7. #   ■注意
  8. #     这个脚本本体以外还需要有以下的图像文件。
  9. #     ・Graphics/System/ActiveWindow.png
  10. #     ・Graphics/System/Cursor.png
  11. #     ・Graphics/System/Miss.png
  12. #     ・Graphics/Pictures/Actor<<角色的ID>>.png
  13. #     <<角色的ID>> は、1以上的整数。数据库的角色欄的ID请放入。
  14. #     ・Graphics/System/Force.png(气力有效的场合)
  15. #     複数角色使用的場合、请放入複数的画像。
  16. #     初期状態、角色的画像尺寸是 横150 縦230。
  17. #     
  18. #   ■战斗时的面部画像动态的变更、事件的脚本以下记述。
  19. #     change_face(<<角色的ID>>, <<顔的ID>>)
  20. #     <<顔的ID>>10和设定、Actor10.png 被使用。
  21. #   ■KGC Software様的「气力运行脚本」进入的话、气力的量规可被表示。
  22. #   ■KGC Software様的「個別戦闘指令」也对应着。
  23. #     作为扩张、「逃跑」被追加。。
  24. #     ** 対応表 **
  25. #     0..攻撃  1..技能  2..防御  3..物品  4..固有指令  10..逃跑
  26. #   ■ストレイキャット様的STR11d_XP風战斗#伤害弹出同时使用。
  27. #    併用的場合、HIDE_DEFAULT_POPUP_DAMAGE 为 true 请
  28. #   ■ストレイキャット様的STR06_快速战斗 v1.1と併用。
  29. #    併用場合、请下这脚本。
  30. #   ■3D迷宫的脚本和并用的场合、
  31. #     请配置这3D迷宫的脚本。。
  32. #==============================================================================
  33. module Saba
  34.   module Sekaiju
  35.  
  36.     # 窗口尺寸变更的场合,在此设定。
  37.     WINDOW_WIDTH = 544
  38.     WINDOW_HEIGHT = 416
  39.  
  40.     # 文本颜色及hp条彩色 系统彩色的场合、设定true。
  41.     USE_SYSTEM_COLOR = false
  42.  
  43.     # L 键 自动战斗实行的话、设定true。
  44.     AUTO_BATTLE_ENABLED = false
  45.  
  46.     # ストレイキャット様的信息窗口EXT + +同时使用的场合、请设定false。
  47.     # 除此以外  推荐设定为true。
  48.     AUTO_RESIZE_MESSAGE_WINDOW_ENABLED = true
  49.  
  50.     # 前排,后排系统有效的场合 设定为true。
  51.     #   有效的,如果不以下一般显示,前排后排的补正完全没有。
  52.     # ・队友ー人数が 1-2  →全員前列
  53.     # ・队友ー人数が 3  →前列2、後列1
  54.     # ・队友ー人数が 4  →前列2、後列2
  55.     # ・队友ー人数が 5  →前列3、後列2
  56.     # ・队友ー人数が 6  →前列3、後列3
  57.     #
  58.     # 有效的场合,以下的系统适用。。
  59.     # ・前排,后排中被盯上率就会改变
  60.     # ・后排的通常攻击,默认补正
  61.     # ・后排的技能,默认补正用不了
  62.     FORMATION_ENABLED = true
  63.  
  64.     # 前排谁都不在状态如果确认、设定为true。
  65.     ALLOW_EMPTY_FRONTS = false
  66.  
  67.     # 从敌人的攻击对后排的场合,受创点来的值被加上了。
  68.     BACK_ATTACK_DAMAGE_PENALTY_ENEMY = 0.3
  69.  
  70.     # 我方的后排的攻击的场合,受创点来的值被加上了。
  71.     BACK_ATTACK_DAMAGE_PENALTY = 0.1
  72.  
  73.     # 后排的攻击时受惩罚的武器点击,显示标志。。
  74.     # 这文字列为武器的笔记栏里适用。。
  75.     # ※技能记录栏里写入什么也不会发生
  76.     LONG_RANGE_WEAPON_MARKER = "LONG_RANGE"
  77.  
  78.     # 后排的技能使用时,表示受惩罚技能 显示标记。。
  79.     # 这文字列技能笔记栏里适用。。
  80.     # ※武器的笔记栏里写入什么也不会发生
  81.     SHORT_RANGE_SKILL_MARKER = "SHORT_RANGE"
  82.  
  83.     # 前排的角色 袭击率 的值。。
  84.     # 1以上的整数请设定。
  85.     FRONT_TARGET_ODDS = 5
  86.  
  87.     # 后排的角色袭击率 的值。。
  88.     # 1以上的整数请设定。
  89.     BACK_TARGET_ODDS = 1
  90.  
  91.     # 职业的位置设定前卫的场合、TARGET_ODDS 追加值。
  92.     # 请设定为整数。
  93.     TARGET_ODDS_PLUS_AT_CLASS_POSITION_FORWARD = 0
  94.  
  95.     # 职业的位置设定中卫的场合、TARGET_ODDS追加值。
  96.     # 请设定为整数。
  97.     TARGET_ODDS_PLUS_AT_CLASS_POSITION_HALFBACK = 0
  98.  
  99.     # 职业的位置设定后卫的场合、TARGET_ODDS追加值。
  100.     # 请设定为整数。
  101.     TARGET_ODDS_PLUS_AT_CLASS_POSITION_BACK = 0
  102.  
  103.     # 角色指令選択時的信息。
  104.     COMMAND_MESSAGE = "COMMAND ?  ( X: AUTO  R: EQUIP )"
  105.  
  106.  
  107.     # 全员逃走的容易,所以能逃跑的几率比较大。
  108.     ESCAPE_RATIO_PENALTY = 1
  109.  
  110.     # 敌人的敌人登场时名字表示的场合 true 的。但是信息窗口有
  111.     # 只有2行的,三只以后的敌人的名字不被显示。
  112.     SHOW_ENEMY_NAME_WHEN_ENEMY_APPEARS = false
  113.  
  114.     # 敌人单独登场时显示的信息。。
  115.     # SHOW_ENEMY_NAME_WHEN_ENEMY_APPEARS 为 false 的时候被使用。。
  116.     MESSAGE_WHEN_ENEMY_APPEARS = "怪物出現了!"
  117.  
  118.     # 敌人复数登场时显示的信息。。
  119.     # SHOW_ENEMY_NAME_WHEN_ENEMY_APPEARS 为 false 的时候被使用。
  120.     MESSAGE_WHEN_ENEMIES_APPEAR = "怪物成群的出現了!"
  121.  
  122.     # 受创点 值的颜色。
  123.     DAMAGE_COLOR = Color.new(255, 255, 255)
  124.  
  125.     # 回復量 值的颜色。
  126.     RECOVER_COLOR = Color.new(150, 250, 150)
  127.  
  128.     # 受创点 和 回復量的文字的字型尺寸。
  129.     FONT_SIZE = 30
  130.  
  131.     # 受创点动画的表示時間。単位为祯。
  132.     DAMADE_ANIMATIONS_DURATION = 30
  133.  
  134.     # 高扬的小人的颜色。
  135.     BOOST_BORDER_COLOR        = Color.new(0, 0, 0, 150)
  136.  
  137.     # 表示敌人的参数的设定。。
  138.     # 0的場合、看HP的表示。
  139.     # 光标 graphics/system/cursor 被使用。
  140.     #
  141.     # 1的場合、HPとMPを表示します。
  142.     # 光标に raphics/system/cursor_mp.png 被使用。
  143.     #
  144.     # 2的場合、HPとオー条气力量规を表示します。
  145.     # 光标 graphics/system/cursor_od.png 被使用。
  146.     #
  147.     # 3的場合、HPとMPとオー条气力量规を表示します。
  148.     # 光标 graphics/system/cursor_mp_od.png 被使用。
  149.     PARAMETER_TYPE = 1
  150.  
  151.     # MAX MP 为0的敵 対、MP 条描画不做的时候 true 設定。
  152.     NOT_DRAW_MAX_MP_0 = false
  153.  
  154.     # 敵選択图标的背景色です。
  155.     TARGET_BG_COLOR = Color.new(0, 0, 0, 0)
  156.  
  157.     # 敵HP条的背景色。系统色彩使用場合 無視。
  158.     HP_BAR_BG_COLOR      = Color.new(80, 80, 80, 220)
  159.  
  160.     # 敵HP条的边框色。
  161.     HP_BAR_BORDER_COLOR  = Color.new(0, 0, 0, 150)
  162.  
  163.     # 敵HP条的前景色。系统颜色使用场合 无视。
  164.     HP_BAR_FG_COLOR_1    = Color.new(255, 150, 0)
  165.  
  166.     # 敵HP条的前景色。系统颜色使用场合 无视。
  167.     HP_BAR_FG_COLOR_2    = Color.new(255, 250, 0)
  168.  
  169.     # 敵MP条的前景色。系统颜色使用场合 无视。
  170.     MP_BAR_FG_COLOR_1    = Color.new(0, 150, 255)
  171.  
  172.     # 敵MP条的前景色。系统颜色使用场合 无视。
  173.     MP_BAR_FG_COLOR_2    = Color.new(0, 250, 255)
  174.  
  175.     # 敵HP/MP/オー条气力条的边框宽。
  176.     BAR_BORDER_WEIGHT = 1
  177.  
  178.     # 敵HP/MP/オー条气力条的横幅。
  179.     BAR_WIDTH  = 45
  180.  
  181.     # 敵HP条的高。
  182.     HP_BAR_HEIGHT  = 5   
  183.  
  184.     # 敵MP条的高。
  185.     MP_BAR_HEIGHT  = 3
  186.  
  187.     # 敵オー条气力条的高。
  188.     OVERDRIVE_BAR_HEIGHT  = 3
  189.  
  190.     # 敵HP条的 y 座標的微調整。
  191.     HP_BAR_OFFSET_Y = 26
  192.  
  193.     # 敵MP条的 y 座標的微調整。
  194.     MP_BAR_OFFSET_Y = 26
  195.  
  196.     # 敵オー条气力条的 y 座標微調整。
  197.     OVERDRIVE_BAR_OFFSET_Y = 0
  198.  
  199.     # 角色指令菜单 每1 框架移動的距離。必需是可被576整除的数。
  200.     DISTANCE_PER_FRAME = 96
  201.  
  202.      # 目标選択光标的 y 座標。
  203.     TARGET_CURSOR_Y = 90
  204.  
  205.     # 目标的状態图标的敵的 x 座標从的 x 的相対値です。
  206.     TARGET_STATE_OFFSET_X = -30
  207.     # 目标的状態图标的 y 座標。
  208.     TARGET_STATE_Y = 76
  209.     # 目标的状態图标的間隔。
  210.     TARGET_STATE_INTERVAL = 20
  211.  
  212.     # 技能選択窗口的 x 座標。
  213.     SKILL_WINDOW_X = 290
  214.     # 技能選択窗口的 y 座標。
  215.     SKILL_WINDOW_Y = 86
  216.     # 技能選択窗口的宽。
  217.     SKILL_WINDOW_WIDTH = 300
  218.     # 技能選択窗口的高。
  219.     SKILL_WINDOW_HEIGHT = 199
  220.  
  221.     # 物品選択窗口的 x 座標。
  222.     ITEM_WINDOW_X = SKILL_WINDOW_X
  223.     # 物品選択窗口的 x 座標。
  224.     ITEM_WINDOW_Y = SKILL_WINDOW_Y
  225.     # 物品択窗口的横幅。
  226.     ITEM_WINDOW_WIDTH = SKILL_WINDOW_WIDTH
  227.     # 物品選択窗口的高。
  228.     ITEM_WINDOW_HEIGHT = SKILL_WINDOW_HEIGHT
  229.  
  230.     # 脸图像的坐标。。
  231.     FACE_X = 0
  232.     FACE_Y = 288
  233.     # 宽这的幅度被切下。。
  234.     # # 高度性是没有限制。
  235.     FACE_WIDTH = 150
  236.     # 脸图像的Z深度。
  237.     FACE_Z = 200
  238.  
  239.     # 指令選択窗口的 x 座標。
  240.     COMMAND_WINDOW_X = 150
  241.     # 指令選択窗口的 y 座標。
  242.     COMMAND_WINDOW_Y = 122
  243.     # 指令選択窗口的横幅。
  244.     COMMAND_WINDOW_WIDTH = 128
  245.     # 指令的个数。通常设定为5没有问题。、
  246.     # KGC Software 様 的個別戦闘指令使用的場合、
  247.     # COMMAND_WINDOW_Y 和调整。。
  248.     COMMAND_COUNT = 5
  249.  
  250.     # 能力值的窗口的 Z 深度。
  251.     STATUS_WINDOW_Z = 30
  252.  
  253.     # 现在的回合数显示的情况下、设定是true。
  254.     SHOW_TURN_COUNT = false
  255.     # 回合窗口显示的情况下 设定是true。
  256.     SHOW_TURN_WINDOW = false
  257.  
  258.     # 现在的回合数表示设定的场合,果然还是不想显示了
  259.     # 这号码的开关 切 ON 的话;就不显示了。
  260.     HIDE_TURN_COUNT_SWITCH = 120
  261.  
  262.     # 左边的場合设为 0、靠右的場合设为 2 。
  263.     TURN_WINDOW_ALIGN = 0
  264.     TURN_WINDOW_Y = 0
  265.     TURN_WINDOW_WIDTH = 64
  266.     TURN_WINDOW_HEIGHT = 56
  267.  
  268.     # 右边的場合、信息窗口的x的偏移値。
  269.     # 0的话窗口的线重叠。
  270.     MESSAGE_WINDOW_OFFSET_X = 0
  271.  
  272.  
  273.     # 回合数的 x 座標。
  274.     TURN_VALUE_X = 1
  275.     # 回合数的 y 座標。
  276.     TURN_VALUE_Y = 20
  277.     # 回合数的字型尺寸。
  278.     TURN_FONT_SIZE = 25
  279.     # 回合数的色。
  280.     TURN_FONT_COLOR = Color.new(190, 240, 190)
  281.     # 回合数黑体字的場合 设定为true 。
  282.     TURN_FONT_BOLD = true
  283.  
  284.     # 使用的回合图像的名字。
  285.     TURN_IMAGE = "turn"
  286.  
  287.     # 状態画面的模式。
  288.     # 0 無効
  289.     # 1 技能范围领域的表示
  290.     # 2 角色状态的领域中表示
  291.     INFO_TYPE = 2
  292.  
  293.     # 状态画面的上部被表示的文本。。
  294.     # INFO_TYPE 为 1 的时候才有效。。
  295.     INFO_TEXT = "インフォメーション"
  296.  
  297.     # 超级气力槽的文本位置表示微调。
  298.     OVER_DRIVE_VALUE_OFFSET_X = 0
  299.     # 超级气力槽的文本位置表示微调。
  300.     OVER_DRIVE_VALUE_OFFSET_Y = 0   
  301.  
  302.     OVER_DRIVE_X = 0
  303.     OVER_DRIVE_Y = 271
  304.  
  305.     # 在战斗中的角色的图像显示的情况下、设定为true。
  306.     SHOW_ACTOR_IMAGE = false
  307.  
  308.     # 角色能力表窗口的背景画像的文件名。
  309.     # 例) status_bg
  310.     # 通常窗口显示的场合,nil指定。
  311.     ACTOR_STATUS_BG_IMAGE = nil#"status_bg"
  312.  
  313.     # 選択状態的角色能力表窗口的背景画像的文件名。
  314.     # 例) status_active_bg
  315.     # 通常窗口显示的场合,nil指定。
  316.     ACTOR_STATUS_ACTIVE_BG_IMAGE = nil#"status_active_bg"
  317.  
  318.     # 经常6人份的状态窗口显示的情况、设定为true。
  319.     SHOW_EMPTY_ACTOR_STATUS = false
  320.  
  321.     # 角色対応 没有安上能力表 窗口的背景画像。
  322.     # SHOW_EMPTY_ACTOR_STATUS 为 true 的时候才能使用。
  323.     EMPTY_STATUS_BG_IMAGE = "status_empty_bg"
  324.  
  325.     # 角色面对攻击和技能运行时,
  326.     # 动画表示的场合 设定为true。
  327.     DISPLAY_BATTLE_ANIMATION_TO_ACTOR = true
  328.  
  329.     # 对我方位置「画面」有动画的技能使用的場合、
  330.     # 这里Y值方向的中心座标被移动。
  331.     # DISPLAY_BATTLE_ANIMATION_TO_ACTOR 为true 的時候有効。
  332.     DISPLAY_POSITION_ANIMATION_OFFSET_Y = 160
  333.  
  334.     # 预设位置的受创点表示 为 OFF 的場合、
  335.     # 设冗为 true 。
  336.     # ストレイキャット様的XP風战斗的受创点 位置 使用的时候
  337.     # 请使用。
  338.     HIDE_DEFAULT_POPUP_DAMAGE = false
  339.  
  340.     # 勝利時的信息窗口的行数。
  341.     # 2~4
  342.     VICTORY_MESSAGE_LINES = 2
  343.  
  344.     # 行動中的角色的窗口的選択状態
  345.     # 醒目的场合、设定为true 。
  346.     SELECT_ACTIVE_ACTOR = true
  347.  
  348.     # 必要的MP 0的技能,必要MP的表示。。
  349.     NO_COST_SKILL_VIEW = "0"
  350.  
  351.     # 敌人Y坐标配合选择光标的Y坐标调整的场合、
  352.     # 设定为true。
  353.     ADJUST_TARGET_WINDOW_Y = false
  354.  
  355.     # 敌人的位置下有多少、
  356.     # 敌人选择光标的坐标元的坐标比这个以上下降。。
  357.     ENEMY_SELECTION_WINDOW_MAX_Y = 250
  358.  
  359.     # 敌人的位置上,有多少、
  360.     # 敌人选择光标的坐标元的坐标比这个以上没有上升。
  361.     ENEMY_SELECTION_WINDOW_MIN_Y = -30
  362.  
  363. ##### FreeWind 様的回合消費技能的表示用。
  364.     # 经常行动可能前的剩下回合表示的场合 设定为true。
  365.     # false 設定的場合、A 键 表示切换。
  366.     DISPLAY_ALWAYS = false
  367.  
  368.     # 表示的座標。
  369.     NOT_ACT_TURN_Y = 100
  370.     NOT_ACT_TURN_WIDTH = 100
  371.     NOT_ACT_TURN_HEIGHT = 32
  372.     NOT_ACT_TURN_BG_COLOR = Color.new(16, 16, 16, 128)
  373.     NOT_ACT_TURN_NORMAL_FONT_COLOR = Color.new(255, 255, 255)
  374.     NOT_ACT_TURN_READY_FONT_COLOR = Color.new(255, 255, 140)
  375.     NOT_ACT_TURN_FONT_SIZE = 18
  376.     GETTING_READY_TEXT = "READY:"
  377.     READY_TEXT = "READY"
  378.     TIRED_TEXT = "TIRED:"
  379.  
  380.     # 画面待机中的技能名表示的场合、设定为true。
  381.     DRAW_WAITING_SKILL_NAME = false
  382.     # 画面技能名表示场合、最大的字节数。。
  383.     # 全角1文字3字节。
  384.     MAX_SKILL_NAME_LENGTH = 15
  385.     # 字型的尺寸。
  386.     WAITING_SKILL_FONT_SIZE = 16
  387. #######
  388.  
  389.  
  390.  
  391.     def self.show_turn_count?
  392.       return $game_switches[HIDE_TURN_COUNT_SWITCH] != true && Saba::Sekaiju::SHOW_TURN_COUNT
  393.     end
  394.   end
  395.  
  396.   module Checker
  397.  
  398.     def self.define?(item, name)
  399.       return false if item == nil
  400.       item.note.split(/[\r\n]+/).each do |line|
  401.         elements = line.split(/\s+/)
  402.         next unless elements.size == 1
  403.         return true if elements[0] == name
  404.       end
  405.       return false
  406.     end
  407.   end
  408.  
  409. end
  410.  
  411. class FaceSprite
  412.   #--------------------------------------------------------------------------
  413.   # ● 使用的面部画像返回。
  414.   #--------------------------------------------------------------------------
  415.   def face_image(actor)
  416.     # HP很低的时候,其他图片设定的例子
  417.     #if (actor.hp * 100 / actor.maxhp) < 30
  418.     #  return "Actor" + @actor_index.to_s + "_1"
  419.     #end
  420.     return "Actor" + @actor_index.to_s
  421.   end
  422. end
  423.  
  424. $imported = {} if $imported == nil
  425. $imported["SekaijuBattle"] = true
  426.  
  427.  
  428. unless $imported["LargeParty"]
  429.   class Game_Party < Game_Unit
  430.     def battle_members
  431.       return members
  432.     end
  433.   end
  434. end
  435.  
  436.  
  437.  
  438. module ActorStatus
  439.   WLH = Window_Base::WLH
  440.   BASE_Y = Saba::Sekaiju::WINDOW_HEIGHT - 128
  441.   CELL_HEIGHT = 63
  442.   CELL_WIDTH = Saba::Sekaiju::WINDOW_WIDTH / 3
  443.  
  444.   attr_reader :actor
  445.   attr_writer :canvas
  446.   attr_accessor :dummy
  447.  
  448.   def save_parameters
  449.     return if @dummy
  450.     @hp = @actor.hp
  451.     @mp = @actor.mp
  452.   end
  453.   #--------------------------------------------------------------------------
  454.   # ● 状態異常图标的表示的更新。
  455.   #--------------------------------------------------------------------------
  456.   def update_contents
  457.     return if @dummy
  458.     @frame += 1
  459.     if Saba::Sekaiju::DAMADE_ANIMATIONS_DURATION < @frame
  460.       @frame = 0
  461.       next_state
  462.     end
  463.     if @hp != @actor.hp || @mp != @actor.mp
  464.       refresh
  465.       save_parameters
  466.     end
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 绘制更新。。
  470.   #--------------------------------------------------------------------------
  471.   def refresh
  472.     return if @dummy
  473.     if @display_state_mode
  474.       refresh_states
  475.     else
  476.       refresh_normal
  477.     end
  478.   end
  479.  
  480.   def refresh_states
  481.     @canvas.clear_rect(self.x, self.y, CELL_WIDTH, CELL_HEIGHT)
  482.     x = 10
  483.     y = 7
  484.     count = 0
  485.     for state in @actor.states
  486.       break if count >= 7
  487.       next if state.icon_index == 0
  488.       draw_icon(@canvas, state.icon_index, x, y)
  489.       x += 21
  490.       count += 1
  491.     end
  492.  
  493.     draw_actor_atk(@canvas, 10, 30, 75)
  494.     draw_actor_def(@canvas, 95, 30, 75)
  495.   end
  496.  
  497.   def refresh_normal
  498.     @canvas.clear_rect(self.x, self.y, CELL_WIDTH, CELL_HEIGHT)
  499.     @canvas.font.color = hp_color(@actor)
  500.     @canvas.draw_text(self.x + 40, self.y + 7, 128, WLH, @actor.name)
  501.     @canvas.font.color = normal_color
  502.  
  503.     draw_actor_hp_gauge(@canvas, 10, 30, CELL_WIDTH / 2 - 15)
  504.     draw_actor_mp_gauge(@canvas, CELL_WIDTH / 2 + 4, 30, CELL_WIDTH / 2 - 15)
  505.     draw_actor_hp(@canvas, 10, 30, CELL_WIDTH / 2 - 15)
  506.     draw_actor_mp(@canvas, CELL_WIDTH / 2 + 4, 30, CELL_WIDTH / 2 - 15)
  507.     draw_actor_state(@canvas, 10, 7)
  508.   end
  509.   #--------------------------------------------------------------------------
  510.   # ● 状態異常次项的表示切换进行。
  511.   #--------------------------------------------------------------------------
  512.   def next_state
  513.     return if @display_state_mode
  514.     return if no_visible_state
  515.     @state_index += 1
  516.     @state_index = 0 if @state_index >= actor.states.size
  517.     while @actor.states[@state_index].icon_index == 0
  518.       @state_index += 1
  519.       @state_index = 0 if @state_index >= actor.states.size
  520.     end
  521.     refresh
  522.   end
  523.   def no_visible_state
  524.     for state in @actor.states
  525.       return false unless state.icon_index == 0
  526.     end
  527.     true
  528.   end
  529.   #--------------------------------------------------------------------------
  530.   # ● 攻撃力的描画。
  531.   #--------------------------------------------------------------------------
  532.   def draw_actor_atk(bitmap, x, y, width = 120)
  533.     bitmap.font.color = system_color
  534.     bitmap.draw_text(x + self.x, y + self.y, 40, WLH, Vocab::atk)
  535.     bitmap.font.color = normal_color
  536.     xr = x + width
  537.     bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.atk, 2)
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 防御力的描画。
  541.   #--------------------------------------------------------------------------
  542.   def draw_actor_def(bitmap, x, y, width = 120)
  543.     bitmap.font.color = system_color
  544.     bitmap.draw_text(x + self.x, y + self.y, 40, WLH, Vocab::def)
  545.     bitmap.font.color = normal_color
  546.     xr = x + width
  547.     bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.def, 2)
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● 状態異常的描画。
  551.   #--------------------------------------------------------------------------
  552.   def draw_actor_state(bitmap, x, y)
  553.     return if no_visible_state
  554.     return if actor.states.size <= @state_index
  555.     state = @actor.states[@state_index]
  556.     draw_icon(bitmap, state.icon_index, x, y)
  557.   end
  558.   #--------------------------------------------------------------------------
  559.   # ● 状態異常图标的描画。
  560.   #--------------------------------------------------------------------------
  561.   def draw_icon(bitmap, icon_index, x, y, enabled = true)
  562.     icon = Cache.system("Iconset")
  563.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  564.     bitmap.blt(x + self.x, y + self.y, icon, rect, enabled ? 255 : 128)
  565.   end
  566.   #--------------------------------------------------------------------------
  567.   # ● HP 量规的描画。
  568.   #--------------------------------------------------------------------------
  569.   def draw_actor_hp_gauge(bitmap, x, y, width = 120)
  570.     gw = width * @actor.hp / @actor.maxhp
  571.     gc1 = hp_gauge_color1
  572.     gc2 = hp_gauge_color2
  573.     bitmap.fill_rect(x + self.x, y + WLH - 8 + self.y, width, 6, gauge_back_color)
  574.     bitmap.gradient_fill_rect(x + self.x, y + WLH - 8 + self.y, gw, 6, gc1, gc2)
  575.   end
  576.   #--------------------------------------------------------------------------
  577.   # ● MP 量规的描画。
  578.   #--------------------------------------------------------------------------
  579.   def draw_actor_mp_gauge(bitmap, x, y, width = 120)
  580.     gw = width * @actor.mp / [@actor.maxmp, 1].max
  581.     gc1 = mp_gauge_color1
  582.     gc2 = mp_gauge_color2
  583.     bitmap.fill_rect(x + self.x, y + WLH - 8 + self.y, width, 6, gauge_back_color)
  584.     bitmap.gradient_fill_rect(x + self.x, y + WLH - 8 + self.y, gw, 6, gc1, gc2)
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● HP 的描画。
  588.   #--------------------------------------------------------------------------
  589.   def draw_actor_hp(bitmap, x, y, width = 120)
  590.     bitmap.font.color = system_color
  591.     bitmap.draw_text(x + self.x, y + self.y, 30, WLH, Vocab::hp_a)
  592.     bitmap.font.color = hp_color(@actor)
  593.     xr = x + width
  594.     if width < 120
  595.       bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.hp, 2)
  596.     else
  597.       bitmap.draw_text(xr - 90 + self.x, y + self.y, 40, WLH, @actor.hp, 2)
  598.       bitmap.font.color = normal_color
  599.       bitmap.draw_text(xr - 50 + self.x, y + self.y, 10, WLH, "/", 2)
  600.       bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.maxhp, 2)
  601.     end
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● MP 的描画
  605.   #     actor : 角色
  606.   #     x     : 描画先 X 座標
  607.   #     y     : 描画先 Y 座標
  608.   #     width : 宽
  609.   #--------------------------------------------------------------------------
  610.   def draw_actor_mp(bitmap, x, y, width = 120)
  611.     bitmap.font.color = system_color
  612.     bitmap.draw_text(x + self.x, y + self.y, 30, WLH, Vocab::mp_a)
  613.     bitmap.font.color = mp_color(@actor)
  614.     xr = x + width
  615.     if width < 120
  616.       bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.mp, 2)
  617.     else
  618.       bitmap.draw_text(xr - 90 + self.x, y + self.y, 40, WLH, @actor.mp, 2)
  619.       bitmap.font.color = normal_color
  620.       bitmap.draw_text(xr - 50 + self.x, y + self.y, 10, WLH, "/", 2)
  621.       bitmap.draw_text(xr - 40 + self.x, y + self.y, 40, WLH, @actor.maxmp, 2)
  622.     end
  623.   end
  624.   def show_all_states
  625.     @display_state_mode = true
  626.     refresh
  627.   end
  628.   def hide_all_states
  629.     @display_state_mode = false
  630.     refresh
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 假人。
  634.   #--------------------------------------------------------------------------
  635.   def active=(value)
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 这个窗口的 x 座標返回。
  639.   #--------------------------------------------------------------------------
  640.   def window_x
  641.     if front?
  642.       size = $game_party.fronts.size
  643.     else
  644.       size = $game_party.backs.size
  645.     end
  646.     if Saba::Sekaiju::SHOW_EMPTY_ACTOR_STATUS
  647.       return position_in_ranks * CELL_WIDTH
  648.     end
  649.     case size
  650.     when 1
  651.       return (CELL_WIDTH)
  652.     when 2
  653.       return (position_in_ranks + 0.5) * (CELL_WIDTH)
  654.     when 3
  655.       return position_in_ranks * (CELL_WIDTH) + 1 if position_in_ranks == 2
  656.       return position_in_ranks * (CELL_WIDTH)
  657.     end
  658.     return 0
  659.   end
  660.   def front?
  661.     return @actor.front?
  662.   end
  663.   def position_in_ranks
  664.     return @actor.position_in_ranks
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 这个窗口的横宽的返回。
  668.   #--------------------------------------------------------------------------
  669.   def window_width
  670.     return CELL_WIDTH + 1 if position_in_ranks == 1
  671.     return CELL_WIDTH
  672.   end
  673. end
  674.  
  675.  
  676.  
  677. #==============================================================================
  678. # ■ Game_Actor 的追加
  679. #------------------------------------------------------------------------------
  680. #  角颜色先锋,后卫的参数追加。。
  681. #   职业的先锋,后卫初期化时的参数这些反映。。
  682. #   職業的前衛→       front = true
  683. #   職業的中衛、後衛→ front = false
  684. #==============================================================================
  685. class Game_Actor < Game_Battler
  686.   attr_accessor :position_in_ranks
  687.   attr_accessor :front
  688.   attr_accessor :screen_x
  689.   attr_accessor :screen_y
  690.   attr_accessor :screen_z
  691.   attr_accessor :face_id
  692.   def screen_x
  693.     @screen_x = 0 if @screen_x == nil
  694.     return @screen_x
  695.   end
  696.   def screen_y
  697.     @screen_y = 0 if @screen_y == nil
  698.     return @screen_y
  699.   end
  700.   def screen_z
  701.     @screen_z = 0 if @screen_z == nil
  702.     return @screen_z
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # ● 这个角色是否是前衛检查。
  706.   #--------------------------------------------------------------------------
  707.   def front?
  708.     return @front
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● 这个角色是否是后衛检查。
  712.   #--------------------------------------------------------------------------
  713.   def back?
  714.     return ! @front
  715.   end
  716.   #--------------------------------------------------------------------------
  717.   # ● 后卫的话攻击范围的返回。
  718.   #--------------------------------------------------------------------------
  719.   def back_attack?
  720.     if Saba::Sekaiju::FORMATION_ENABLED
  721.       return false if front?
  722.       if action.attack?
  723.         for weapon in weapons.compact
  724.           if weapon.long_range?
  725.             return false
  726.           end
  727.         end
  728.         return true
  729.       elsif action.skill?
  730.         return action.skill.short_range?
  731.       else
  732.         return false
  733.       end
  734.     else
  735.       return false
  736.     end
  737.   end
  738.   #--------------------------------------------------------------------------
  739.   # ● 后排 是否 能有效攻击的判定。。
  740.   #--------------------------------------------------------------------------
  741.   def back_attacked?(user, obj = nil)
  742.     return false if front?
  743.     return true if obj == nil
  744.     return obj.short_range?
  745.   end
  746.   #--------------------------------------------------------------------------
  747.   # ● 被瞄上率的取得
  748.   #--------------------------------------------------------------------------
  749.   alias saba_sekaiju_odds odds
  750.   def odds
  751.     if Saba::Sekaiju::FORMATION_ENABLED
  752.       plus = 0
  753.       case self.class.position
  754.       when 0
  755.         # 前衛
  756.         plus = Saba::Sekaiju::TARGET_ODDS_PLUS_AT_CLASS_POSITION_FORWARD
  757.       when 1
  758.         # 中衛
  759.         plus = Saba::Sekaiju::TARGET_ODDS_PLUS_AT_CLASS_POSITION_HALFBACK
  760.       when 2
  761.         # 後衛
  762.         plus = Saba::Sekaiju::TARGET_ODDS_PLUS_AT_CLASS_POSITION_BACK
  763.       end
  764.       if front?
  765.         return Saba::Sekaiju::FRONT_TARGET_ODDS + plus
  766.       else
  767.         return Saba::Sekaiju::BACK_TARGET_ODDS + plus
  768.       end
  769.     else
  770.       return saba_sekaiju_odds
  771.     end
  772.   end
  773.   #--------------------------------------------------------------------------
  774.   # ● 顔画像 ID 的返回。
  775.   #--------------------------------------------------------------------------
  776.   def face_id
  777.     return id if @face_id == nil
  778.     return @face_id
  779.   end
  780. if Saba::Sekaiju::DISPLAY_BATTLE_ANIMATION_TO_ACTOR
  781.   def use_sprite?
  782.     return true
  783.   end
  784. end
  785. end
  786. #==============================================================================
  787. # ■ Window_BattleMessage 再定義
  788. #------------------------------------------------------------------------------
  789. #  战斗中的信息画面上部2行表示出来。。
  790. #==============================================================================
  791. class Window_BattleMessage < Window_Message
  792.   MAX_LINE = 2
  793. if Saba::Sekaiju::AUTO_RESIZE_MESSAGE_WINDOW_ENABLED
  794.   #--------------------------------------------------------------------------
  795.   # ● 对象初期化 ◆◆◆ 改造/角色選択用 ◆◆◆
  796.   #--------------------------------------------------------------------------
  797.   def initialize
  798.     super
  799.     if Saba::Sekaiju::show_turn_count? && Saba::Sekaiju::TURN_WINDOW_ALIGN == 0
  800.       self.x = Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  801.     end
  802.     if Saba::Sekaiju::show_turn_count?
  803.       self.width = Saba::Sekaiju::WINDOW_WIDTH - Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  804.     end
  805.     self.y = 0
  806.     self.height = 80
  807.     self.openness = 255
  808.     @max_line_next = 0
  809.     @max_line = MAX_LINE
  810.     create_contents
  811.     @lines = []
  812.     refresh
  813.   end
  814.   def max_line=(value)
  815.     @max_line_next = value
  816.     update_window_size
  817.   end
  818.   def new_page
  819.     update_window_size
  820.     super
  821.     #◆ 追加 ◆----------------------------------------------------------------
  822.     if @item_max > 4
  823.       @line_count = 4 - @item_max
  824.     end
  825.     #--------------------------------------------------------------------------
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ● 窗口尺寸更新。 ◆◆◆ 改造/対悪魔会話用 ◆◆◆
  829.   #--------------------------------------------------------------------------
  830.   def update_window_size
  831.     if ! $game_message.face_name.empty?
  832.       if self.height != 128
  833.         self.height = 128
  834.         create_contents
  835.         @max_line = 4
  836.       end
  837.     #◆ 改造 ◆----------------------------------------------------------------
  838.     elsif $game_switches[96] == true # 会話用框架开关
  839.       self.height = 128
  840.       create_contents
  841.       @max_line = 4
  842.     #--------------------------------------------------------------------------
  843.     elsif @max_line_next > 0
  844.       if self.height != @max_line_next * WLH + 32
  845.         self.height = @max_line_next * WLH + 32
  846.         create_contents
  847.         @max_line = @max_line_next
  848.       end
  849.     else
  850.       if self.height != 80
  851.         self.height = 80
  852.         create_contents
  853.         @max_line = 2
  854.       end
  855.     end
  856.     $game_temp.max_line = @max_line
  857.   end
  858. else
  859.   #--------------------------------------------------------------------------
  860.   # ● 对象初期化
  861.   #--------------------------------------------------------------------------
  862.   def initialize
  863.     super
  864.     if Saba::Sekaiju::show_turn_count? && Saba::Sekaiju::TURN_WINDOW_ALIGN == 0
  865.       self.x = Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  866.     end
  867.     if Saba::Sekaiju::show_turn_count?
  868.       self.width = Saba::Sekaiju::WINDOW_WIDTH - Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  869.     end
  870.     self.y = 0
  871.     self.height = 80
  872.     self.openness = 255
  873.     create_contents
  874.     @max_line = MAX_LINE
  875.     @lines = []
  876.     refresh
  877.   end
  878.   def update_window_size
  879.   end
  880. end
  881.   #--------------------------------------------------------------------------
  882.   # ● 刷新
  883.   #--------------------------------------------------------------------------
  884.   def refresh
  885.     update_window_size
  886.     self.contents.clear
  887.     for i in 0...@lines.size
  888.       if i >= @max_line
  889.         i.times do
  890.           @lines.shift
  891.         end
  892.         refresh
  893.         break
  894.       end
  895.       draw_line(i)
  896.     end
  897.   end
  898.   #--------------------------------------------------------------------------
  899.   # ● 信息的更新 ◆◆◆ 改造 ◆◆◆
  900.   #--------------------------------------------------------------------------
  901.   def update_message
  902.     loop do
  903.       c = @text.slice!(/./m)            # 次的文字を取得
  904.       case c
  905.       when nil                          # 应该没有文字描画
  906.         finish_message                  # 更新終了
  907.         break
  908.       when "\x00"                       # 改行
  909.         new_line
  910.         if @line_count >= @max_line      # 行数最大的时候
  911.           unless @text.empty?            # 并且延续下去就
  912.             self.pause = true            #输入等待中
  913.             break
  914.           end
  915.         end
  916.       when "\x01"                       # \C[n]  (文字色変更)
  917.         @text.sub!(/\[([0-9]+)\]/, "")
  918.         contents.font.color = text_color($1.to_i)
  919.         next
  920.       when "\x02"                       # \G  (所持金表示)
  921.         @gold_window.refresh
  922.         @gold_window.open
  923.       when "\x03"                       # \.  (等待 1/2 秒)
  924.         @wait_count = 30
  925.         break
  926.       when "\x04"                       # \|  (等待 1 秒)
  927.         @wait_count = 60
  928.         break
  929.       when "\x05"                       # \!  (输入等待)
  930.         self.pause = true
  931.         break
  932.       when "\x06"                       # \>  (瞬間表示 ON)
  933.         @line_show_fast = true
  934.       when "\x07"                       # \<  (瞬間表示 OFF)
  935.         @line_show_fast = false
  936.       when "\x08"                       # \^  (输入不等待)
  937.         @pause_skip = true
  938.       when "\x09"                       # \I  (图标表示)
  939.         @text.sub!(/\[([0-9]+)\]/, "")
  940.         draw_icon($1.to_i, @contents_x, @contents_y)
  941.         @contents_x += 24
  942.       else                              # 普通的文字
  943.         contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
  944.         c_width = contents.text_size(c).width
  945.         @contents_x += c_width
  946.       end
  947.       break unless @show_fast or @line_show_fast
  948.     end
  949.   end
  950.   #--------------------------------------------------------------------------
  951.   # ● 文章送的输入処理
  952.   #--------------------------------------------------------------------------
  953. #~   def input_pause
  954. #~     if Input.trigger?(Input::B) or Input.trigger?(Input::C)
  955. #~       self.pause = false
  956. #~       if @text != nil and not @text.empty?
  957. #~         new_page if @line_count >= @max_line
  958. #~       else
  959. #~         terminate_message
  960. #~       end
  961. #~     end
  962. #~   end
  963. end
  964. #==============================================================================
  965. # ■ Game_Message
  966. #------------------------------------------------------------------------------
  967. #  文章和选择项表示的信息窗口的状態处理的类。
  968. # 这个类的实例是隶属于 $game_message 被参考。
  969. #==============================================================================
  970. class Game_Message
  971.   #--------------------------------------------------------------------------
  972.   # ● 改页
  973.   #--------------------------------------------------------------------------
  974.   alias saba_sekaiju_new_page new_page
  975.   def new_page
  976.     if $game_temp.in_battle
  977.       while @texts.size % $game_temp.max_line > 0
  978.         @texts.push("")
  979.       end
  980.     else
  981.       saba_sekaiju_new_page
  982.     end
  983.   end
  984. end
  985. #==============================================================================
  986. # ■ Game_Temp
  987. #------------------------------------------------------------------------------
  988. #  包括保存文件在内、一時的数剧的处理。这个类的指针 $game_temp 被参考。
  989. #==============================================================================
  990. class Game_Temp
  991.   attr_accessor :max_line
  992. end
  993. #==============================================================================
  994. # ■ Window_BattleItem
  995. #------------------------------------------------------------------------------
  996. #  戦闘中所持物品的一覧表示用的窗口。
  997. #==============================================================================
  998. class Window_BattleItem < Window_Selectable
  999.   #--------------------------------------------------------------------------
  1000.   # ● 对象初期化
  1001.   #     x      : 窗口的 X 座標
  1002.   #     y      : 窗口的 Y 座標
  1003.   #     width  : 窗口的宽
  1004.   #     height : 窗口的高さ
  1005.   #--------------------------------------------------------------------------
  1006.   def initialize(x, y, width, height)
  1007.     super(x, y, width, height)
  1008.     @column_max = 1
  1009.     self.index = 0
  1010.     refresh
  1011.   end
  1012.   #--------------------------------------------------------------------------
  1013.   # ● 物品的取得
  1014.   #--------------------------------------------------------------------------
  1015.   def item
  1016.     return @data[self.index]
  1017.   end
  1018.   #--------------------------------------------------------------------------
  1019.   # ● 物品名单中是否包括
  1020.   #     item : 物品
  1021.   #--------------------------------------------------------------------------
  1022.   def include?(item)
  1023.     return false if item == nil
  1024.     if $game_temp.in_battle
  1025.       return false unless item.is_a?(RPG::Item)
  1026.     end
  1027.     return true
  1028.   end
  1029.   #--------------------------------------------------------------------------
  1030.   # ● 物品是否许可状态表示
  1031.   #     item : 物品
  1032.   #--------------------------------------------------------------------------
  1033.   def enable?(item)
  1034.     return $game_party.item_can_use?(item)
  1035.   end
  1036.   #--------------------------------------------------------------------------
  1037.   # ● 刷新
  1038.   #--------------------------------------------------------------------------
  1039.   def refresh
  1040.     @data = []
  1041.     for item in $game_party.items
  1042.       next unless include?(item)
  1043.       @data.push(item)
  1044.       if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
  1045.         self.index = @data.size - 1
  1046.       end
  1047.     end
  1048.     @data.push(nil) if include?(nil)
  1049.     @item_max = @data.size
  1050.     create_contents
  1051.     for i in 0...@item_max
  1052.       draw_item(i)
  1053.     end
  1054.   end
  1055.   #--------------------------------------------------------------------------
  1056.   # ● 項目的描画
  1057.   #     index : 項目番号
  1058.   #--------------------------------------------------------------------------
  1059.   def draw_item(index)
  1060.     rect = item_rect(index)
  1061.     self.contents.clear_rect(rect)
  1062.     item = @data[index]
  1063.     if item != nil
  1064.       number = $game_party.item_number(item)
  1065.       enabled = enable?(item)
  1066.       rect.width -= 4
  1067.       draw_item_name(item, rect.x, rect.y, enabled)
  1068.       self.contents.draw_text(rect, sprintf(":%2d", number), 2)
  1069.     end
  1070.   end
  1071.   #--------------------------------------------------------------------------
  1072.   # ● 帮助文本更新
  1073.   #--------------------------------------------------------------------------
  1074.   def update_help
  1075.     @help_window.set_text(item == nil ? "" : item.description)
  1076.   end
  1077.  
  1078.  
  1079.  
  1080. end
  1081. #==============================================================================
  1082. # ■ Window_BattleSkill
  1083. #------------------------------------------------------------------------------
  1084. # 在战斗中可以使用技能一览表示的窗口。
  1085. #==============================================================================
  1086. class Window_BattleSkill < Window_Skill
  1087.   #--------------------------------------------------------------------------
  1088.   # ● 对象初期化
  1089.   #     x      : 窗口的 X 座標
  1090.   #     y      : 窗口的 Y 座標
  1091.   #     width  : 窗口的宽
  1092.   #     height : 窗口的高
  1093.   #     actor  : 角色
  1094.   #--------------------------------------------------------------------------
  1095.   def initialize(x, y, width, height, actor)
  1096.     super(x, y, width, height, actor)
  1097.     @actor = actor
  1098.     @column_max = 1
  1099.     self.index = 0
  1100.     refresh
  1101.   end
  1102.   #--------------------------------------------------------------------------
  1103.   # ● 技能的取得
  1104.   #--------------------------------------------------------------------------
  1105.   def skill
  1106.     return @data[self.index]
  1107.   end
  1108.   #--------------------------------------------------------------------------
  1109.   # ● 刷新
  1110.   #--------------------------------------------------------------------------
  1111.   def refresh
  1112.     @data = []
  1113.     for skill in @actor.skills
  1114.       if $imported["HiddenSkill"] == true
  1115.         next unless include?(skill)
  1116.       end
  1117.       @data.push(skill)
  1118.       if skill.id == @actor.last_skill_id
  1119.         self.index = @data.size - 1
  1120.       end
  1121.     end
  1122.     @item_max = @data.size
  1123.     create_contents
  1124.     for i in 0...@item_max
  1125.       draw_item(i)
  1126.     end
  1127.   end
  1128.   #--------------------------------------------------------------------------
  1129.   # ● 項目的描画
  1130.   #     index : 項目番号
  1131.   #--------------------------------------------------------------------------
  1132.   def draw_item(index)
  1133.     rect = item_rect(index)
  1134.     self.contents.clear_rect(rect)
  1135.     skill = @data[index]
  1136.     if skill != nil
  1137.       rect.width -= 4
  1138.       enabled = @actor.skill_can_use?(skill)
  1139.       draw_item_name(skill, rect.x, rect.y, enabled)
  1140.       mp = @actor.calc_mp_cost(skill)
  1141.       if mp == 0
  1142.         text = Saba::Sekaiju::NO_COST_SKILL_VIEW
  1143.         self.contents.draw_text(rect, text, 2)
  1144.       else
  1145.         self.contents.draw_text(rect, mp, 2)
  1146.       end
  1147.     end
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # ● 帮助文本更新
  1151.   #--------------------------------------------------------------------------
  1152.   def update_help
  1153.     @help_window.set_text(skill == nil ? "" : skill.description)
  1154.   end
  1155. end
  1156.  
  1157. class Sprite_Turn < Sprite
  1158.   #--------------------------------------------------------------------------
  1159.   # ● 对象初期化
  1160.   #--------------------------------------------------------------------------
  1161.   def initialize(viewport)
  1162.     super
  1163.     self.bitmap = Bitmap.new(Saba::Sekaiju::TURN_WINDOW_WIDTH, Saba::Sekaiju::TURN_WINDOW_HEIGHT)
  1164.     @turn_count = 1
  1165.     return unless Saba::Sekaiju::show_turn_count?
  1166.     @turn_image = Cache.system(Saba::Sekaiju::TURN_IMAGE)
  1167.     if Saba::Sekaiju::TURN_WINDOW_ALIGN == 0
  1168.       self.x = 0
  1169.     else
  1170.       self.x = Saba::Sekaiju::WINDOW_WIDTH - Saba::Sekaiju::TURN_WINDOW_WIDTH
  1171.     end
  1172.     self.y = Saba::Sekaiju::TURN_WINDOW_Y
  1173.     refresh
  1174.   end
  1175.  
  1176.   def refresh
  1177.     return unless Saba::Sekaiju::show_turn_count?
  1178.     self.bitmap.clear_rect(0, 0, self.bitmap.width, self.bitmap.height)
  1179.     self.bitmap.blt(0, 0, @turn_image, Rect.new(0, 0, @turn_image.width, @turn_image.height))
  1180.     self.bitmap.font.size = Saba::Sekaiju::TURN_FONT_SIZE
  1181.     self.bitmap.font.color = Saba::Sekaiju::TURN_FONT_COLOR
  1182.     self.bitmap.font.bold = Saba::Sekaiju::TURN_FONT_BOLD
  1183.     self.bitmap.draw_text(Saba::Sekaiju::TURN_VALUE_X, Saba::Sekaiju::TURN_VALUE_Y, 60, 30, @turn_count.to_s, 1)
  1184.   end
  1185.   def increase_turn
  1186.     @turn_count += 1
  1187.     refresh
  1188.   end
  1189.   #--------------------------------------------------------------------------
  1190.   # ● 解放
  1191.   #--------------------------------------------------------------------------
  1192.   def dispose
  1193.     self.bitmap.dispose
  1194.     super
  1195.   end
  1196. end
  1197.  
  1198. #==============================================================================
  1199. # ■ Sprite_EnemyState
  1200. #------------------------------------------------------------------------------
  1201. #  敵的状态表示精灵。
  1202. #==============================================================================
  1203. class Sprite_EnemyState < Sprite
  1204.   WIDTH = Saba::Sekaiju::WINDOW_WIDTH
  1205.   HEIGHT = 200
  1206.   #--------------------------------------------------------------------------
  1207.   # ● 对象初期化
  1208.   #--------------------------------------------------------------------------
  1209.   def initialize(viewport, enemy_sprites)
  1210.     super(viewport)
  1211.     @enemy_sprites = enemy_sprites.reverse
  1212.     @enemies = []
  1213.     for enemy in $game_troop.members
  1214.       next unless enemy.exist?
  1215.       @enemies.push(enemy)
  1216.     end
  1217.     self.bitmap = Bitmap.new(WIDTH, HEIGHT)
  1218.   end
  1219.   #--------------------------------------------------------------------------
  1220.   # ● 解放
  1221.   #--------------------------------------------------------------------------
  1222.   def dispose
  1223.     self.bitmap.dispose
  1224.     super
  1225.   end
  1226.   def refresh
  1227.     return unless defined?($game_party.reduce_consume_turn)
  1228.     draw_not_act_turns
  1229.   end
  1230.   #--------------------------------------------------------------------------
  1231.   # ● 更新
  1232.   #--------------------------------------------------------------------------
  1233.   def update
  1234.  
  1235.   end
  1236.   def draw_not_act_turns
  1237.     self.bitmap.clear_rect(0, 0, WIDTH, HEIGHT)
  1238.     for enemy_sprite in @enemy_sprites
  1239.       draw_not_act_turn(enemy_sprite) if enemy_sprite.battler.not_act_turn != -1
  1240.     end
  1241.   end
  1242.   def draw_not_act_turn(enemy_sprite)
  1243.     return unless enemy_sprite.battler.exist?
  1244.     width = Saba::Sekaiju::NOT_ACT_TURN_WIDTH
  1245.     height = Saba::Sekaiju::NOT_ACT_TURN_HEIGHT
  1246.     x = enemy_sprite.x - width / 2
  1247.     y = Saba::Sekaiju::NOT_ACT_TURN_Y
  1248.     not_act_turn = enemy_sprite.battler.not_act_turn
  1249.  
  1250.     if Saba::Sekaiju::DRAW_WAITING_SKILL_NAME &&  not_act_turn >= 0
  1251.       y_plus = -20
  1252.       height_plus = 20
  1253.     else
  1254.       y_plus = 0
  1255.       height_plus = 0
  1256.     end
  1257.     self.bitmap.fill_rect(x, y + y_plus, width, height + height_plus, Saba::Sekaiju::NOT_ACT_TURN_BG_COLOR)
  1258.  
  1259.     old_color = self.bitmap.font.color
  1260.     old_size = self.bitmap.font.size
  1261.  
  1262.  
  1263.     self.bitmap.font.size = Saba::Sekaiju::NOT_ACT_TURN_FONT_SIZE
  1264.  
  1265.  
  1266.     if not_act_turn == 0
  1267.       self.bitmap.font.color = Saba::Sekaiju::NOT_ACT_TURN_READY_FONT_COLOR
  1268.       text = Saba::Sekaiju::READY_TEXT
  1269.     elsif not_act_turn > 0
  1270.       self.bitmap.font.color = Saba::Sekaiju::NOT_ACT_TURN_NORMAL_FONT_COLOR
  1271.       text = Saba::Sekaiju::GETTING_READY_TEXT + (not_act_turn).to_s
  1272.     else
  1273.       self.bitmap.font.color = Saba::Sekaiju::NOT_ACT_TURN_NORMAL_FONT_COLOR
  1274.       text = Saba::Sekaiju::TIRED_TEXT + (not_act_turn * -1 - 1).to_s
  1275.     end
  1276.     self.bitmap.draw_text(x, y, width, height, text, 1)
  1277.  
  1278.     if not_act_turn >= 0
  1279.       skill_name = enemy_sprite.battler.action.skill.name
  1280.       draw_waiting_skill_name(x, y + y_plus, width, height, skill_name)
  1281.     end
  1282.     self.bitmap.font.color = old_color
  1283.     self.bitmap.font.size = old_size
  1284.   end
  1285.  
  1286.   def draw_waiting_skill_name(x, y, width, height, skill_name)
  1287.     return unless Saba::Sekaiju::DRAW_WAITING_SKILL_NAME
  1288.  
  1289.     self.bitmap.font.color = Color.new(255, 255, 255)
  1290.     self.bitmap.font.size = Saba::Sekaiju::WAITING_SKILL_FONT_SIZE
  1291.     max = Saba::Sekaiju::MAX_SKILL_NAME_LENGTH
  1292.     if max > 0
  1293.       skill_name = skill_name[0...max]
  1294.     end
  1295.  
  1296.     self.bitmap.draw_text(x, y, width - 4, height, skill_name, 1)
  1297.   end
  1298. end
  1299.  
  1300. #==============================================================================
  1301. # ■ Sprite_EnemyDamage
  1302. #------------------------------------------------------------------------------
  1303. #  战斗中,敌人给予了的受创点表示精灵。。
  1304. #==============================================================================
  1305. class Sprite_EnemyDamage < Sprite
  1306.   WIDTH = Saba::Sekaiju::WINDOW_WIDTH  # 虽然没有必要这么大的必要。
  1307.   HEIGHT = Saba::Sekaiju::WINDOW_HEIGHT
  1308.   #--------------------------------------------------------------------------
  1309.   # ● 对象初期化
  1310.   #--------------------------------------------------------------------------
  1311.   def initialize(viewport, enemy_sprites)
  1312.     super(viewport)
  1313.     @enemy_sprites = enemy_sprites.reverse
  1314.     @enemies = []
  1315.     for enemy in $game_troop.members
  1316.       next unless enemy.exist?
  1317.       @enemies.push(enemy)
  1318.     end
  1319.     @frame = Saba::Sekaiju::DAMADE_ANIMATIONS_DURATION
  1320.     @miss = Cache.system("Miss")
  1321.     self.bitmap = Bitmap.new(WIDTH, HEIGHT)
  1322.   end
  1323.   #--------------------------------------------------------------------------
  1324.   # ● 解放
  1325.   #--------------------------------------------------------------------------
  1326.   def dispose
  1327.     self.bitmap.dispose
  1328.     super
  1329.   end
  1330.   #--------------------------------------------------------------------------
  1331.   # ● 框架更新
  1332.   #--------------------------------------------------------------------------
  1333.   def update
  1334.     return unless animation_visible?
  1335.     if animation_finished?
  1336.       end_animation
  1337.     else
  1338.       update_animation
  1339.     end
  1340.   end
  1341.   #--------------------------------------------------------------------------
  1342.   # ● 动画表示中 检验返回。
  1343.   #--------------------------------------------------------------------------
  1344.   def animation_visible?
  1345.     return @current_enemy_sprite != nil || @miss_enemy_sprite != nil
  1346.   end
  1347.   #--------------------------------------------------------------------------
  1348.   # ● 动画就结束,判定返回。
  1349.   #--------------------------------------------------------------------------
  1350.   def animation_finished?
  1351.     return @frame >= Saba::Sekaiju::DAMADE_ANIMATIONS_DURATION
  1352.   end
  1353.   #--------------------------------------------------------------------------
  1354.   # ● 动画的描画終了、显示全部的要素删除。
  1355.   #--------------------------------------------------------------------------
  1356.   def end_animation
  1357.     @current_enemy_sprite = nil
  1358.     @miss_enemy_sprite = nil
  1359.     self.bitmap.clear_rect(0, 0, WIDTH, HEIGHT)
  1360.   end
  1361.   #--------------------------------------------------------------------------
  1362.   # ● 动画的更新。
  1363.   #--------------------------------------------------------------------------
  1364.   def update_animation
  1365.     @frame += 1
  1366.     draw_hp_damage unless @current_enemy_sprite == nil
  1367.     draw_miss unless @miss_enemy_sprite == nil
  1368.   end
  1369.   #--------------------------------------------------------------------------
  1370.   # ● 落空的表示。
  1371.   #--------------------------------------------------------------------------
  1372.   def display_miss(target)
  1373.     for enemy_sprite in @enemy_sprites
  1374.       if enemy_sprite.battler == target
  1375.         @miss_enemy_sprite = enemy_sprite
  1376.         @frame = 0
  1377.         draw_miss
  1378.         return
  1379.       end
  1380.     end
  1381.   end
  1382.   #--------------------------------------------------------------------------
  1383.   # ● 落空的描画。
  1384.   #--------------------------------------------------------------------------
  1385.   def draw_miss
  1386.     self.bitmap.clear_rect(0, 0, WIDTH, HEIGHT)
  1387.     x = @miss_enemy_sprite.x
  1388.     y = @miss_enemy_sprite.y - @frame - @miss_enemy_sprite.height / 2 - 20
  1389.     self.bitmap.blt(x - @miss.width / 2, y, @miss, Rect.new(0, 0, @miss.width, @miss.height))
  1390.   end
  1391.   #--------------------------------------------------------------------------
  1392.   # ● HP受创点表示。
  1393.   #--------------------------------------------------------------------------
  1394.   def display_hp_damage(target, obj)
  1395.     for enemy_sprite in @enemy_sprites
  1396.       if enemy_sprite.battler == target
  1397.  
  1398.         if enemy_sprite.battler.hp_damage == 0
  1399.           return if obj != nil && obj.is_a?(RPG::BaseItem) && obj.base_damage == 0
  1400.         end
  1401.  
  1402.         @current_enemy_sprite = enemy_sprite
  1403.         @frame = 0
  1404.         draw_hp_damage
  1405.         return
  1406.       end
  1407.     end
  1408.   end
  1409.   #--------------------------------------------------------------------------
  1410.   # ● HP受创点描画。
  1411.   #--------------------------------------------------------------------------
  1412.   def draw_hp_damage
  1413.     self.bitmap.clear_rect(0, 0, WIDTH, HEIGHT)
  1414.     damage = @current_enemy_sprite.battler.hp_damage
  1415.     x = @current_enemy_sprite.x - 30
  1416.     y = @current_enemy_sprite.y - @frame - @current_enemy_sprite.height / 2 - 20
  1417.     self.bitmap.font.bold = true
  1418.     if damage >= 0
  1419.       self.bitmap.font.color = Saba::Sekaiju::DAMAGE_COLOR
  1420.     else
  1421.       self.bitmap.font.color = Saba::Sekaiju::RECOVER_COLOR
  1422.       damage = damage.abs
  1423.     end
  1424.     self.bitmap.font.size = Saba::Sekaiju::FONT_SIZE
  1425.     self.bitmap.draw_text(x, y, 60, 32, damage.to_s, 1)
  1426.   end
  1427. end
  1428.  
  1429. #==============================================================================
  1430. # ■ Sprite_TargetEnemySelection
  1431. #------------------------------------------------------------------------------
  1432. #  战斗中,敌人选择光标表示精灵。。
  1433. #==============================================================================
  1434. class Sprite_TargetEnemySelection < Sprite
  1435.   attr_accessor :help_window
  1436.   #--------------------------------------------------------------------------
  1437.   # ● 对象初期化
  1438.   #--------------------------------------------------------------------------
  1439.   def initialize(viewport, enemy_sprites)
  1440.     super(viewport)
  1441.     @enemy_sprites = enemy_sprites.reverse
  1442.     @enemies = []
  1443.     for enemy in $game_troop.members
  1444.       next unless enemy.exist?
  1445.       @enemies.push(enemy)
  1446.     end
  1447.     self.bitmap = Bitmap.new(Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  1448.     @index = 0
  1449.     @item_max = @enemy_sprites.size
  1450.     @windowskin = Cache.system("Window")
  1451.     @state_mode = false
  1452.     refresh
  1453.   end
  1454.   #--------------------------------------------------------------------------
  1455.   # ● 解放
  1456.   #--------------------------------------------------------------------------
  1457.   def dispose
  1458.     self.bitmap.dispose
  1459.     super
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # ● 帮助窗口的設定。
  1463.   #--------------------------------------------------------------------------
  1464.   def help_window=(value)
  1465.     @help_window = value
  1466.     refresh
  1467.   end
  1468.   #--------------------------------------------------------------------------
  1469.   # ● 敵角色对象取得
  1470.   #--------------------------------------------------------------------------
  1471.   def enemy
  1472.     return @enemy_sprites[@index].battler
  1473.   end
  1474.   #--------------------------------------------------------------------------
  1475.   # ● 描画的更新。
  1476.   #--------------------------------------------------------------------------
  1477.   def refresh
  1478.     self.bitmap.clear_rect(0, 0, Saba::Sekaiju::WINDOW_WIDTH, 400)
  1479.     auto_select
  1480.  
  1481.     enemy_sprite = @enemy_sprites[@index]
  1482.     battler = enemy_sprite.battler
  1483.     @help_window.set_text(battler.name) if (@help_window != nil && !@help_window.disposed?)
  1484.     load_cursor_image(battler)
  1485.     # 順番を逆
  1486.     draw_cursor(enemy_sprite.x, Saba::Sekaiju::TARGET_CURSOR_Y + offset_y)
  1487.     draw_status(enemy_sprite, enemy_sprite.x + Saba::Sekaiju::TARGET_STATE_OFFSET_X, Saba::Sekaiju::TARGET_STATE_Y)
  1488.     draw_bars(enemy_sprite, battler)
  1489.   end
  1490.   def offset_y
  1491.     return 0 unless Saba::Sekaiju::ADJUST_TARGET_WINDOW_Y
  1492.     enemy_sprite = @enemy_sprites[@index]
  1493.  
  1494.     n = enemy_sprite.y - enemy_sprite.height / 2 - 150
  1495.     max_y = Saba::Sekaiju::ENEMY_SELECTION_WINDOW_MAX_Y
  1496.     min_y = Saba::Sekaiju::ENEMY_SELECTION_WINDOW_MIN_Y
  1497.     n = [[n, max_y].min, min_y].max
  1498.     return n
  1499.   end
  1500.   #--------------------------------------------------------------------------
  1501.   # ● 光标的图片读取。。
  1502.   #--------------------------------------------------------------------------
  1503.   def load_cursor_image(battler)
  1504.     case Saba::Sekaiju::PARAMETER_TYPE
  1505.     when 0
  1506.       @cursor = Cache.system("Cursor")
  1507.     when 1
  1508.       if Saba::Sekaiju::NOT_DRAW_MAX_MP_0 && battler.maxmp == 0
  1509.         @cursor = Cache.system("Cursor")
  1510.       else
  1511.         @cursor = Cache.system("Cursor_mp")
  1512.       end
  1513.     when 2
  1514.       if battler.use_overdrive_skill?
  1515.         @cursor = Cache.system("Cursor_od")
  1516.       else
  1517.         @cursor = Cache.system("Cursor")
  1518.       end
  1519.     when 3
  1520.       if battler.use_overdrive_skill?
  1521.         @cursor = Cache.system("Cursor_mp_od")   
  1522.       else
  1523.         if Saba::Sekaiju::NOT_DRAW_MAX_MP_0 && battler.maxmp == 0
  1524.           @cursor = Cache.system("Cursor")
  1525.         else
  1526.           @cursor = Cache.system("Cursor_mp")
  1527.         end
  1528.       end
  1529.     end
  1530.   end
  1531.   #--------------------------------------------------------------------------
  1532.   # ● 敌人的参数绘制。。
  1533.   #--------------------------------------------------------------------------
  1534.   def draw_bars(enemy_sprite, battler)
  1535.     case Saba::Sekaiju::PARAMETER_TYPE
  1536.     when 0
  1537.       draw_only_hp_bar(enemy_sprite, battler)
  1538.     when 1
  1539.       if Saba::Sekaiju::NOT_DRAW_MAX_MP_0 && battler.maxmp == 0
  1540.         draw_only_hp_bar(enemy_sprite, battler)
  1541.       else
  1542.         draw_hp_and_mp_bar(enemy_sprite, battler)
  1543.       end
  1544.     when 2
  1545.       if battler.use_overdrive_skill?
  1546.         draw_hp_and_od_bar(enemy_sprite, battler)
  1547.       else
  1548.         draw_only_hp_bar(enemy_sprite, battler)
  1549.       end
  1550.     when 3
  1551.       if battler.use_overdrive_skill?
  1552.         draw_all_bar(enemy_sprite, battler)
  1553.       else
  1554.         if Saba::Sekaiju::NOT_DRAW_MAX_MP_0 && battler.maxmp == 0
  1555.           draw_only_hp_bar(enemy_sprite, battler)
  1556.         else
  1557.           draw_hp_and_mp_bar(enemy_sprite, battler)
  1558.         end
  1559.       end
  1560.     end
  1561.   end
  1562.   #--------------------------------------------------------------------------
  1563.   # ● HP条的描画。
  1564.   #--------------------------------------------------------------------------
  1565.   def draw_only_hp_bar(enemy_sprite, battler)
  1566.     x = enemy_sprite.x - 14
  1567.     if Saba::Checker::define?(battler.enemy, "HIDE_HP")
  1568.       draw_question(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y + offset_y)
  1569.     else
  1570.       draw_hp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y+ offset_y)
  1571.     end
  1572.   end
  1573.   #--------------------------------------------------------------------------
  1574.   # ● HP条とMP条的描画。
  1575.   #--------------------------------------------------------------------------
  1576.   def draw_hp_and_mp_bar(enemy_sprite, battler)
  1577.     x = enemy_sprite.x - 14
  1578.     if Saba::Checker::define?(battler.enemy, "HIDE_HP")
  1579.       draw_question(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1580.     else
  1581.       draw_hp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1582.     end
  1583.     draw_mp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y + 7+ offset_y)
  1584.   end
  1585.   #--------------------------------------------------------------------------
  1586.   # ● HP条和超级气力条的描画。
  1587.   #--------------------------------------------------------------------------
  1588.   def draw_hp_and_od_bar(enemy_sprite, battler)
  1589.     x = enemy_sprite.x - 14
  1590.     if Saba::Checker::define?(battler.enemy, "HIDE_HP")
  1591.       draw_question(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1592.     else
  1593.       draw_hp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1594.     end
  1595.     draw_od_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y + 7+ offset_y)
  1596.   end
  1597.   #--------------------------------------------------------------------------
  1598.   # ● HP条和MP条和超级气力条的描画。
  1599.   #--------------------------------------------------------------------------
  1600.   def draw_all_bar(enemy_sprite, battler)
  1601.     x = enemy_sprite.x - 14
  1602.     if Saba::Checker::define?(battler.enemy, "HIDE_HP")
  1603.       draw_question(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1604.     else
  1605.       draw_hp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y - 1+ offset_y)
  1606.     end
  1607.     draw_mp_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y + 7+ offset_y)
  1608.     draw_od_bar(enemy_sprite, x, Saba::Sekaiju::TARGET_CURSOR_Y + 15+ offset_y)
  1609.   end
  1610.   #--------------------------------------------------------------------------
  1611.   # ● 敵的状态的描画。
  1612.   #--------------------------------------------------------------------------
  1613.   def draw_status(enemy_sprite, x, y)
  1614.     enemy_battler = enemy_sprite.battler
  1615.     count = 0
  1616.     for state in enemy_battler.states
  1617.       draw_icon(state.icon_index, x + Saba::Sekaiju::TARGET_STATE_INTERVAL * count, y)
  1618.       count += 1
  1619.     end
  1620.   end
  1621.   #--------------------------------------------------------------------------
  1622.   # ● 图标的描画
  1623.   #     icon_index : 图标番号
  1624.   #     x          : 描画先 X 座標
  1625.   #     y          : 描画先 Y 座標
  1626.   #     enabled    : 有効标记。false 的话半透明的描画
  1627.   #--------------------------------------------------------------------------
  1628.   def draw_icon(icon_index, x, y, enabled = true)
  1629.     bitmap = Cache.system("Iconset")
  1630.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1631.     self.bitmap.blt(x, y, bitmap, rect, enabled ? 255 : 128)
  1632.   end
  1633.   #--------------------------------------------------------------------------
  1634.   # ● 光标的描画。
  1635.   #--------------------------------------------------------------------------
  1636.   def draw_cursor(x, y)
  1637.     self.bitmap.fill_rect(x - 36, y - 8, 72, 11, Saba::Sekaiju::TARGET_BG_COLOR)
  1638.     self.bitmap.font.size = 12
  1639.     #self.bitmap.draw_text(x - 32, y - 10, 108, 15, "HP")
  1640.     self.bitmap.blt(x - @cursor.width / 2, y - 14, @cursor, Rect.new(0, 0, @cursor.width, @cursor.height))
  1641.   end
  1642.   #--------------------------------------------------------------------------
  1643.   # ● 敵的HP欄???的描画。
  1644.   #--------------------------------------------------------------------------
  1645.   def draw_question(enemy_sprite, x, y)
  1646.     width = Saba::Sekaiju::BAR_WIDTH
  1647.     height = Saba::Sekaiju::HP_BAR_HEIGHT
  1648.     y -= height
  1649.     color = Saba::Sekaiju::HP_BAR_BG_COLOR
  1650.     weight = Saba::Sekaiju::BAR_BORDER_WEIGHT
  1651.     self.bitmap.fill_rect(x - weight, y - weight, width + weight * 2, height + weight * 2, Saba::Sekaiju::HP_BAR_BORDER_COLOR)
  1652.     self.bitmap.fill_rect(x, y, width, height, color)
  1653.     self.bitmap.gradient_fill_rect(x, y, width, height, hp_gauge_color1, hp_gauge_color2)
  1654.     q = Cache.system("question")
  1655.     self.bitmap.blt(x, y - 4, q, Rect.new(0, 0, q.width, q.height))
  1656.   end
  1657.   #--------------------------------------------------------------------------
  1658.   # ● 敵的HP条的描画。
  1659.   #--------------------------------------------------------------------------
  1660.   def draw_hp_bar(enemy_sprite, x, y)
  1661.     width = Saba::Sekaiju::BAR_WIDTH
  1662.     height = Saba::Sekaiju::HP_BAR_HEIGHT
  1663.     y -= height
  1664.     y += Saba::Sekaiju::HP_BAR_OFFSET_Y
  1665.     color = Saba::Sekaiju::HP_BAR_BG_COLOR
  1666.     weight = Saba::Sekaiju::BAR_BORDER_WEIGHT
  1667.     self.bitmap.fill_rect(x - weight, y - weight, width + weight * 2, height + weight * 2, Saba::Sekaiju::HP_BAR_BORDER_COLOR)
  1668.     self.bitmap.fill_rect(x, y, width, height, color)
  1669.     enemy_battler = enemy_sprite.battler
  1670.     width = width * enemy_battler.hp / enemy_battler.maxhp
  1671.  
  1672.     self.bitmap.gradient_fill_rect(x, y, width, height, hp_gauge_color1, hp_gauge_color2)
  1673.   end
  1674.   #--------------------------------------------------------------------------
  1675.   # ● HP 量规的色 1 返回。
  1676.   #--------------------------------------------------------------------------
  1677.   def hp_gauge_color1
  1678.     if Saba::Sekaiju::USE_SYSTEM_COLOR
  1679.       return text_color(20)
  1680.     else
  1681.       return Saba::Sekaiju::HP_BAR_FG_COLOR_1
  1682.     end
  1683.   end
  1684.   #--------------------------------------------------------------------------
  1685.   # ● HP 量规的色 2 返回。
  1686.   #--------------------------------------------------------------------------
  1687.   def hp_gauge_color2
  1688.     if Saba::Sekaiju::USE_SYSTEM_COLOR
  1689.       return text_color(21)
  1690.     else
  1691.       return Saba::Sekaiju::HP_BAR_FG_COLOR_2
  1692.     end
  1693.   end
  1694.   #--------------------------------------------------------------------------
  1695.   # ○ 气力量规的通常時的色 1 的取得
  1696.   #--------------------------------------------------------------------------
  1697.   def od_gauge_normal_color1
  1698.     color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
  1699.     return (color.is_a?(Integer) ? text_color(color) : color)
  1700.   end
  1701.   #--------------------------------------------------------------------------
  1702.   # ○ 气力量规的通常時的色 2 的取得
  1703.   #--------------------------------------------------------------------------
  1704.   def od_gauge_normal_color2
  1705.     color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
  1706.     return (color.is_a?(Integer) ? text_color(color) : color)
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ○ 气力量规的最大時的色 1 的取得
  1710.   #--------------------------------------------------------------------------
  1711.   def od_gauge_max_color1
  1712.     color = KGC::OverDrive::GAUGE_MAX_START_COLOR
  1713.     return (color.is_a?(Integer) ? text_color(color) : color)
  1714.   end
  1715.   #--------------------------------------------------------------------------
  1716.   # ○ 气力量规的最大時的色 2 的取得
  1717.   #--------------------------------------------------------------------------
  1718.   def od_gauge_max_color2
  1719.     color = KGC::OverDrive::GAUGE_MAX_END_COLOR
  1720.     return (color.is_a?(Integer) ? text_color(color) : color)
  1721.   end
  1722.   #--------------------------------------------------------------------------
  1723.   # ● 敵的气力条描画。
  1724.   #--------------------------------------------------------------------------
  1725.   def draw_od_bar(enemy_sprite, x, y)
  1726.     enemy_battler = enemy_sprite.battler
  1727.  
  1728.     width = Saba::Sekaiju::BAR_WIDTH
  1729.  
  1730.     n = enemy_battler.overdrive % KGC::OverDrive::GAUGE_MAX
  1731.     n = KGC::OverDrive::GAUGE_MAX if enemy_battler.overdrive == enemy_battler.max_overdrive
  1732.     gw = width * n / KGC::OverDrive::GAUGE_MAX
  1733.     gc1 = (gw == width ? od_gauge_max_color1 : od_gauge_normal_color1)
  1734.     gc2 = (gw == width ? od_gauge_max_color2 : od_gauge_normal_color2)
  1735.  
  1736.     height = Saba::Sekaiju::OVERDRIVE_BAR_HEIGHT
  1737.     y -= height
  1738.     y += Saba::Sekaiju::OVERDRIVE_BAR_OFFSET_Y
  1739.     color = Saba::Sekaiju::HP_BAR_BG_COLOR
  1740.     weight = Saba::Sekaiju::BAR_BORDER_WEIGHT
  1741.     self.bitmap.fill_rect(x - weight, y - weight, width + weight * 2, height + weight * 2, Saba::Sekaiju::HP_BAR_BORDER_COLOR)
  1742.     self.bitmap.fill_rect(x, y, width, height, color)
  1743.     enemy_battler = enemy_sprite.battler
  1744.     width = width * enemy_battler.overdrive / enemy_battler.maxhp
  1745.  
  1746.     self.bitmap.gradient_fill_rect(x, y, gw, height, gc1, gc2)
  1747.   end
  1748.   #--------------------------------------------------------------------------
  1749.   # ● 敵的MP条的描画。
  1750.   #--------------------------------------------------------------------------
  1751.   def draw_mp_bar(enemy_sprite, x, y)
  1752.     width = Saba::Sekaiju::BAR_WIDTH
  1753.     height = Saba::Sekaiju::MP_BAR_HEIGHT
  1754.     y -= height
  1755.     y += Saba::Sekaiju::MP_BAR_OFFSET_Y
  1756.     color = Saba::Sekaiju::HP_BAR_BG_COLOR
  1757.     weight = Saba::Sekaiju::BAR_BORDER_WEIGHT
  1758.     self.bitmap.fill_rect(x - weight, y - weight, width + weight * 2, height + weight * 2, Saba::Sekaiju::HP_BAR_BORDER_COLOR)
  1759.     self.bitmap.fill_rect(x, y, width, height, color)
  1760.     enemy_battler = enemy_sprite.battler
  1761.     if enemy_battler.maxmp == 0
  1762.       width = 0
  1763.     else
  1764.       width = width * enemy_battler.mp / enemy_battler.maxmp
  1765.     end
  1766.  
  1767.     self.bitmap.gradient_fill_rect(x, y, width, height, mp_gauge_color1, mp_gauge_color2)
  1768.   end
  1769.   #--------------------------------------------------------------------------
  1770.   # ● MP 量规的色 1 返回。
  1771.   #--------------------------------------------------------------------------
  1772.   def mp_gauge_color1
  1773.     if Saba::Sekaiju::USE_SYSTEM_COLOR
  1774.       return text_color(22)
  1775.     else
  1776.       return Saba::Sekaiju::MP_BAR_FG_COLOR_1
  1777.     end
  1778.   end
  1779.   #--------------------------------------------------------------------------
  1780.   # ● HP 量规的色 2 返回。
  1781.   #--------------------------------------------------------------------------
  1782.   def mp_gauge_color2
  1783.     if Saba::Sekaiju::USE_SYSTEM_COLOR
  1784.       return text_color(23)
  1785.     else
  1786.       return Saba::Sekaiju::MP_BAR_FG_COLOR_2
  1787.     end
  1788.   end
  1789.   #--------------------------------------------------------------------------
  1790.   # ● 文字色取得
  1791.   #     n : 文字色番号 (0~31)
  1792.   #--------------------------------------------------------------------------
  1793.   def text_color(n)
  1794.     x = 64 + (n % 8) * 8
  1795.     y = 96 + (n / 8) * 8
  1796.     return @windowskin.get_pixel(x, y)
  1797.   end
  1798.   #--------------------------------------------------------------------------
  1799.   # ● 框架更新
  1800.   #--------------------------------------------------------------------------
  1801.   def update
  1802.     super
  1803.     if cursor_movable?
  1804.       last_index = @index
  1805.       if Input.repeat?(Input::RIGHT)
  1806.         cursor_right
  1807.       end
  1808.       if Input.repeat?(Input::LEFT)
  1809.         cursor_left
  1810.       end
  1811.       if @index != last_index
  1812.         Sound.play_cursor
  1813.       end
  1814.     end
  1815.     refresh
  1816.   end
  1817.   #--------------------------------------------------------------------------
  1818.   # ● 光标的移動可能判定
  1819.   #--------------------------------------------------------------------------
  1820.   def cursor_movable?
  1821.     return false if (not visible)
  1822.     return true
  1823.   end
  1824.   #--------------------------------------------------------------------------
  1825.   # ● 光标向右移動
  1826.   #--------------------------------------------------------------------------
  1827.   def cursor_right
  1828.     increment
  1829.     battler = @enemy_sprites[@index].battler
  1830.     while ! (battler.exist? && (! battler.hidden))
  1831.       increment
  1832.       battler = @enemy_sprites[@index].battler
  1833.     end
  1834.   end
  1835.  
  1836.   def increment
  1837.     @index = (@index + 1) % @item_max
  1838.   end
  1839.   #--------------------------------------------------------------------------
  1840.   # ● 光标向左移動
  1841.   #--------------------------------------------------------------------------
  1842.   def cursor_left
  1843.     decrement
  1844.     battler = @enemy_sprites[@index].battler
  1845.     while ! (battler.exist? && (! battler.hidden))
  1846.       decrement
  1847.       battler = @enemy_sprites[@index].battler
  1848.     end
  1849.   end
  1850.  
  1851.   def decrement
  1852.     @index = (@index - 1 + @item_max) % @item_max
  1853.   end
  1854.  
  1855.   def auto_select
  1856.     battler = @enemy_sprites[@index].battler
  1857.     unless battler.exist? && (! battler.hidden)
  1858.       cursor_right
  1859.     end
  1860.   end
  1861. end
  1862.  
  1863. #==============================================================================
  1864. # ■ Scene_Battle
  1865. #------------------------------------------------------------------------------
  1866. #  世界树的迷宫的战斗场面。。
  1867. #==============================================================================
  1868. class Scene_Battle < Scene_Base
  1869.  
  1870.   #--------------------------------------------------------------------------
  1871.   # ● 戦闘開始的処理
  1872.   #--------------------------------------------------------------------------
  1873.   def process_battle_start
  1874.     @waiting = false
  1875.     @message_window.clear
  1876.     wait(10)
  1877.     if Saba::Sekaiju::SHOW_ENEMY_NAME_WHEN_ENEMY_APPEARS
  1878.       for name in $game_troop.enemy_names
  1879.         text = sprintf(Vocab::Emerge, name)
  1880.         $game_message.texts.push(text)
  1881.       end
  1882.     else
  1883.       if enemy_count <= 1
  1884.         text = Saba::Sekaiju::MESSAGE_WHEN_ENEMY_APPEARS
  1885.       else
  1886.         text = Saba::Sekaiju::MESSAGE_WHEN_ENEMIES_APPEAR
  1887.       end
  1888.       $game_message.texts.push(text)
  1889.     end
  1890.     if $game_troop.preemptive
  1891.       text = sprintf(Vocab::Preemptive, $game_party.name)
  1892.       $game_message.texts.push(text)
  1893.     elsif $game_troop.surprise
  1894.       text = sprintf(Vocab::Surprise, $game_party.name)
  1895.       $game_message.texts.push(text)
  1896.     end
  1897.     wait_for_message
  1898.     @message_window.clear
  1899.     make_escape_ratio
  1900.     process_battle_event
  1901.     start_party_command_selection
  1902.   end
  1903.   def enemy_count
  1904.     n = 0
  1905.     for enemy in $game_troop.members
  1906.       n += 1 unless enemy.hidden
  1907.     end
  1908.     return n
  1909.   end
  1910.   #--------------------------------------------------------------------------
  1911.   # ● 戦闘行動的処理
  1912.   #--------------------------------------------------------------------------
  1913.   alias saba_sekaiju_process_action process_action
  1914.   def process_action
  1915.     saba_sekaiju_process_action
  1916.     @enemy_state_sprite.refresh
  1917.   end
  1918.   #--------------------------------------------------------------------------
  1919.   # ● 勝利的処理 ◆◆◆ 改造 ◆◆◆
  1920.   #--------------------------------------------------------------------------
  1921.   def process_victory
  1922.     @message_window.visible = true
  1923.     RPG::BGM.stop
  1924. #~     $game_system.battle_end_me.play
  1925.     unless $BTEST
  1926.       Audio.bgm_play("Audio/BGM/DDS1_12", 80, 100)
  1927. #~       $game_temp.map_bgm.play
  1928. #~       $game_temp.map_bgs.play
  1929.     end
  1930.     @message_window.max_line = Saba::Sekaiju::VICTORY_MESSAGE_LINES
  1931.     display_exp_and_gold
  1932.     # 虚拟战斗如果不是
  1933.     unless $game_switches[105]
  1934.       display_mag           # MAG取得表示
  1935.       display_drop_items
  1936.       #display_level_up     # 「角色毎にレベルアップ対策」と的連携
  1937.       RPG::BGM.stop
  1938.     end
  1939.     battle_end(0)
  1940.   end
  1941.  
  1942.   alias saba_sekai_dispose_info_viewport dispose_info_viewport
  1943.   def dispose_info_viewport
  1944.     @enemy_damage_sprite.dispose
  1945.     @enemy_state_sprite.dispose
  1946.     @actor_viewport.dispose
  1947.     @face_sprite.dispose
  1948.     @help_window.dispose unless @help_window == nil
  1949.     @turn_sprite.dispose
  1950.     @turn_window.dispose
  1951.     saba_sekai_dispose_info_viewport
  1952.   end
  1953.   #--------------------------------------------------------------------------
  1954.   # ● 獲得的 経験値 和 所持金 的表示
  1955.   # 信息行两行的,胜利信息被删除, 只表示EXP画面和金钱,。
  1956.   #--------------------------------------------------------------------------
  1957.   def display_exp_and_gold
  1958.     exp = $game_troop.exp_total
  1959.     gold = $game_troop.gold_total
  1960.     $game_party.gain_gold(gold)
  1961.     text = sprintf(Vocab::Victory, $game_party.name)
  1962.     if exp > 0
  1963.       text = sprintf(Vocab::ObtainExp, exp)
  1964.       $game_message.texts.push('\.' + text)
  1965.     end
  1966.     if gold > 0
  1967.       text = sprintf(Vocab::ObtainGold, gold, Vocab::gold)
  1968.       $game_message.texts.push('\.' + text)
  1969.     end
  1970.     wait_for_message
  1971.   end
  1972.  
  1973.   #--------------------------------------------------------------------------
  1974.   # ● 角色指令選択的更新
  1975.   #--------------------------------------------------------------------------
  1976. #~   alias saba_sekai_update_actor_command_selection update_actor_command_selection
  1977. #~   def update_actor_command_selection
  1978. #~     if Saba::Sekaiju::INFO_TYPE == 1
  1979. #~       return if update_state_window_visible_type1
  1980. #~     end
  1981.  
  1982. #~     
  1983. #~     if Input.trigger?(Input::B)
  1984. #~       return if @actor_index == 0
  1985. #~     end
  1986. #~     if Input.trigger?(Input::L)
  1987. #~       if Saba::Sekaiju::AUTO_BATTLE_ENABLED
  1988. #~         Sound.play_decision
  1989. #~         auto_battle
  1990. #~         return
  1991. #~       end
  1992. #~     end
  1993. #~     
  1994. #~     if $imported["SeparationCommand"]
  1995. #~       if Input.trigger?(Input::C)
  1996. #~         index = @actor_command_window.index
  1997. #~         case index
  1998. #~         when @actor_command_window.escape_index     # 逃走
  1999. #~           set_escape_action
  2000. #~           return
  2001. #~         when @actor_command_window.guard_index      # 防御
  2002. #~           set_guard_action
  2003. #~           return
  2004. #~         end
  2005. #~       end
  2006. #~     else
  2007. #~       if Input.trigger?(Input::C)
  2008. #~         case @actor_command_window.index
  2009. #~         when 2  # 防御  wait放入只是为了想重新定义。。
  2010. #~           set_guard_action
  2011. #~           return
  2012. #~         when 4  # 逃走
  2013. #~           set_escape_action
  2014. #~           return
  2015. #~         end
  2016. #~       end
  2017. #~     end
  2018. #~     saba_sekai_update_actor_command_selection
  2019. #~   end
  2020.  
  2021.  
  2022.   def update_state_window_visible_type1
  2023.     if @state_mode
  2024.       if Input.trigger?(Input::A) || Input.trigger?(Input::B) || Input.trigger?(Input::C)
  2025.         close_state_window
  2026.         return true
  2027.       end
  2028.     else
  2029.       if Input.trigger?(Input::A)
  2030.         start_state_mode
  2031.         return true
  2032.       end
  2033.     end
  2034.     return false
  2035.   end
  2036.  
  2037.   def start_state_mode
  2038.     case Saba::Sekaiju::INFO_TYPE
  2039.       when 0
  2040.         return
  2041.       when 1
  2042.         @state_window = Window_State.new
  2043.         @state_mode = true
  2044.       when 2
  2045.         @state_mode = true
  2046.         @status_window.show_all_states
  2047.         @enemy_state_sprite.visible = true
  2048.     end
  2049.   end
  2050.  
  2051.   def update_state_window
  2052.  
  2053.     if Input.trigger?(Input::B)
  2054.       close_state_window
  2055.     end
  2056.     if Input.trigger?(Input::C)
  2057.       close_state_window
  2058.     end
  2059.   end
  2060.  
  2061.   def close_state_window
  2062.     return unless @state_mode
  2063.  
  2064.     case Saba::Sekaiju::INFO_TYPE
  2065.       when 1
  2066.         if @state_window != nil
  2067.            @state_window.dispose
  2068.            @state_window = nil
  2069.         end
  2070.         @state_mode = false
  2071.       when 2
  2072.         @state_mode = false
  2073.         @status_window.hide_all_states
  2074.         @enemy_state_sprite.visible = false
  2075.     end
  2076.  
  2077.   end
  2078.  
  2079.   def set_escape_action
  2080. #~     if $game_troop.can_escape
  2081.     if $game_troop.can_escape || @active_battler.id >= 10 # ◆ 改造 仲魔的话就一定实行
  2082.       Sound.play_decision
  2083.       @active_battler.action.set_escape
  2084.       wait(10)
  2085.       next_actor
  2086.     else
  2087.       Sound.play_buzzer
  2088.     end
  2089.   end
  2090.  
  2091.   def set_guard_action
  2092.     Sound.play_decision
  2093.     @active_battler.action.set_guard
  2094.     wait(10)
  2095.     next_actor
  2096.   end
  2097.  
  2098.   #--------------------------------------------------------------------------
  2099.   # ● 回合終了
  2100.   #--------------------------------------------------------------------------
  2101.   alias saba_sekaiju_turn_end turn_end
  2102.   def turn_end
  2103.     saba_sekaiju_turn_end
  2104.     @turn_sprite.increase_turn
  2105.   end
  2106.  
  2107.   def auto_battle
  2108.     for actor in $game_party.members
  2109.       actor.make_action
  2110.     end
  2111.     if Saba::Sekaiju::INFO_TYPE == 1
  2112.       close_state_window
  2113.     end
  2114.     start_main
  2115.   end
  2116.   #--------------------------------------------------------------------------
  2117.   # ● 情報表示视窗口的作成 ◆◆◆ 改造 ◆◆◆
  2118.   #--------------------------------------------------------------------------
  2119.   def create_info_viewport
  2120.     @info_viewport = Viewport.new(0, 0, Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  2121.     @info_viewport.z = Saba::Sekaiju::STATUS_WINDOW_Z
  2122.  
  2123.     @actor_command_window = Window_ActorCommand.new
  2124.  
  2125.     @actor_viewport = Viewport.new(0, 0, Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  2126.     @actor_viewport.ox = 576
  2127.     @actor_viewport.z = Saba::Sekaiju::FACE_Z
  2128.     @actor_command_window.viewport = @actor_viewport
  2129.     @face_sprite = FaceSprite.new(@actor_viewport)
  2130.     @status_window = ActorWindowSet.new(@face_sprite)
  2131.     @status_window.viewport = @info_viewport
  2132.     @status_window.show_face = true
  2133.     @actor_command_window.x = Saba::Sekaiju::COMMAND_WINDOW_X
  2134.     @actor_command_window.y = Saba::Sekaiju::COMMAND_WINDOW_Y
  2135.     @actor_command_window.visible = false
  2136.     @info_viewport.visible = true
  2137.     #◆ 改造 ◆----------------------------------------------------------------
  2138.     @message_window.y = 288   # 信息窗口位置
  2139.     @message_window.z = 400   # 信息窗口最前面
  2140.     #--------------------------------------------------------------------------
  2141.     @party_command_window = Window_Base.new(-100, 0, 36, 33)
  2142.     @party_command_window.active = false
  2143.     @enemy_state_sprite = Sprite_EnemyState.new(@info_viewport, @spriteset.enemy_sprites)
  2144.     @enemy_damage_sprite = Sprite_EnemyDamage.new(@info_viewport, @spriteset.enemy_sprites)
  2145.     @enemy_state_sprite.visible = Saba::Sekaiju::DISPLAY_ALWAYS
  2146.     @turn_sprite = Sprite_Turn.new(@info_viewport)
  2147.     @turn_sprite.visible = Saba::Sekaiju::show_turn_count?
  2148.     if Saba::Sekaiju::TURN_WINDOW_ALIGN == 0
  2149.       @turn_window = Window_Base.new(0, Saba::Sekaiju::TURN_WINDOW_Y, Saba::Sekaiju::TURN_WINDOW_WIDTH, Saba::Sekaiju::TURN_WINDOW_HEIGHT)
  2150.     else
  2151.       @turn_window = Window_Base.new(Saba::Sekaiju::WINDOW_WIDTH - Saba::Sekaiju::TURN_WINDOW_WIDTH, Saba::Sekaiju::TURN_WINDOW_Y, Saba::Sekaiju::TURN_WINDOW_WIDTH, Saba::Sekaiju::TURN_WINDOW_HEIGHT)
  2152.     end
  2153.     @turn_window.visible = Saba::Sekaiju::SHOW_TURN_WINDOW && Saba::Sekaiju::show_turn_count?
  2154.     @turn_window.viewport = @info_viewport
  2155.     @turn_sprite.z = 380
  2156.   end
  2157.   #--------------------------------------------------------------------------
  2158.   # ● 状态変化的表示
  2159.   #     target : 対象者
  2160.   #     obj    : 技能或物品
  2161.   #--------------------------------------------------------------------------
  2162.   def display_state_changes(target, obj = nil)
  2163.     return if target.missed or target.evaded
  2164.     return unless target.states_active?
  2165.     if @message_window.line_number < 2
  2166.       @message_window.add_instant_text("")
  2167.     end
  2168.     display_added_states(target, obj)
  2169.     display_removed_states(target, obj)
  2170.     display_remained_states(target, obj)
  2171.     if @message_window.last_instant_text.empty?
  2172.       @message_window.back_one
  2173.     else
  2174.       wait(10)
  2175.     end
  2176.     @status_window.refresh
  2177.   end
  2178.   #--------------------------------------------------------------------------
  2179.   # ● 落空的表示
  2180.   #     target : 対象者
  2181.   #     obj    : 技能或物品
  2182.   #--------------------------------------------------------------------------
  2183.   alias saba_sekaju_display_miss display_miss
  2184.   def display_miss(target, obj = nil)
  2185.     if target.actor?
  2186.       @status_window.display_miss(target)
  2187.     else
  2188.       @enemy_damage_sprite.display_miss(target)
  2189.     end
  2190.     saba_sekaju_display_miss(target, obj)
  2191.   end
  2192.   #--------------------------------------------------------------------------
  2193.   # ● 回避的表示
  2194.   #     target : 対象者
  2195.   #     obj    : 技能或物品
  2196.   #--------------------------------------------------------------------------
  2197.   alias saba_sekaju_display_evasion display_evasion
  2198.   def display_evasion(target, obj = nil)
  2199.     if target.actor?
  2200.       @status_window.display_miss(target)
  2201.     else
  2202.       @enemy_damage_sprite.display_miss(target)
  2203.     end
  2204.     saba_sekaju_display_evasion(target, obj)
  2205.   end
  2206.   #--------------------------------------------------------------------------
  2207.   # ● 失敗的表示
  2208.   #     target : 対象者 (角色)
  2209.   #     obj    : 技能或物品
  2210.   #--------------------------------------------------------------------------
  2211.   alias saba_sekaju_display_failure display_failure
  2212.   def display_failure(target, obj)
  2213.     return if @show_damage
  2214.     if target.actor?
  2215.       @status_window.display_miss(target)
  2216.     else
  2217.       @enemy_damage_sprite.display_miss(target)
  2218.     end
  2219.     saba_sekaju_display_failure(target, obj)
  2220.   end
  2221.   #--------------------------------------------------------------------------
  2222.   # ● HP 受创点表示
  2223.   #     target : 対象者
  2224.   #     obj    : 技能或物品
  2225.   #--------------------------------------------------------------------------
  2226.   alias saba_sekaju_display_hp_damage display_hp_damage
  2227.   def display_hp_damage(target, obj = nil)
  2228.     @show_damage = true unless target.hp_damage == 0
  2229.     if target.actor?
  2230.       @status_window.display_hp_damage(target)
  2231.     else
  2232.       @enemy_damage_sprite.display_hp_damage(target, obj)
  2233.     end
  2234.     saba_sekaju_display_hp_damage(target, obj)
  2235.   end
  2236.   #--------------------------------------------------------------------------
  2237.   # ● 技能選択的開始
  2238.   #--------------------------------------------------------------------------
  2239.   def start_skill_selection
  2240.     @skill_window = Window_BattleSkill.new(Saba::Sekaiju::SKILL_WINDOW_X, Saba::Sekaiju::SKILL_WINDOW_Y, Saba::Sekaiju::SKILL_WINDOW_WIDTH, Saba::Sekaiju::SKILL_WINDOW_HEIGHT, @active_battler)
  2241.     @skill_window.help_window = @help_window
  2242.     @skill_window.viewport = @actor_viewport
  2243.     @actor_command_window.active = false
  2244.     adjust_skill_window_size if $imported["HelpExtension"] == true
  2245.   end
  2246.   #--------------------------------------------------------------------------
  2247.   # ● 戦闘処理的実行開始
  2248.   #--------------------------------------------------------------------------
  2249.   def start_main
  2250.     $game_troop.increase_turn
  2251.     unless @help_window == nil
  2252.       @help_window.dispose
  2253.       @help_window = nil
  2254.     end
  2255.     @message_window.visible = true
  2256.     @actor_command_window.active = false
  2257.     @actor_command_window.visible = false
  2258.     @status_window.index = @actor_index = -1
  2259.     @active_battler = nil
  2260.     @message_window.clear
  2261.     @show_damage = false
  2262.     $game_troop.make_actions
  2263.     make_action_orders
  2264.     wait(20)
  2265.   end
  2266.   #--------------------------------------------------------------------------
  2267.   # ● 队友指令選択的開始
  2268.   #--------------------------------------------------------------------------
  2269.   def start_party_command_selection
  2270.     return if judge_win_loss
  2271.     if $game_temp.in_battle
  2272.       @status_window.refresh
  2273.       @status_window.index = @actor_index = -1
  2274.       @active_battler = nil
  2275.       @info_viewport.visible = true
  2276.       @message_window.visible = false
  2277.       @actor_command_window.active = true
  2278.       @actor_command_window.visible = true
  2279.       @help_window = Window_TargetName.new if @help_window == nil
  2280.       @help_window.set_text(Saba::Sekaiju::COMMAND_MESSAGE)
  2281.       $game_party.clear_actions
  2282.       if $game_troop.surprise or not $game_party.inputable?
  2283.         start_main
  2284.       else
  2285.         @status_window.index = @actor_index = -1
  2286.         next_actor
  2287.       end
  2288.     end
  2289.   end
  2290.   #--------------------------------------------------------------------------
  2291.   # ● 技能選択的終了
  2292.   #--------------------------------------------------------------------------
  2293.   alias saba_sekaiju_end_skill_selection end_skill_selection
  2294.   def end_skill_selection
  2295.     saba_sekaiju_end_skill_selection
  2296.     @help_window = Window_TargetName.new if @help_window == nil
  2297.     @help_window.set_text(Saba::Sekaiju::COMMAND_MESSAGE) unless @actor_index == $game_party.members.size-1
  2298.   end
  2299.   #--------------------------------------------------------------------------
  2300.   # ● 物品選択的終了
  2301.   #--------------------------------------------------------------------------
  2302.   alias saba_sekaiju_end_item_selection end_item_selection
  2303.   def end_item_selection
  2304.     saba_sekaiju_end_item_selection
  2305.     @help_window = Window_TargetName.new if @help_window == nil
  2306.     @help_window.set_text(Saba::Sekaiju::COMMAND_MESSAGE) unless @actor_index == $game_party.members.size-1
  2307.   end
  2308.   #--------------------------------------------------------------------------
  2309.   # ● 角色指令選択的開始
  2310.   #--------------------------------------------------------------------------
  2311.   alias saba_sekaiju_start_actor_command_selection start_actor_command_selection
  2312.   def start_actor_command_selection
  2313.     saba_sekaiju_start_actor_command_selection
  2314.     @help_window.set_text(Saba::Sekaiju::COMMAND_MESSAGE)
  2315.   end
  2316.   #--------------------------------------------------------------------------
  2317.   # ● 物品選択的開始
  2318.   #--------------------------------------------------------------------------
  2319.   def start_item_selection
  2320.     @item_window = Window_BattleItem.new(Saba::Sekaiju::ITEM_WINDOW_X, Saba::Sekaiju::ITEM_WINDOW_Y, Saba::Sekaiju::ITEM_WINDOW_WIDTH, Saba::Sekaiju::ITEM_WINDOW_HEIGHT)
  2321.     @item_window.help_window = @help_window
  2322.     @item_window.viewport = @actor_viewport
  2323.     @actor_command_window.active = false
  2324.     adjust_item_window_size if $imported["HelpExtension"] == true
  2325.   end
  2326.   #--------------------------------------------------------------------------
  2327.   # ● 戦闘行動的実行 : 攻撃
  2328.   #--------------------------------------------------------------------------
  2329.   alias saba_sekaiju_execute_action execute_action
  2330.   def execute_action
  2331.     select_active_actor
  2332.  
  2333.     @show_damage = false
  2334.     saba_sekaiju_execute_action
  2335.   end
  2336.   #--------------------------------------------------------------------------
  2337.   # ● 行動中的战斗選択状態。
  2338.   #--------------------------------------------------------------------------
  2339.   def select_active_actor
  2340.     return unless Saba::Sekaiju::SELECT_ACTIVE_ACTOR
  2341.     unless @active_battler.actor?
  2342.       @status_window.index = -1
  2343.       return
  2344.     end
  2345.     @status_window.index = $game_party.battle_members.index(@active_battler)
  2346.     @face_sprite.appear = false
  2347.   end
  2348.   def prior_actor
  2349.     loop do
  2350.       if @actor_index == 0
  2351.         break
  2352.       end
  2353.       @actor_index -= 1
  2354.       @active_battler = $game_party.members[@actor_index]
  2355.       next if @active_battler.auto_battle
  2356.       break if @active_battler.inputable?
  2357.     end
  2358.     next_actor unless @active_battler.inputable?
  2359.     @status_window.index = @actor_index
  2360.     start_actor_command_selection
  2361.   end
  2362.   #--------------------------------------------------------------------------
  2363.   # ● 対象角色対象選択的開始
  2364.   #--------------------------------------------------------------------------
  2365.   def start_target_actor_selection
  2366.     wait(8)
  2367.     @face_sprite.hide = true
  2368.     @target_actor_window = @status_window
  2369.     @status_window.show_face = false
  2370.     @status_window.index = 0
  2371.     @status_window.active = true
  2372.     @actor_command_window.active = false
  2373.   end
  2374.   #--------------------------------------------------------------------------
  2375.   # ● 対象角色選択的終了
  2376.   #--------------------------------------------------------------------------
  2377.   def end_target_actor_selection(update_index = false)
  2378.     @face_sprite.appear = true
  2379.     @target_actor_window = nil
  2380.     @status_window.show_face = true
  2381.     if update_index
  2382.       @status_window.index = @actor_index
  2383.     end
  2384.     @status_window.active = false
  2385.     @wait_for_actor = false
  2386.   end
  2387.   #--------------------------------------------------------------------------
  2388.   # ● 対象角色選択的更新
  2389.   #--------------------------------------------------------------------------
  2390.   def update_target_actor_selection
  2391.     #@status_window.update
  2392.     if Input.trigger?(Input::B)
  2393.       Sound.play_cancel
  2394.       end_target_actor_selection(true)
  2395.     elsif Input.trigger?(Input::C)
  2396.       Sound.play_decision
  2397.       @active_battler.action.target_index = @status_window.index
  2398.       end_skill_selection
  2399.       end_item_selection
  2400.       end_target_actor_selection
  2401.       @help_window.set_text("") if @actor_index == $game_party.members.size-1
  2402.       next_actor
  2403.  
  2404.     end
  2405.   end
  2406.   #--------------------------------------------------------------------------
  2407.   # ● 一定時間等待 ◆◆◆ 改造 ◆◆◆
  2408.   #     duration : 等待時間 (框架数)
  2409.   #     no_fast  : 早送無効
  2410.   #    场景类的 update 処理的中等待为了挂的方法。
  2411.   #    update は 1 框架に 1 回呼暴露的原则,但战斗中处理的流动
  2412.   #    难以把握。因此,例外的使用方法。。
  2413.   #--------------------------------------------------------------------------
  2414.   def wait(duration, no_fast = false)
  2415.     @waiting = true
  2416.     duration /= 30 if Input.press?(Input::L)# || Input.press?(Input::B) # ◆時間短縮
  2417.     for i in 0...duration
  2418.       update_basic
  2419.       update_info_viewport
  2420.       break if not no_fast and i >= duration / 2 and show_fast?
  2421.     end
  2422.     @waiting = false
  2423. #~     @waiting = true
  2424. #~     duration_for_loop = duration
  2425. #~     duration_for_loop /= 2 if Scene_Battle.method_defined?("show_fasteststr06?")
  2426. #~     for i in 0...duration_for_loop
  2427. #~       update_basic
  2428. #~       update_info_viewport
  2429. #~       if Scene_Battle.method_defined?("show_fasteststr06?")
  2430. #~         break if not no_fast and i >= duration / STRRGSS2::STR06FAST and show_fast?
  2431. #~         break if show_fasteststr06?
  2432. #~       else
  2433. #~         break if not no_fast and i >= duration / 2 and show_fast?
  2434. #~       end
  2435. #~     end
  2436. #~     @waiting = false
  2437. #~     if $imported["AdjustBattleWait"] == true
  2438. #~       for sprite in @spriteset.enemy_sprites
  2439. #~         sprite.clear_animation if sprite.effect_type == 2
  2440. #~       end
  2441. #~     end
  2442.   end
  2443.   #--------------------------------------------------------------------------
  2444.   # ● 信息表示结束前等待
  2445.   #--------------------------------------------------------------------------
  2446.   def wait_for_message
  2447.     @message_window.update
  2448.     while $game_message.visible
  2449.       update_basic
  2450.       update_info_viewport
  2451.     end
  2452.   end
  2453.   #--------------------------------------------------------------------------
  2454.   # ● 动画表示结束前等待
  2455.   #--------------------------------------------------------------------------
  2456.   def wait_for_animation
  2457.     while @spriteset.animation?
  2458.       update_basic
  2459.       update_info_viewport
  2460.       if Scene_Battle.method_defined?("show_fasteststr06?")
  2461.         break if show_fasteststr06?
  2462.       end
  2463.     end
  2464.   end
  2465.   #--------------------------------------------------------------------------
  2466.   # ● 情報表示视窗口的更新
  2467.   #--------------------------------------------------------------------------
  2468.   def update_info_viewport
  2469.     unless @state_mode && (Saba::Sekaiju::INFO_TYPE == 1)
  2470.       @actor_command_window.update unless @waiting
  2471.     end
  2472.     if Saba::Sekaiju::INFO_TYPE == 2
  2473.       unless Saba::Sekaiju::DISPLAY_ALWAYS
  2474.         @enemy_state_sprite.visible = @status_window.state_mode
  2475.       end
  2476.     end
  2477.     @status_window.update
  2478.     @enemy_damage_sprite.update
  2479.     @enemy_state_sprite.update
  2480.     if @face_sprite.hide
  2481.       if @actor_viewport.ox < 576
  2482.         @actor_viewport.ox += Saba::Sekaiju::DISTANCE_PER_FRAME
  2483.       else
  2484.         @face_sprite.hide = false
  2485.       end
  2486.     elsif @face_sprite.appear
  2487.       if @actor_viewport.ox > 0
  2488.         @actor_viewport.ox -= Saba::Sekaiju::DISTANCE_PER_FRAME
  2489.       else
  2490.         @face_sprite.appear = false
  2491.       end
  2492.     end
  2493.   end
  2494.   #--------------------------------------------------------------------------
  2495.   # ● 物品的決定 ◆◆◆ 改造 ◆◆◆
  2496.   #--------------------------------------------------------------------------
  2497.   def determine_item
  2498.     @active_battler.action.set_item(@item.id)
  2499.     @item_window.active = false
  2500.     if @item.need_selection?
  2501.       if @item.for_opponent?
  2502.         start_target_enemy_selection
  2503.       else
  2504.         start_target_actor_selection
  2505.       end
  2506.     else
  2507.       wait(8)
  2508.       end_item_selection
  2509.       end_target_actor_selection(true) # 光标消失
  2510.       next_actor
  2511.     end
  2512.   end
  2513.   #--------------------------------------------------------------------------
  2514.   # ● 技能的決定
  2515.   #--------------------------------------------------------------------------
  2516.   def determine_skill
  2517.     @active_battler.action.set_skill(@skill.id)
  2518.     @skill_window.active = false
  2519.     if @skill.need_selection?
  2520.       if @skill.for_opponent?
  2521.         start_target_enemy_selection
  2522.       else
  2523.         start_target_actor_selection
  2524.       end
  2525.     else
  2526.       wait(8)
  2527.       end_skill_selection
  2528.       next_actor
  2529.     end
  2530.   end
  2531.   #--------------------------------------------------------------------------
  2532.   # ● 対象敵角色選択的開始
  2533.   #--------------------------------------------------------------------------
  2534.   def start_target_enemy_selection
  2535.     wait(8)
  2536.     @target_enemy_window = Sprite_TargetEnemySelection.new(@info_viewport, @spriteset.enemy_sprites)
  2537.     @target_enemy_window.y = @info_viewport.rect.y
  2538.     @help_window = Window_TargetName.new if @help_window == nil
  2539.     if $imported["HelpExtension"] == true
  2540.       @help_window.height = Window_Base::WLH + 32
  2541.       @help_window.create_contents
  2542.     end
  2543.     @target_enemy_window.help_window = @help_window
  2544.     @actor_command_window.active = false
  2545.     @face_sprite.hide = true
  2546.   end
  2547.   #--------------------------------------------------------------------------
  2548.   # ● 対象敵角色選択的更新
  2549.   #--------------------------------------------------------------------------
  2550.   def update_target_enemy_selection
  2551.     @target_enemy_window.update
  2552.     if Input.trigger?(Input::B)
  2553.       Sound.play_cancel
  2554.       end_target_enemy_selection
  2555.     elsif Input.trigger?(Input::C)
  2556.       Sound.play_decision
  2557.       @active_battler.action.target_index = @target_enemy_window.enemy.index
  2558.       end_skill_selection
  2559.       end_item_selection
  2560.       end_target_enemy_selection(@actor_index == $game_party.members.size-1)
  2561.       next_actor
  2562.     end
  2563.   end
  2564.   #--------------------------------------------------------------------------
  2565.   # ● 対象敵角色選択的終了
  2566.   #--------------------------------------------------------------------------
  2567.   def end_target_enemy_selection(hide_command = false)
  2568.     @target_enemy_window.dispose
  2569.     @target_enemy_window = nil
  2570.  
  2571.     activate_actor_command_wiondow
  2572.  
  2573.     unless @item_window == nil
  2574.       adjust_item_window_size if $imported["HelpExtension"] == true
  2575.     end
  2576.     unless @skill_window == nil
  2577.       adjust_skill_window_size if $imported["HelpExtension"] == true
  2578.     end
  2579.  
  2580.     unless hide_command
  2581.  
  2582.       @face_sprite.appear = true
  2583.       @help_window.set_text(Saba::Sekaiju::COMMAND_MESSAGE)
  2584.     else
  2585.  
  2586.       @help_window.set_text("")
  2587.     end
  2588.     @wait_for_actor = false
  2589.   end
  2590.   #--------------------------------------------------------------------------
  2591.   # ● 角色指令窗口的選択状態。
  2592.   #--------------------------------------------------------------------------
  2593.   def activate_actor_command_wiondow
  2594.     if $imported["SeparationCommand"]
  2595.       if @actor_command_window.index == @actor_command_window.attack_index
  2596.         @actor_command_window.active = true
  2597.       end
  2598.       if @actor_command_window.own_index_range == nil
  2599.         return
  2600.       end
  2601.       if @actor_command_window.own_index_range.include?(@actor_command_window.index)
  2602.         own_index = @actor_command_window.index - @actor_command_window.own_start_index
  2603.         command = @active_battler.own_commands[own_index]
  2604.         unless command == nil
  2605.           case command.kind
  2606.             when Game_OwnCommand::KIND_SKILL  # 技能
  2607.             skill = command.skill
  2608.             @actor_command_window.active = true if skill.need_selection?
  2609.           end
  2610.         end
  2611.       end
  2612.     else
  2613.       if @actor_command_window.index == 0
  2614.         @actor_command_window.active = true
  2615.       end
  2616.     end
  2617.   end
  2618.   #--------------------------------------------------------------------------
  2619.   # ● 戦闘行動的実行 : 逃走
  2620.   #--------------------------------------------------------------------------
  2621.   alias saba_sekaiju_execute_action_escape execute_action_escape
  2622.   def execute_action_escape
  2623.     if @active_battler.actor?
  2624.       text = sprintf(Vocab::EscapeStart, @active_battler.name)
  2625.       @message_window.add_instant_text(text)
  2626.       Sound.play_escape
  2627.       if $game_troop.preemptive
  2628.         success = true
  2629.       else
  2630.         success = (rand(100) < @escape_ratio / Saba::Sekaiju::ESCAPE_RATIO_PENALTY)
  2631.       end
  2632.       wait(45)
  2633.       if success
  2634.         battle_end(1)
  2635.       else
  2636.         @escape_ratio += 10
  2637.         @message_window.add_instant_text(Vocab::EscapeFailure)
  2638.         wait(45)
  2639.       end
  2640.     else
  2641.       saba_sekaiju_execute_action_escape
  2642.     end
  2643.   end
  2644.   def refresh_status_window
  2645.     @status_window.dispose
  2646.     @status_window = ActorWindowSet.new(@face_sprite)
  2647.     @status_window.viewport = @info_viewport
  2648.     @status_window.show_face = true
  2649.   end
  2650.   #--------------------------------------------------------------------------
  2651.   # ○ 固有指令処理 KGC Software様的個別戦闘指令的競合回避
  2652.   #     index : 指令 index
  2653.   #--------------------------------------------------------------------------
  2654.   def process_own_command(index)
  2655.     command = @active_battler.own_commands[index]
  2656.     if command == nil
  2657.       Sound.play_buzzer
  2658.       return
  2659.     end
  2660.  
  2661.     # 指令性种类对应的处理
  2662.     case command.kind
  2663.     when Game_OwnCommand::KIND_SKILL  # 技能
  2664.       @input_own_command = true
  2665.       # 假人的窗口作成
  2666.       #@help_window = Window_Help.new
  2667.       #@help_window.visible = false
  2668.       @skill_window = Window_Skill.new(0, 0, 64, 64, @active_battler)
  2669.       @skill_window.active = false
  2670.       @skill_window.visible = false
  2671.       # 技能选择的可见
  2672.       @skill = command.skill
  2673.       if @active_battler.skill_can_use?(@skill)
  2674.         Sound.play_decision
  2675.         determine_skill
  2676.       else
  2677.         Sound.play_buzzer
  2678.       end
  2679.       # 假勿的窗口的破棄
  2680.       #@help_window.dispose  if @help_window != nil
  2681.       @skill_window.dispose if @skill_window != nil
  2682.       #@help_window = nil
  2683.       @skill_window = nil
  2684.     else                              # 不明的指令
  2685.       Sound.play_buzzer
  2686.     end
  2687.     @input_own_command = false
  2688.   end
  2689.   #--------------------------------------------------------------------------
  2690.   # ● 物品窗口的尺寸調整
  2691.   #--------------------------------------------------------------------------
  2692.   def adjust_item_window_size
  2693.     @help_window.row_max = KGC::HelpExtension::ROW_MAX
  2694.     @item_window.y = @help_window.height
  2695.     @item_window.height = Graphics.height -
  2696.       (@help_window.height + @status_window.height)
  2697.       @item_window.y += 4
  2698.     @item_window.refresh
  2699.   end
  2700.   #--------------------------------------------------------------------------
  2701.   # ● 技能窗口的尺寸調整
  2702.   #--------------------------------------------------------------------------
  2703.   def adjust_skill_window_size
  2704.     @help_window.row_max = KGC::HelpExtension::ROW_MAX
  2705.     @skill_window.y = @help_window.height
  2706.     @skill_window.height = Graphics.height -
  2707.       (@help_window.height + @status_window.height)
  2708.       @skill_window.y += 4
  2709.     @skill_window.refresh
  2710.   end
  2711. end
  2712.  
  2713.  
  2714. class Sprite_Battler < Sprite_Base
  2715.   attr_accessor :effect_type
  2716.   def clear_animation
  2717.     @effect_type = 0
  2718.     @effect_duration = 0
  2719.     update_blink
  2720.   end
  2721. end
  2722. #==============================================================================
  2723. # ■ Game_BattleAction
  2724. #------------------------------------------------------------------------------
  2725. #  角色逃走用的。
  2726. #==============================================================================
  2727. class Game_BattleAction
  2728.   def set_escape
  2729.     @kind = 0
  2730.     @basic = 2
  2731.   end
  2732. end
  2733.  
  2734. #==============================================================================
  2735. # ■ Spriteset_Battle
  2736. #------------------------------------------------------------------------------
  2737. #  敌人精灵取得。
  2738. #==============================================================================
  2739. class Spriteset_Battle
  2740.   attr_accessor :enemy_sprites
  2741.   #--------------------------------------------------------------------------
  2742.   # ● 角色精灵的更新 ◆◆◆ 改造 ◆◆◆
  2743.   #--------------------------------------------------------------------------
  2744.   alias saba_sekai_update_actors update_actors
  2745.   def update_actors
  2746.     @actor_sprites[4].battler = $game_party.members[4]
  2747.     @actor_sprites[5].battler = $game_party.members[5]
  2748.     saba_sekai_update_actors
  2749.   end
  2750.   alias saba_sekai_create_actors create_actors
  2751.   def create_actors
  2752.     saba_sekai_create_actors
  2753.     @actor_sprites.push(Sprite_Battler.new(@viewport8))
  2754.     @actor_sprites.push(Sprite_Battler.new(@viewport8))
  2755.   end
  2756. end
  2757.  
  2758. #==============================================================================
  2759. # ■ Game_Party
  2760. #------------------------------------------------------------------------------
  2761. #  
  2762. #==============================================================================
  2763. class Game_Party < Game_Unit
  2764.  
  2765.   MAX_MEMBERS = 6 unless $imported["LargeParty"]
  2766.  
  2767.   MAX_LINES = 3
  2768.   attr_accessor :fronts
  2769.   attr_accessor :backs
  2770.  
  2771.   alias saba_ranks_setup_starting_members setup_starting_members
  2772.   def setup_starting_members
  2773.     saba_ranks_setup_starting_members
  2774.     auto_arrange
  2775.     update_formation
  2776.   end
  2777.   #--------------------------------------------------------------------------
  2778.   # ● 前列、後列的メン条を全部初期化。
  2779.   #--------------------------------------------------------------------------
  2780.   def clear_formation
  2781.     @fronts = []
  2782.     @backs = []
  2783.   end
  2784.   #--------------------------------------------------------------------------
  2785.   # ● 前列的メン条追加。
  2786.   #--------------------------------------------------------------------------
  2787.   def add_front(actor)
  2788.     return if @fronts.include?(actor)
  2789.     if @fronts.size == 3
  2790.       add_back(actor)
  2791.       return
  2792.     end
  2793.     actor.position_in_ranks = @fronts.size
  2794.     actor.front = true
  2795.     @fronts.push(actor)
  2796.   end
  2797.   #--------------------------------------------------------------------------
  2798.   # ● 後列的メン条追加。
  2799.   #--------------------------------------------------------------------------
  2800.   def add_back(actor)
  2801.     return if @backs.include?(actor)
  2802.     if @backs.size == 3
  2803.       add_front(actor)
  2804.       return
  2805.     end
  2806.     actor.position_in_ranks = @backs.size
  2807.     actor.front = false
  2808.     @backs.push(actor)
  2809.   end
  2810.   #--------------------------------------------------------------------------
  2811.   # ● メン条を前排,后排的顺序交换。
  2812.   #--------------------------------------------------------------------------
  2813.   def update_actors
  2814.     @fronts = []
  2815.     @backs = []
  2816.     for actor in battle_members
  2817.       if actor.front?
  2818.         actor.position_in_ranks = @fronts.size
  2819.         @fronts.push(actor)
  2820.       else
  2821.         actor.position_in_ranks = @backs.size
  2822.         @backs.push(actor)
  2823.       end
  2824.     end
  2825.  
  2826.     $game_player.refresh
  2827.   end
  2828.  
  2829.   def update_formation
  2830.     @actors = []
  2831.     for actor in @fronts
  2832.       @actors.push(actor.id)
  2833.     end
  2834.     for actor in @backs
  2835.       @actors.push(actor.id)
  2836.     end
  2837.     pack
  2838.     $game_player.refresh
  2839.   end
  2840.   #--------------------------------------------------------------------------
  2841.   # ● メン条职业配合的自动配置。
  2842.   #--------------------------------------------------------------------------
  2843.   def auto_arrange
  2844.     @fronts = []
  2845.     @backs = []
  2846.  
  2847.     if Saba::Sekaiju::FORMATION_ENABLED
  2848.       for actor in members
  2849.         add_front(actor) if actor.class.position == 0
  2850.         add_back(actor) unless actor.class.position == 0
  2851.       end
  2852.     else
  2853.       size = members.size
  2854.       if size > 0
  2855.         add_front(members[0])
  2856.       end
  2857.       if size > 1
  2858.         add_front(members[1])
  2859.       end
  2860.       case size
  2861.       when 3
  2862.         add_back(members[2])
  2863.       when 4
  2864.         add_back(members[2])
  2865.         add_back(members[3])
  2866.       when 5
  2867.         add_front(members[2])
  2868.         add_back(members[3])
  2869.         add_back(members[4])
  2870.       when 6
  2871.         add_front(members[2])
  2872.         add_back(members[3])
  2873.         add_back(members[4])
  2874.         add_back(members[5])
  2875.       end
  2876.     end
  2877.   end
  2878.   #--------------------------------------------------------------------------
  2879.   # ● 如果没有前排,后排的人前排移动。
  2880.   #--------------------------------------------------------------------------
  2881.   def pack
  2882.     return if Saba::Sekaiju::ALLOW_EMPTY_FRONTS
  2883.     return unless @fronts.empty?
  2884.     for actor in @backs
  2885.       add_front(actor)
  2886.     end
  2887.     @backs = []
  2888.   end
  2889.   #--------------------------------------------------------------------------
  2890.   # ● メン条が全部前列、後列的任何配置是否被归还。
  2891.   #--------------------------------------------------------------------------
  2892.   def arranged?
  2893.     if @fronts == nil
  2894.       auto_arrange
  2895.     end
  2896.     return @fronts.size + @backs.size == members.size
  2897.   end
  2898.   #--------------------------------------------------------------------------
  2899.   # ● 角色追加。同时职业的位置决定自动前列,后排配置。 ◆ 改造 ◆ nil対策
  2900.   #--------------------------------------------------------------------------
  2901.   alias saba_sekaiju_add_actor add_actor
  2902.   def add_actor(actor_id)
  2903.     return if (@actors.size >= MAX_MEMBERS) || (@actors.include?(actor_id))
  2904.     saba_sekaiju_add_actor(actor_id)
  2905.     actor = $game_actors[actor_id]
  2906.     if Saba::Sekaiju::FORMATION_ENABLED
  2907.       if actor.class.position == nil
  2908.         add_back(actor)
  2909.       elsif actor.class.position == 0
  2910.         add_front(actor)
  2911.       else
  2912.         add_back(actor)
  2913.       end
  2914.       update_formation
  2915.     else
  2916.       auto_arrange
  2917.     end
  2918.     if $game_temp.in_battle
  2919.       $game_party.update_formation
  2920.       $scene.refresh_status_window
  2921.     end
  2922.   end
  2923.  
  2924.   #--------------------------------------------------------------------------
  2925.   # ● 角色离开 ◆◆◆ 改造 ◆◆◆ nil対策
  2926.   #     actor_id : 角色 ID
  2927.   #--------------------------------------------------------------------------
  2928.   alias saba_sekaiju_remove_actor remove_actor
  2929.   def remove_actor(actor_id)
  2930.     saba_sekaiju_remove_actor(actor_id)
  2931.     actor = $game_actors[actor_id]
  2932.     if Saba::Sekaiju::FORMATION_ENABLED
  2933.       if actor.class.position == nil
  2934.         @backs.delete(actor)
  2935.       elsif actor.class.position == 0
  2936.         @fronts.delete(actor)
  2937.       else
  2938.         @backs.delete(actor)
  2939.       end
  2940.       update_actors
  2941.     else
  2942.       auto_arrange
  2943.     end
  2944.     if $game_temp.in_battle
  2945.       $scene.refresh_status_window
  2946.     end
  2947.   end
  2948. end
  2949.  
  2950. #==============================================================================
  2951. # ■ Window_ActorCommand
  2952. #------------------------------------------------------------------------------
  2953. #  战斗画面,战斗和逃跑的选择窗口。逃跑指令追加。
  2954. #==============================================================================
  2955. class Window_ActorCommand < Window_Command
  2956.   #--------------------------------------------------------------------------
  2957.   # ● 对象初期化
  2958.   #--------------------------------------------------------------------------
  2959.   def initialize
  2960.     super(Saba::Sekaiju::COMMAND_WINDOW_WIDTH, [], 1, Saba::Sekaiju::COMMAND_COUNT)
  2961.     self.active = false
  2962.   end
  2963. if $imported["SeparationCommand"]
  2964.   #--------------------------------------------------------------------------
  2965.   # ○ 指令を作成
  2966.   #     actor : 角色
  2967.   #--------------------------------------------------------------------------
  2968.   alias saba_sekaiju_create_commands create_commands
  2969.   def create_commands
  2970.     saba_sekaiju_create_commands
  2971.     @actor.actor_commands.each { |c|
  2972.     case c
  2973.     when 10  # 逃走
  2974.         @command_index[:escape_command] = @commands.size
  2975.         @command_enabled[:escape_command] = $game_troop.can_escape
  2976.         @commands << Vocab.escape
  2977.     end
  2978.     }
  2979.     @item_max = @commands.size
  2980.   end
  2981.   #--------------------------------------------------------------------------
  2982.   # ○ 「逃走」的開始指针
  2983.   #--------------------------------------------------------------------------
  2984.   def escape_index
  2985.     return @command_index[:escape_command]
  2986.   end
  2987.  
  2988. else
  2989.  
  2990.   #--------------------------------------------------------------------------
  2991.   # ● 刷新
  2992.   #--------------------------------------------------------------------------
  2993.   def refresh
  2994.     self.contents.clear
  2995.     for i in 0...@item_max - 1
  2996.       draw_item(i)
  2997.     end
  2998.     draw_item(@item_max - 1, $game_troop.can_escape)
  2999.   end
  3000.   #--------------------------------------------------------------------------
  3001.   # ● 设置。逃走 的追加。
  3002.   #     actor : 角色
  3003.   #--------------------------------------------------------------------------
  3004.   def setup(actor)
  3005.     s1 = Vocab::attack
  3006.     s2 = Vocab::skill
  3007.     s3 = Vocab::guard
  3008.     s4 = Vocab::item
  3009.     s5 = Vocab::escape
  3010.     if actor.class.skill_name_valid     # 技能的指令名有効?
  3011.       s2 = actor.class.skill_name       # 指令名取代
  3012.     end
  3013.     @commands = [s1, s2, s3, s4, s5]
  3014.     @item_max = 5
  3015.     refresh
  3016.     self.index = 0
  3017.   end
  3018. end
  3019. end
  3020.  
  3021. class FaceSprite
  3022.  
  3023.   attr_accessor :hide
  3024.   attr_accessor :appear
  3025.  
  3026.   def initialize(viewport)
  3027.     @windowskin = Cache.system("Window")
  3028.     od_y = 0
  3029.     if $imported["OverDrive"]
  3030.       @force_image = Cache.system("Force")
  3031.       od_y = Saba::Sekaiju::OVER_DRIVE_Y + @force_image.height
  3032.     end
  3033.     @sprite = Sprite.new(viewport)
  3034.     @sprite.y = 0
  3035.     face_y = Saba::Sekaiju::FACE_Y
  3036.     @sprite.bitmap = Bitmap.new(Saba::Sekaiju::FACE_X + Saba::Sekaiju::FACE_WIDTH, [face_y + od_y].max)
  3037.     @hide = false
  3038.     @appear = false
  3039.     @update_flag = false
  3040.     @actor_index = -1
  3041.   end
  3042.   #--------------------------------------------------------------------------
  3043.   # ○ 资源解放。
  3044.   #--------------------------------------------------------------------------
  3045.   def dispose
  3046.     @sprite.bitmap.dispose
  3047.     @sprite.dispose
  3048.   end
  3049.   #--------------------------------------------------------------------------
  3050.   # ○ 表示角色隐藏的指针番号設定。(番译存疑)
  3051.   #--------------------------------------------------------------------------
  3052.   def index=(value)
  3053.     if value == -1
  3054.       @hide = true
  3055.       @appear = false
  3056.       return
  3057.     end
  3058.     @hide = true
  3059.     @appear = true
  3060.     @actor_index = value
  3061.     @update_flag = true
  3062.   end
  3063.   #--------------------------------------------------------------------------
  3064.   # ○ 角色隐藏不显示。
  3065.   #--------------------------------------------------------------------------  
  3066.   def hide=(value)
  3067.     @hide = value
  3068.     draw if @update_flag
  3069.   end
  3070.   #--------------------------------------------------------------------------
  3071.   # ○ 描画。
  3072.   #--------------------------------------------------------------------------
  3073.   def draw
  3074.     @update_flag = false
  3075.     actor = $game_actors[@actor_index]
  3076.     draw_face(Cache.picture(face_image(actor))) if Saba::Sekaiju::SHOW_ACTOR_IMAGE
  3077.     if $imported["OverDrive"]  
  3078.       draw_actor_od(actor, Saba::Sekaiju::OVER_DRIVE_X, Saba::Sekaiju::OVER_DRIVE_Y)
  3079.     end
  3080.   end
  3081.   #--------------------------------------------------------------------------
  3082.   # ○ 顔图像的描画。
  3083.   #--------------------------------------------------------------------------
  3084.   def draw_face(actor_graphic)
  3085.     @sprite.bitmap.clear_rect(Rect.new(Saba::Sekaiju::FACE_X, 0, Saba::Sekaiju::FACE_WIDTH, Saba::Sekaiju::FACE_Y))
  3086.     @sprite.bitmap.blt(Saba::Sekaiju::FACE_X, Saba::Sekaiju::FACE_Y - actor_graphic.height, actor_graphic, Rect.new(0, 0, Saba::Sekaiju::FACE_WIDTH, actor_graphic.height))
  3087.     @sprite.z = 0
  3088.   end
  3089.   #--------------------------------------------------------------------------
  3090.   # ○ 气力量规的通常時的色 1 的取得
  3091.   #--------------------------------------------------------------------------
  3092.   def od_gauge_normal_color1
  3093.     color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
  3094.     return (color.is_a?(Integer) ? text_color(color) : color)
  3095.   end
  3096.   #--------------------------------------------------------------------------
  3097.   # ○ 气力量规的通常時的色 2 的取得
  3098.   #--------------------------------------------------------------------------
  3099.   def od_gauge_normal_color2
  3100.     color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
  3101.     return (color.is_a?(Integer) ? text_color(color) : color)
  3102.   end
  3103.   #--------------------------------------------------------------------------
  3104.   # ○ 气力量规的最大時的色 1 的取得
  3105.   #--------------------------------------------------------------------------
  3106.   def od_gauge_max_color1
  3107.     color = KGC::OverDrive::GAUGE_MAX_START_COLOR
  3108.     return (color.is_a?(Integer) ? text_color(color) : color)
  3109.   end
  3110.   #--------------------------------------------------------------------------
  3111.   # ○ 气力量规的最大時的色 2 的取得
  3112.   #--------------------------------------------------------------------------
  3113.   def od_gauge_max_color2
  3114.     color = KGC::OverDrive::GAUGE_MAX_END_COLOR
  3115.     return (color.is_a?(Integer) ? text_color(color) : color)
  3116.   end
  3117.   #--------------------------------------------------------------------------
  3118.   # ● 文字色取得
  3119.   #     n : 文字色番号 (0~31)
  3120.   #--------------------------------------------------------------------------
  3121.   def text_color(n)
  3122.     x = 64 + (n % 8) * 8
  3123.     y = 96 + (n / 8) * 8
  3124.     return @windowskin.get_pixel(x, y)
  3125.   end
  3126.   #--------------------------------------------------------------------------
  3127.   # ● 量规背景色的取得
  3128.   #--------------------------------------------------------------------------
  3129.   def gauge_back_color
  3130.     return text_color(19)
  3131.   end
  3132.   #--------------------------------------------------------------------------
  3133.   # ○ 气力量规的描画。
  3134.   #--------------------------------------------------------------------------
  3135.   def draw_actor_od(actor, x, y, width = 72, height = 6)
  3136.     return unless actor.od_gauge_visible?
  3137.     draw_actor_od_gauge(actor, x, y, width, height)
  3138.     draw_actor_od_gauge_value(actor, x - 6, y - 7)
  3139.   end
  3140.   #--------------------------------------------------------------------------
  3141.   # ○ 气力量规的条部分的描画。
  3142.   #--------------------------------------------------------------------------
  3143.   def draw_actor_od_gauge(actor, x, y, width = 72, height = 6)
  3144.     @sprite.bitmap.clear_rect(x, y, @force_image.width, @force_image.height)
  3145.     color = Saba::Sekaiju::TARGET_BG_COLOR
  3146.     @sprite.bitmap.fill_rect(x + 1, y + 1, @force_image.width - 2, @force_image.height - 2, color)
  3147.     @sprite.bitmap.blt(x, y, @force_image, Rect.new(0, 0, @force_image.width, @force_image.height))
  3148.  
  3149.     n = actor.overdrive % KGC::OverDrive::GAUGE_MAX
  3150.     n = KGC::OverDrive::GAUGE_MAX if actor.overdrive == actor.max_overdrive
  3151.     gw = (width - 2) * n / KGC::OverDrive::GAUGE_MAX
  3152.  
  3153.     gc1 = (actor.overdrive == actor.max_overdrive ? od_gauge_max_color1 : od_gauge_normal_color1)
  3154.     gc2 = (actor.overdrive == actor.max_overdrive ? od_gauge_max_color2 : od_gauge_normal_color2)
  3155.     color = Saba::Sekaiju::BOOST_BORDER_COLOR
  3156.     offset_x = 44
  3157.     offset_y = 7
  3158.     @sprite.bitmap.fill_rect(x + offset_x, y + offset_y, width, height, color)
  3159.     @sprite.bitmap.fill_rect(x + offset_x + 1, y + offset_y + 1, width - 2, height - 2, gauge_back_color)
  3160.     @sprite.bitmap.gradient_fill_rect(x + offset_x + 1, y + offset_y + 1, gw, height - 2, gc1, gc2)
  3161.   end
  3162.   #--------------------------------------------------------------------------
  3163.   # ○ 气力量规的値的描画。
  3164.   #--------------------------------------------------------------------------
  3165.   def draw_actor_od_gauge_value(actor, x, y, width = 120)
  3166.     text = ""
  3167.     value = actor.overdrive * 100.0 / KGC::OverDrive::GAUGE_MAX
  3168.     case KGC::OverDrive::GAUGE_VALUE_STYLE
  3169.     when KGC::OverDrive::ValueStyle::IMMEDIATE
  3170.       text = actor.overdrive.to_s
  3171.     when KGC::OverDrive::ValueStyle::RATE
  3172.       text = sprintf("%d%%", actor.overdrive * 100 / KGC::OverDrive::GAUGE_MAX)
  3173.     when KGC::OverDrive::ValueStyle::RATE_DETAIL1
  3174.       text = sprintf("%0.1f%%", value)
  3175.     when KGC::OverDrive::ValueStyle::RATE_DETAIL2
  3176.       text = sprintf("%0.2f%%", value)
  3177.     when KGC::OverDrive::ValueStyle::NUMBER
  3178.       text = "#{actor.overdrive / KGC::OverDrive::GAUGE_MAX}"
  3179.     else
  3180.       return
  3181.     end
  3182.  
  3183.     x += Saba::Sekaiju::OVER_DRIVE_VALUE_OFFSET_X
  3184.     y += Saba::Sekaiju::OVER_DRIVE_VALUE_OFFSET_Y
  3185.  
  3186.     last_font_size = @sprite.bitmap.font.size
  3187.     new_font_size = KGC::OverDrive::GAUGE_VALUE_FONT_SIZE
  3188.     @sprite.bitmap.font.size = new_font_size
  3189.     @sprite.bitmap.draw_text(
  3190.       x, y + Window_Base::WLH + KGC::OverDrive::GAUGE_OFFSET_Y - new_font_size / 2,
  3191.       width, new_font_size, text, 2)
  3192.     @sprite.bitmap.font.size = last_font_size
  3193.   end
  3194. end
  3195.  
  3196. class StatusBackground
  3197.   include ActorStatus
  3198.   attr_accessor :x
  3199.   attr_accessor :y
  3200.   attr_accessor :width
  3201.   attr_accessor :height
  3202.   attr_accessor :visible
  3203.   def initialize(actor, image)
  3204.     @display_state_mode = false
  3205.     @actor = actor
  3206.     if front?
  3207.       y = BASE_Y
  3208.     else
  3209.       y = CELL_HEIGHT + BASE_Y
  3210.     end
  3211.  
  3212.     @x = window_x
  3213.     @y = y
  3214.     @width = window_width
  3215.     @height = CELL_HEIGHT
  3216.  
  3217.     @image = image
  3218.     @frame = 0
  3219.     @state_index = 0
  3220.     @visible = true
  3221.     if actor != nil
  3222.       actor.screen_x = x + CELL_WIDTH / 2
  3223.       actor.screen_y = y + CELL_HEIGHT / 2 + 20
  3224.     end
  3225.     save_parameters
  3226.   end
  3227.   def dispose
  3228.     @sprite.dispose
  3229.   end
  3230.   def viewport=(arg)
  3231.     @viewport = arg
  3232.     @sprite = Sprite.new(@viewport)
  3233.     @bitmap = Cache.system(@image)
  3234.     @sprite.bitmap = @bitmap
  3235.     @sprite.x = @x
  3236.     @sprite.y = @y
  3237.     @sprite.visible = @visible
  3238.   end
  3239.   def update
  3240.     update_contents
  3241.     @sprite.update
  3242.   end
  3243.   def visible=(value)
  3244.     @visible = value
  3245.     @sprite.visible = value if @sprite != nil
  3246.   end
  3247.   #--------------------------------------------------------------------------
  3248.   # ● 通常文字色的取得
  3249.   #--------------------------------------------------------------------------
  3250.   def normal_color
  3251.     return text_color(0)
  3252.   end
  3253.   #--------------------------------------------------------------------------
  3254.   # ● HP 的文字色を取得
  3255.   #     actor : 角色
  3256.   #--------------------------------------------------------------------------
  3257.   def hp_color(actor)
  3258.     return knockout_color if actor.hp == 0
  3259.     return crisis_color if actor.hp < actor.maxhp / 4
  3260.     return normal_color
  3261.   end
  3262.   #--------------------------------------------------------------------------
  3263.   # ● MP 的文字色を取得
  3264.   #     actor : 角色
  3265.   #--------------------------------------------------------------------------
  3266.   def mp_color(actor)
  3267.     return crisis_color if actor.mp < actor.maxmp / 4
  3268.     return normal_color
  3269.   end
  3270.   #--------------------------------------------------------------------------
  3271.   # ● 文字色取得
  3272.   #     n : 文字色番号 (0~31)
  3273.   #--------------------------------------------------------------------------
  3274.   def text_color(n)
  3275.     x = 64 + (n % 8) * 8
  3276.     y = 96 + (n / 8) * 8
  3277.     windowskin = Cache.system("Window")
  3278.     return windowskin.get_pixel(x, y)
  3279.   end
  3280.   #--------------------------------------------------------------------------
  3281.   # ● HP 量规的色 1 的取得
  3282.   #--------------------------------------------------------------------------
  3283.   def hp_gauge_color1
  3284.     return text_color(20)
  3285.   end
  3286.   #--------------------------------------------------------------------------
  3287.   # ● HP 量规的色 2 的取得
  3288.   #--------------------------------------------------------------------------
  3289.   def hp_gauge_color2
  3290.     return text_color(21)
  3291.   end
  3292.   #--------------------------------------------------------------------------
  3293.   # ● MP 量规的色 1 的取得
  3294.   #--------------------------------------------------------------------------
  3295.   def mp_gauge_color1
  3296.     return text_color(22)
  3297.   end
  3298.   #--------------------------------------------------------------------------
  3299.   # ● MP 量规的色 2 的取得
  3300.   #--------------------------------------------------------------------------
  3301.   def mp_gauge_color2
  3302.     return text_color(23)
  3303.   end
  3304.   #--------------------------------------------------------------------------
  3305.   # ● 量规背景色的取得
  3306.   #--------------------------------------------------------------------------
  3307.   def gauge_back_color
  3308.     return text_color(19)
  3309.   end
  3310.   #--------------------------------------------------------------------------
  3311.   # ● 系统文字色的取得
  3312.   #--------------------------------------------------------------------------
  3313.   def system_color
  3314.     return text_color(16)
  3315.   end
  3316.   #--------------------------------------------------------------------------
  3317.   # ● 危机文字色的取得
  3318.   #--------------------------------------------------------------------------
  3319.   def crisis_color
  3320.     return text_color(17)
  3321.   end
  3322.   #--------------------------------------------------------------------------
  3323.   # ● 戦闘不能文字色的取得
  3324.   #--------------------------------------------------------------------------
  3325.   def knockout_color
  3326.     return text_color(18)
  3327.   end
  3328. end
  3329.  
  3330. class DummyStatusBackground < StatusBackground
  3331.   include ActorStatus
  3332.   def initialize(front, position_in_ranks, image)
  3333.     @dummy = true
  3334.     @front = front
  3335.     @position_in_ranks = position_in_ranks
  3336.     super(nil, image)
  3337.   end
  3338.   def front?
  3339.     return @front
  3340.   end
  3341.   def position_in_ranks
  3342.     return @position_in_ranks
  3343.   end
  3344. end
  3345.  
  3346. class ActorWindowSet
  3347.   attr_accessor :active
  3348.   attr_accessor :show_face
  3349.   attr_accessor :state_mode
  3350.   attr_accessor :window_size
  3351.  
  3352.   def initialize(face_sprite)
  3353.     @face_sprite = face_sprite
  3354.     @index = 0
  3355.     @window_size = 0
  3356.     @state_mode = false
  3357.     @windows = []
  3358.     @active_windows = []
  3359.     $game_party.auto_arrange unless $game_party.arranged?
  3360.     members = $game_party.battle_members
  3361.  
  3362.     for actor in members   
  3363.       @windows.push(window_actor(actor, false))
  3364.       @active_windows.push(window_actor(actor, true))
  3365.       @window_size += 1
  3366.     end
  3367.     initialize_dummy_windows
  3368.     @all_windows = @windows + @active_windows
  3369.     @frame = 30
  3370.     @miss = Cache.system("Miss")
  3371.  
  3372.   end
  3373.   def auto_select(value)
  3374.     return value unless Saba::Sekaiju::SHOW_EMPTY_ACTOR_STATUS
  3375.     return 0 if value >= $game_party.battle_members.size
  3376.     return value
  3377.   end
  3378.   def initialize_dummy_windows
  3379.     return unless Saba::Sekaiju::SHOW_EMPTY_ACTOR_STATUS
  3380.     (3 - $game_party.fronts.size).times do |i|
  3381.       @windows.push(window_dummy_actor(true, i + $game_party.fronts.size))
  3382.     end
  3383.     (3 - $game_party.backs.size).times do |i|
  3384.       @windows.push(window_dummy_actor(false, i + $game_party.backs.size))
  3385.     end
  3386.   end
  3387.   def window_dummy_actor(front, position_in_ranks)
  3388.     if Saba::Sekaiju::ACTOR_STATUS_BG_IMAGE == nil
  3389.       window = DummyWindow_Actor.new(front, position_in_ranks)
  3390.       return window
  3391.     else
  3392.       image = Saba::Sekaiju::EMPTY_STATUS_BG_IMAGE
  3393.       window = DummyStatusBackground.new(front, position_in_ranks, image)
  3394.       window.visible = true
  3395.       return window
  3396.     end
  3397.   end
  3398.  
  3399.   def window_actor(actor, active)
  3400.     if Saba::Sekaiju::ACTOR_STATUS_BG_IMAGE == nil
  3401.       return Window_Actor.new(actor, active)
  3402.     else
  3403.       if active
  3404.         image = Saba::Sekaiju::ACTOR_STATUS_ACTIVE_BG_IMAGE
  3405.       else
  3406.         image = Saba::Sekaiju::ACTOR_STATUS_BG_IMAGE
  3407.       end
  3408.       window = StatusBackground.new(actor, image)
  3409.       window.visible = ! active
  3410.       return window
  3411.     end
  3412.   end
  3413.  
  3414.   def item_max
  3415.     return @windows.size
  3416.   end
  3417.  
  3418.   def viewport=(v)
  3419.     for window in @all_windows
  3420.       window.viewport = v
  3421.     end
  3422.     @sprite = Sprite.new(v)
  3423.     @sprite.bitmap = Bitmap.new(Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  3424.     @sprite.z = 130
  3425.     @damage_sprite = Sprite.new(v)
  3426.     @damage_sprite.bitmap = Bitmap.new(Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  3427.     @damage_sprite.z = 150
  3428.     for window in @all_windows
  3429.       window.canvas = @sprite.bitmap
  3430.     end
  3431.  
  3432.     refresh
  3433.   end
  3434.   #--------------------------------------------------------------------------
  3435.   # ● 描画的更新。
  3436.   #--------------------------------------------------------------------------
  3437.   def refresh
  3438.     for window in @all_windows
  3439.       window.refresh
  3440.     end
  3441.   end
  3442.   #--------------------------------------------------------------------------
  3443.   # ● 状態異常的表示。
  3444.   #--------------------------------------------------------------------------
  3445.   def show_all_states
  3446.     for window in @all_windows
  3447.       window.show_all_states
  3448.     end
  3449.   end
  3450.   #--------------------------------------------------------------------------
  3451.   # ● 状態異常的隠藏。
  3452.   #--------------------------------------------------------------------------
  3453.   def hide_all_states
  3454.     for window in @all_windows
  3455.       window.hide_all_states
  3456.     end
  3457.   end
  3458.   #--------------------------------------------------------------------------
  3459.   # ● 现在被选择的角色的指针返回。
  3460.   #--------------------------------------------------------------------------
  3461.   def index
  3462.     return @index
  3463.   end
  3464.   #--------------------------------------------------------------------------
  3465.   # ● 指定的指针的角色的選択。
  3466.   #--------------------------------------------------------------------------
  3467.   def index=(value)
  3468.     value = auto_select(value)
  3469.     @index = value
  3470.     if @index == 99
  3471.       select_all
  3472.       return
  3473.     end
  3474.     value -= 100 if @index >= 100 # 使用者的場合
  3475.     @windows.size.times do |i|
  3476.       window = @windows[i]
  3477.       window.visible = (i != value)
  3478.     end
  3479.     @active_windows.size.times do |i|
  3480.       window = @active_windows[i]
  3481.       if i == value
  3482.         window.visible = true
  3483.         if @show_face
  3484.           @face_sprite.index = window.actor.face_id
  3485.         end
  3486.       else
  3487.         window.visible = false
  3488.       end
  3489.     end
  3490.     if value < 0 && @face_sprite != nil
  3491.       @face_sprite.index = -1
  3492.     end
  3493.     refresh
  3494.   end
  3495.   #--------------------------------------------------------------------------
  3496.   # ● 全部的角色的選択。
  3497.   #--------------------------------------------------------------------------
  3498.   def select_all
  3499.     @active_windows.size.times do |i|
  3500.       window = @active_windows[i]
  3501.       window.visible = true
  3502.       if @show_face
  3503.         @face_sprite.index = window.actor.face_id
  3504.       end
  3505.     end
  3506.   end
  3507.   #--------------------------------------------------------------------------
  3508.   # ● 资源的破棄。
  3509.   #--------------------------------------------------------------------------
  3510.   def dispose
  3511.     for window in @all_windows
  3512.       window.dispose
  3513.     end
  3514.     @sprite.bitmap.dispose
  3515.     @sprite.dispose
  3516.     @damage_sprite.bitmap.dispose
  3517.     @damage_sprite.dispose
  3518.   end
  3519.   #--------------------------------------------------------------------------
  3520.   # ● 框架的更新処理实行。
  3521.   #--------------------------------------------------------------------------
  3522.   def update
  3523.     update_selection
  3524.     update_state_mode
  3525.     for window in @all_windows
  3526.       window.update
  3527.     end
  3528.     @sprite.update
  3529.     update_damage
  3530.   end
  3531.   #--------------------------------------------------------------------------
  3532.   # ● 状態表示模式的更新。
  3533.   #--------------------------------------------------------------------------
  3534.   def update_state_mode
  3535.     return unless Saba::Sekaiju::INFO_TYPE == 2
  3536.     return unless Input.trigger?(Input::A)
  3537.     if @state_mode
  3538.       hide_all_states
  3539.       @state_mode = false
  3540.     else
  3541.       show_all_states
  3542.       @state_mode = true
  3543.     end
  3544.   end
  3545.   #--------------------------------------------------------------------------
  3546.   # ● 選択状態的更新。
  3547.   #--------------------------------------------------------------------------
  3548.   def update_selection
  3549.     return unless active
  3550.     return if @index == 99 # 全選択的場合
  3551.     return if @index >= 100 # 使用者的場合
  3552.     if Input.trigger?(Input::RIGHT)
  3553.       Sound.play_cursor
  3554.       @index += 1
  3555.       @index = 0 if $game_party.fronts.size == @index
  3556.       @index = $game_party.fronts.size if $game_party.battle_members.size == @index
  3557.       self.index = @index
  3558.     elsif Input.trigger?(Input::LEFT)
  3559.       Sound.play_cursor
  3560.       @index -= 1
  3561.  
  3562.       if -1 == @index
  3563.         if $game_party.fronts.size == 0
  3564.           @index = $game_party.backs.size - 1
  3565.         else
  3566.           @index = $game_party.fronts.size - 1
  3567.         end
  3568.       elsif $game_party.fronts.size - 1 == @index
  3569.         @index = $game_party.battle_members.size - 1
  3570.       end
  3571.       self.index = @index
  3572.     elsif Input.trigger?(Input::DOWN) || Input.trigger?(Input::UP)
  3573.       return if $game_party.fronts.empty? || $game_party.backs.empty?
  3574.       Sound.play_cursor
  3575.       if $game_party.fronts.size > @index
  3576.         @index += $game_party.fronts.size
  3577.         @index = $game_party.battle_members.size - 1 if @index >= $game_party.battle_members.size
  3578.         unless Saba::Sekaiju::SHOW_EMPTY_ACTOR_STATUS
  3579.           @index = 2 if $game_party.backs.size == 3 && $game_party.fronts.size == 1
  3580.         end
  3581.       else
  3582.         @index -= $game_party.fronts.size
  3583.         @index = 0 if @index < 0
  3584.         @index = $game_party.fronts.size - 1 if @index >= $game_party.fronts.size
  3585.         unless Saba::Sekaiju::SHOW_EMPTY_ACTOR_STATUS
  3586.           @index = 1 if $game_party.backs.size == 1 && $game_party.fronts.size == 3
  3587.         end
  3588.       end
  3589.       self.index = @index
  3590.     end
  3591.  
  3592.   end
  3593.   #--------------------------------------------------------------------------
  3594.   # ● 受创点的表示的更新。
  3595.   #--------------------------------------------------------------------------
  3596.   def update_damage
  3597.     return if @current_actor_window == nil && @miss_actor_window == nil
  3598.     if @frame >= Saba::Sekaiju::DAMADE_ANIMATIONS_DURATION
  3599.       @current_actor_window = nil
  3600.       @miss_actor_window = nil
  3601.       @damage_sprite.bitmap.clear_rect(0, 0, Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  3602.       return
  3603.     end
  3604.     @frame += 1
  3605.     draw_hp_damage unless @current_actor_window == nil
  3606.     draw_miss unless @miss_actor_window == nil
  3607.   end
  3608.   #--------------------------------------------------------------------------
  3609.   # ● 落空的表示。
  3610.   #--------------------------------------------------------------------------
  3611.   def display_miss(target)
  3612.     return unless @damage_sprite.visible
  3613.     for window in @windows
  3614.       if window.actor == target
  3615.         @miss_actor_window = window
  3616.         @frame = 0
  3617.         refresh
  3618.         draw_miss
  3619.         return
  3620.       end
  3621.     end
  3622.   end
  3623.   #--------------------------------------------------------------------------
  3624.   # ● 落空的描画。
  3625.   #--------------------------------------------------------------------------
  3626.   def draw_miss
  3627.     @damage_sprite.bitmap.clear_rect(0, 0, Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  3628.     x = @miss_actor_window.x + @miss_actor_window.width / 2
  3629.     y = @miss_actor_window.y - @frame + 5
  3630.     @damage_sprite.bitmap.blt(x - @miss.width / 2, y, @miss, Rect.new(0, 0, @miss.width, @miss.height))
  3631.   end
  3632.   #--------------------------------------------------------------------------
  3633.   # ● HP受创点的表示。
  3634.   #--------------------------------------------------------------------------
  3635.   def display_hp_damage(target)
  3636.     return unless @damage_sprite.visible
  3637.     return if target.hp_damage == 0
  3638.     for window in @windows
  3639.       if window.actor == target
  3640.         @current_actor_window = window
  3641.         @frame = 0
  3642.         refresh
  3643.         draw_hp_damage
  3644.         return
  3645.       end
  3646.     end
  3647.   end
  3648.   #--------------------------------------------------------------------------
  3649.   # ● HP受创点的描画。
  3650.   #--------------------------------------------------------------------------
  3651.   def draw_hp_damage
  3652.     @damage_sprite.bitmap.clear_rect(0, 0, Saba::Sekaiju::WINDOW_WIDTH, Saba::Sekaiju::WINDOW_HEIGHT)
  3653.     damage = @current_actor_window.actor.hp_damage
  3654.     x = @current_actor_window.x + @current_actor_window.width / 2 - 30
  3655.     y = @current_actor_window.y - @frame + 5
  3656.     @damage_sprite.bitmap.font.bold = true
  3657.     if damage >= 0
  3658.       @damage_sprite.bitmap.font.color = Saba::Sekaiju::DAMAGE_COLOR
  3659.     else
  3660.       @damage_sprite.bitmap.font.color = Saba::Sekaiju::RECOVER_COLOR
  3661.       damage = damage.abs
  3662.     end
  3663.     @damage_sprite.bitmap.font.size = Saba::Sekaiju::FONT_SIZE
  3664.     @damage_sprite.bitmap.draw_text(x, y, 60, 32, damage.to_s, 1)
  3665.   end
  3666.   #--------------------------------------------------------------------------
  3667.   # ● 可視性的設定しますが、true什么也没有发生的场合、false,选择被解除。
  3668.   #--------------------------------------------------------------------------
  3669.   def visible=(value)
  3670.     self.index = -1 unless value
  3671.   end
  3672.   #--------------------------------------------------------------------------
  3673.   # ● 假人。
  3674.   #--------------------------------------------------------------------------
  3675.   def width
  3676.     return 0
  3677.   end
  3678.   def height
  3679.     return 136
  3680.   end
  3681.   #--------------------------------------------------------------------------
  3682.   # ● 假人。
  3683.   #--------------------------------------------------------------------------
  3684.   def x=(value)
  3685.   end
  3686.   def actor
  3687.     $game_party.members[@index]
  3688.   end
  3689. end
  3690.  
  3691. #==============================================================================
  3692. # ■ Game_Battler
  3693. #------------------------------------------------------------------------------
  3694. #  後列的場合的受创点修正实行。
  3695. #==============================================================================
  3696. class Game_Battler
  3697.   #--------------------------------------------------------------------------
  3698.   # ● 通常攻击而受创点计算。后排攻击的场合,受创点修正。。
  3699.   #     attacker : 攻撃者
  3700.   #    結果は @hp_damage 代入。
  3701.   #--------------------------------------------------------------------------
  3702.   alias saba_sekaiju_make_attack_damage_value make_attack_damage_value
  3703.   def make_attack_damage_value(attacker)
  3704.     saba_sekaiju_make_attack_damage_value(attacker)
  3705.     if attacker.back_attack?
  3706.       @hp_damage = (@hp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY).round   # HP 受创点にペナルティ
  3707.       @mp_damage = (@mp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY).round   # MP 受创点にペナルティ
  3708.     end
  3709.     if back_attacked?(attacker)
  3710.       @hp_damage = (@hp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY_ENEMY).round   # HP 受创点にペナルティ
  3711.       @mp_damage = (@mp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY_ENEMY).round   # MP 受创点にペナルティ
  3712.     end
  3713.   end
  3714.   #--------------------------------------------------------------------------
  3715.   # ● 技能的受创点计算。后排攻击的场合,受创点修正。。
  3716.   #     user : 攻撃者
  3717.   #    結果は @hp_damage 代入。
  3718.   #--------------------------------------------------------------------------
  3719.   alias saba_sekaiju_make_obj_damage_value make_obj_damage_value
  3720.   def make_obj_damage_value(user, obj)
  3721.     saba_sekaiju_make_obj_damage_value(user, obj)
  3722.     if user.back_attack?
  3723.       @hp_damage = (@hp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY).round   # HP 受创点にペナルティ
  3724.       @mp_damage = (@mp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY).round   # MP 受创点にペナルティ
  3725.     end
  3726.     if back_attacked?(user, obj)
  3727.       @hp_damage = (@hp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY_ENEMY).round   # HP 受创点にペナルティ
  3728.       @mp_damage = (@mp_damage * Saba::Sekaiju::BACK_ATTACK_DAMAGE_PENALTY_ENEMY).round   # MP 受创点にペナルティ
  3729.     end
  3730.   end
  3731.   #--------------------------------------------------------------------------
  3732.   # ● 从后排的攻击判定是否有效。
  3733.   #--------------------------------------------------------------------------
  3734.   def back_attack?
  3735.     return false
  3736.   end
  3737.   #--------------------------------------------------------------------------
  3738.   # ● 对后排是否有效的攻击判定。。
  3739.   #--------------------------------------------------------------------------
  3740.   def back_attacked?(user, obj = nil)
  3741.     return false
  3742.   end
  3743. end
  3744.  
  3745. if $imported["OverDrive"]
  3746. class Game_Enemy
  3747.   #--------------------------------------------------------------------------
  3748.   # ○ 气力技能已習得的判定
  3749.   #--------------------------------------------------------------------------
  3750.   def use_overdrive_skill?
  3751.     return Saba::Checker::define?(self.enemy, "<オー条气力>")
  3752.   end
  3753. end
  3754. end
  3755.  
  3756.  
  3757. #==============================================================================
  3758. # ■ Window_TargetName
  3759. #------------------------------------------------------------------------------
  3760. #  敵名を表示窗口。
  3761. #==============================================================================
  3762. class Window_TargetName < Window_Help
  3763.   #--------------------------------------------------------------------------
  3764.   # ● 对象初期化 ◆◆◆ 改造 ◆◆◆
  3765.   #--------------------------------------------------------------------------
  3766.   def initialize
  3767.     super
  3768. #~     if Saba::Sekaiju::show_turn_count? && (Saba::Sekaiju::TURN_WINDOW_ALIGN == 0)
  3769. #~       x = Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  3770. #~     else
  3771. #~       x = 0
  3772. #~     end
  3773. #~     if Saba::Sekaiju::show_turn_count?
  3774. #~       width = Saba::Sekaiju::WINDOW_WIDTH - Saba::Sekaiju::TURN_WINDOW_WIDTH + Saba::Sekaiju::MESSAGE_WINDOW_OFFSET_X
  3775. #~     else
  3776. #~       width = Saba::Sekaiju::WINDOW_WIDTH
  3777. #~     end
  3778.  
  3779. #~     self.x = x
  3780.     self.x = 128
  3781. #~     self.width = width
  3782.     self.width = 416
  3783.     self.z = 350
  3784.     create_contents
  3785.   end
  3786. end
  3787.  
  3788. #==============================================================================
  3789. # ■ Window_Actor に追加
  3790. #------------------------------------------------------------------------------
  3791. #  队友ーメン条每一个对应各自的窗口。
  3792. #==============================================================================
  3793. class Window_Actor < Window_Base
  3794.   include ActorStatus
  3795.   def initialize(actor, active_window = false)
  3796.     @display_state_mode = false
  3797.     @actor = actor
  3798.     if front?
  3799.       y = BASE_Y
  3800.     else
  3801.       y = CELL_HEIGHT + BASE_Y
  3802.     end
  3803.  
  3804.     super(window_x, y, window_width, CELL_HEIGHT)
  3805.     if active_window
  3806.       self.windowskin = Cache.system("ActiveWindow")
  3807.       create_contents
  3808.     end
  3809.  
  3810.     self.visible = ! active_window
  3811.     @frame = 0
  3812.     @state_index = 0
  3813.     self.z = 30
  3814.     if actor != nil
  3815.       actor.screen_x = x + CELL_WIDTH / 2
  3816.       actor.screen_y = y + CELL_HEIGHT / 2 + 20
  3817.     end
  3818.     save_parameters
  3819.   end
  3820.   def update
  3821.     super
  3822.     update_contents
  3823.   end
  3824. end
  3825.  
  3826. class DummyWindow_Actor < Window_Actor
  3827.   include ActorStatus
  3828.   def initialize(front, position_in_ranks)
  3829.     @dummy = true
  3830.     @front = front
  3831.     @position_in_ranks = position_in_ranks
  3832.     super(nil, false)
  3833.   end
  3834.   def front?
  3835.     return @front
  3836.   end
  3837.   def position_in_ranks
  3838.     return @position_in_ranks
  3839.   end
  3840. end
  3841.  
  3842. class RPG::Weapon < RPG::BaseItem
  3843.   def long_range?
  3844.     return Saba::Checker::define?(self, Saba::Sekaiju::LONG_RANGE_WEAPON_MARKER)
  3845.   end
  3846. end
  3847.  
  3848. class RPG::Skill < RPG::UsableItem
  3849.   def short_range?
  3850.     return Saba::Checker::define?(self, Saba::Sekaiju::SHORT_RANGE_SKILL_MARKER)
  3851.   end
  3852. end
  3853.  
  3854. class RPG::Item
  3855.   def short_range?
  3856.     return false
  3857.   end
  3858. end
  3859.  
  3860. class Window_State < Window_Base
  3861.   def initialize
  3862.     super(285, 70 ,250, 210)
  3863.     draw_title
  3864.     self.contents.font.color = Color.new(255, 255, 255)
  3865.     self.contents.font.bold = false
  3866.     draw_fronts
  3867.     draw_backs
  3868.   end
  3869.   def draw_title
  3870.     self.contents.font.color = Color.new(255, 220, 210)
  3871.     self.contents.draw_text(0, 0, 218, WLH, Saba::Sekaiju::INFO_TEXT, 1)
  3872.   end
  3873.   def draw_fronts
  3874.     y = WLH + 5
  3875.     for actor in $game_party.fronts
  3876.       draw_name(actor, 0, y)
  3877.       x = 112
  3878.       for state in actor.states
  3879.         next if state.icon_index == 0
  3880.         draw_icon(state.icon_index, x, y)
  3881.         x += 21
  3882.       end
  3883.       y += WLH
  3884.     end
  3885.   end
  3886.   def draw_backs
  3887.     y = WLH * 4 + 5
  3888.     for actor in $game_party.backs
  3889.       draw_name(actor, 0, y)
  3890.       x = 112
  3891.       for state in actor.states
  3892.         next if state.icon_index == 0
  3893.         draw_icon(state.icon_index, x, y)
  3894.         x += 21
  3895.       end
  3896.       y += WLH
  3897.     end
  3898.   end
  3899.   def draw_name(actor, x, y)
  3900.     self.contents.font.color = hp_color(actor)
  3901.     self.contents.draw_text(x, y, 108, WLH, actor.name)
  3902.   end
  3903.   #--------------------------------------------------------------------------
  3904.   # ● 状態異常图标的描画。
  3905.   #--------------------------------------------------------------------------
  3906.   def draw_icon(icon_index, x, y, enabled = true)
  3907.     icon = Cache.system("Iconset")
  3908.     rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  3909.     self.contents.blt(x, y, icon, rect, enabled ? 255 : 128)
  3910.   end
  3911. end
  3912.  
  3913. class Scene_File
  3914.   #--------------------------------------------------------------------------
  3915.   # ● 存档数据的読取
  3916.   #     file : 読取用的文件对象 (开放完毕)
  3917.   #--------------------------------------------------------------------------
  3918.   alias saba_sekaiju_read_save_data read_save_data
  3919.   def read_save_data(file)
  3920.     saba_sekaiju_read_save_data(file)
  3921.     $game_party.update_actors
  3922.   end
  3923. end
  3924.  
  3925. class Game_Interpreter
  3926.   def change_face(actor_id, face_id)
  3927.     actor = $game_actors[actor_id]
  3928.     actor.face_id = face_id
  3929.   end
  3930. end
  3931.  
  3932. #--------------------------------------------------------------------------
  3933. # ● 味方的战动画表示用 ◆◆◆ 改造 ◆◆◆ @viewport1 > @viewport8
  3934. #--------------------------------------------------------------------------
  3935. if Saba::Sekaiju::DISPLAY_BATTLE_ANIMATION_TO_ACTOR
  3936. class Spriteset_Battle
  3937.   def create_actors
  3938.     @actor_sprites = []
  3939.     6.times do
  3940.       @actor_sprites.push(Sprite_Battler.new(@viewport8)) # ◆
  3941.     end
  3942.   end
  3943.   #--------------------------------------------------------------------------
  3944.   # ● 视窗口的作成 ◆◆◆ 改造 ◆◆◆ @viewport1 > @viewport8
  3945.   #--------------------------------------------------------------------------
  3946.   alias saba_sekaiju_create_viewports create_viewports
  3947.   def create_viewports
  3948.     saba_sekaiju_create_viewports
  3949.     @viewport8.rect.height += Saba::Sekaiju::DISPLAY_POSITION_ANIMATION_OFFSET_Y * 2
  3950.   end
  3951. end
  3952. end
  3953.  
  3954. #--------------------------------------------------------------------------
  3955. # ● 受创点范围非表示用
  3956. #--------------------------------------------------------------------------
  3957. if Saba::Sekaiju::HIDE_DEFAULT_POPUP_DAMAGE
  3958. class ActorWindowSet
  3959.   alias saba_popup_viewport viewport=
  3960.   def viewport=(v)
  3961.     saba_popup_viewport(v)
  3962.     @damage_sprite.visible = false
  3963.   end
  3964. end
  3965. class Sprite_EnemyDamage
  3966.   def display_miss(target)
  3967.   end
  3968.   def display_hp_damage(target, obj)
  3969.   end
  3970. end
  3971. end
  3972.  
  3973. #--------------------------------------------------------------------------
  3974. # ● 回合消費技能用
  3975. #--------------------------------------------------------------------------
  3976. if defined?(Game_Unit.new.reduce_consume_turn)
  3977. class Game_Enemy
  3978.   #--------------------------------------------------------------------------
  3979.   # ● 戦闘行動的作成
  3980.   #--------------------------------------------------------------------------
  3981.   alias saba_sekaiju_make_action make_action
  3982.   def make_action
  3983.     return if @not_act_turn != -1
  3984.     saba_sekaiju_make_action
  3985.   end
  3986. end
  3987. class Game_Unit
  3988.   #--------------------------------------------------------------------------
  3989.   # ● 不能行动残余回合数的减少
  3990.   #--------------------------------------------------------------------------
  3991.   def reduce_consume_turn
  3992.     for member in members
  3993.       turn = member.not_act_turn
  3994.       member.not_act_turn = turn - 1 if turn > -1
  3995.       member.not_act_turn = turn + 1 if turn < -1
  3996.       if turn == -1
  3997.         member.no_damage_flag = false
  3998.         next
  3999.       end
  4000.       skill = member.action.skill
  4001.       unless member.skill_can_use?(skill)
  4002.         member.not_act_turn = -1 if turn > -1
  4003.       end
  4004.     end
  4005.   end
  4006. end
  4007. end
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
114
在线时间
411 小时
注册时间
2020-1-11
帖子
253
4
 楼主| 发表于 2021-7-11 20:38:15 | 只看该作者
喵呜喵5 发表于 2021-7-11 02:49
直接参看 set_screen_x 最后那部分

我就是喜欢简单直接。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 10:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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