CyberForte

DoW Overdrive

Oct 10th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 35.05 KB | None | 0 0
  1. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
  2. #_/    ◆              Overdrive System - KGC_OverDrive                  ◆ VX ◆
  3. #_/    ◇                  Last update : 2008/03/13                           ◇
  4. #_/    ◆                  Translation by Touchfuzzy                          ◆
  5. #_/    ◆             Additional polish by Mr. Anonymous                      ◆
  6. #_/-----------------------------------------------------------------------------
  7. #_/                      ★ 2008/04/09 UPDATE [MRA] ★
  8. #_/   The defend command may now increase the Overdrive guage. Also added an
  9. #_/   option to have sound effects when the guage becomes full.
  10. #_/-----------------------------------------------------------------------------
  11. #_/                      ★ 2008/03/13 UPDATE [KCG] ★
  12. #_/                       Several minor bugs fixed.
  13. #_/-----------------------------------------------------------------------------
  14. #_/  This script allows the designer to create skills that are not usable in
  15. #_/  battle until a character gains enough points from specified actions to use
  16. #_/  them. To set up a skill as an "Overdrive" skill (which doesn't appear until
  17. #_/  the Overdrive Gauge is full), go into the database, click the Skills tab,
  18. #_/  locate the skill you desire, and then enter <overdrive> into the "Notes"
  19. #_/  text box. Also, you may desire some skills to increase the Overdrive Gauge
  20. #_/  more than others.
  21. #_/  To do so, enter <OD_GAIN n%> (where n = a number) into the desired skill's
  22. #_/  "Notes" box. Example: <OD_GAIN 200%> would increase Overdrive Points
  23. #_/  gained from Attack Gain Rate (80 by default) by 200 percent (x2).
  24. #_/  The formula for this is [attackgainrate * n / 100]
  25. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
  26.  
  27. #===============================================================================
  28. #                          ★ Customization ★
  29. #===============================================================================
  30.  
  31. module KGC
  32.  module OverDrive
  33.  
  34.   #                      ◆ Maximum Gauge Points ◆
  35.   #  This affects the amount of OP (Overdrive Points) required to fill the
  36.   #   Overdrive Gauge. Default: GAUGE_MAX = 1000
  37.   GAUGE_MAX = 3000
  38.  
  39.   #                      ◆ Default OP Gain Rates ◆
  40.   #  You may specify the amount of OP battlers will be rewarded for specific
  41.   #   actions performed.  
  42.   GAIN_RATE = [
  43.      10,  # 0  Gained per attack.
  44.     500,  # 1  Gained for taking damage.
  45.           #    This is per 100% MHP of damage taken, so with 500 you would have
  46.           #    to take 2 times your MHP to fill a 1000 GAUGE_MAX
  47.      50,  # 2  Gained for defeating an enemy.
  48.       0,  # 3  Gained each time you run away from a fight.
  49.      10,  # 4  Gained for each round spent while fighting solo in battle, either
  50.           #    being the only character or being the last one alive.
  51.      10,  # 5  Gained for taking any action in a round
  52.     100,  # 6  Gained for each round surviving with 25% or less HP remaining.
  53.      10,  # 7  Gained for each round for guarding.
  54.   ]
  55.  
  56.   #                 ◆ Default Actor OD Increase Options ◆
  57.   #  Default Overdrive types that affect player-characters. The numbers in the
  58.   #   brackets [] are chosen from the GAIN_RATE above, to the right of the #.
  59.   #  It appears these numbers "stack" when setting up an individual character's
  60.   #   Overdrive parameters.
  61.   DEFAULT_ACTOR_DRIVE_TYPE = [0, 1, 2, 5, 6, 7]
  62.  
  63.   #                 ◆ Default Enemy OD Increase Options ◆
  64.   #  Default Overdrive types that affect enemies. The numbers in the brackets []
  65.   #    are chosen from the GAIN_RATE above, to the right of the #.
  66.   DEFAULT_ENEMY_DRIVE_TYPE = [0, 1, 2, 4, 5, 6]
  67.  
  68.   #                       ◆ OD Gauge Colors ◆
  69.   #  Allows you to change the color of the overdrive gauges.
  70.   #  The color can also be determined by a numerical expression.
  71.   #  Example: GAUGE_NORMAL_START_COLOR = Color.new(255, 0, 0)  <- This is red.
  72.   #  If you've worked with HTML or image editing software, this should be
  73.   #   fairly familiar.
  74.   GAUGE_NORMAL_START_COLOR = 14
  75.   GAUGE_NORMAL_END_COLOR   = 6
  76.   GAUGE_MAX_START_COLOR    = 10
  77.   GAUGE_MAX_END_COLOR      = 2
  78.  
  79.   #                    ◆ Empty OD Gauge Upon Death ◆
  80.   #  This toggle affects wether the OP Gauge is reset to zero once an actor
  81.   #   dies. true = Reset to 0. false = Gauge remains persistant.
  82.   EMPTY_ON_DEAD = false
  83.  
  84.   #                       ◆ Hide Actor OD Gauge ◆
  85.   #  Hide the gauge for individual characters. The number of the character in
  86.   #   the Actors Database is inserted in the brackets.
  87.   #  Example: HIDE_GAUGE_ACTOR = [2] would always hide the gauge for the second
  88.   #   actor in the database. (Simple stuff.)
  89.   HIDE_GAUGE_ACTOR = []
  90.  
  91.   #                       ◆ Hide OD Gauge in Menu ◆
  92.   #  This toggle allows you to hide the Overdrive gauge from the command menu.
  93.   #   true = Gauge is hidden.
  94.   #   false = Gauge remains persistant even in menu.
  95.   HIDE_GAUGE_NOT_IN_BATTLE = false
  96.  
  97.   #                ◆ Hide OD Gauge When Actor Lacks OD Skills ◆
  98.   #  This toggle allows you to hide the gauge if a character has no Overdrive
  99.   #   skills in his/her arsenal.
  100.   #  true = Gauge is hidden.
  101.   #  false = Gauge is not hidden.
  102.   HIDE_GAUGE_NO_OD_SKILLS  = true
  103.  
  104.   #             ◆ Prevent Actors Without OD Skills From Gaining OP ◆
  105.   # This toggle stops OP from being gained for characters that have no Overdrive
  106.   # skills when HIDE_GAUGE_NO_OD_SKILLS  = true.
  107.   NOT_GAIN_GAUGE_HIDING    = true
  108.  
  109.   #                ◆ Hide OD Skills When Actor Lacks Max OP ◆
  110.   #  This toggle allows you to specify wether skills that do not yet meet the
  111.   #   required OP are visible.
  112.   #  true = Skills are hidden
  113.   #  false = skills are not hidden.
  114.   HIDE_SKILL_LACK_OF_GAUGE = false
  115.  
  116.   #                ◆ Play sound on OD Max ◆  
  117.   #  Play sound on gauge max.(Filename, Pitch, Volume)
  118.   ODMAX_SOUND = RPG::SE.new()
  119.  end
  120. end
  121.  
  122. #------------------------------------------------------------------------------#
  123.  
  124. $imported = {} if $imported == nil
  125. $imported["OverDrive"] = true
  126.  
  127. module KGC::OverDrive
  128.   module Type
  129.     ATTACK  = 0
  130.     DAMAGE  = 1
  131.     VICTORY = 2
  132.     ESCAPE  = 3
  133.     ALONE   = 4
  134.     ACTION  = 5
  135.     FATAL   = 6
  136.     GUARD   = 7
  137.   end
  138.  
  139.   module Regexp
  140.     module Skill
  141. # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
  142. #  Unless you know what you're doing, it's best not to alter anything beyond  #
  143. #  this point, as this only affects the tags used for "Notes" in database.    #
  144. # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
  145.  
  146. #  Whatever word(s) are after the separator ( | ) in the following lines are
  147. #   what are used to determine what is searched for in the "Notes" section of a
  148. #   skill to see if it is an Overdrive skill.
  149. #  Default Overdrive tag is <overdrive>
  150. #  Default OD_GAIN_RATE is <OD_GAIN>
  151.  
  152.       OVER_DRIVE = /<(?:OVER_DRIVE|overdrive)[ ]*(\d+)?>/i
  153.       OD_GAIN_RATE = /<(?:OD_GAIN_RATE|odgain)[ ]*(\d+)[%%]?>/i
  154.     end
  155.   end
  156. end
  157.  
  158. # In events if you wish to use scripting to increase the OD Gauge for a
  159. #   character you just use this line "gain_actor_od_gauge(ID, IG)"
  160. #   ID = Actor ID Number,
  161. #   IG = number of points to increase gauge
  162. #   Inserting -1 in ID makes it affect all characters.
  163.  
  164. # In events if you wish to use scripting to increase the OD Gauge for an
  165. #   enemy you just use this line "gain_enemy_od_gauge(ID, IG)"
  166. #   ID = Enemy ID Number in group 0-7
  167. #   IG = number of points to increase gauge
  168. #   Inserting -1 in ID makes it affect all enemies.
  169.  
  170. # In events if you wish to use scripting to change what increases the OD gauge
  171. #   for a character use this line "set_actor_drive_type(ID, [ODT])"
  172. #   ID = Actor ID Number
  173. #   ODT = numbers of types of Overdrive adders to use
  174. #   If the [ODT] is omitted it goes back to the defaults
  175.  
  176. # In events if you wish to use scripting to change what increases the OD gauge
  177. #   for an us this line "set_enemy_drive_type(ID, [ODT])"
  178. #   ID = Enemy ID Number in group 0-7
  179. #   ODT = numbers of types of Overdrive adders to use
  180. #   If the [ODT] is omitted it goes back to the defaults
  181.  
  182. #==============================================================================
  183. # □ KGC::Commands
  184. #==============================================================================
  185.  
  186. module KGC::Commands
  187.   module_function
  188.   #--------------------------------------------------------------------------
  189.   # ○ Actor Overdrive Gain Gauge
  190.   #     actor_id : Actor ID (-1 : Entire Party)
  191.   #     value    : Increase Amount (Subtraction works as well)
  192.   #--------------------------------------------------------------------------
  193.   def gain_actor_od_gauge(actor_id, value)
  194.     if actor_id == -1
  195.       # A all living members gauge is operated.
  196.       $game_party.existing_members.each { |actor|
  197.         actor.overdrive += value
  198.       }
  199.     else
  200.       actor = $game_actors[actor_id]
  201.       actor.overdrive += value if actor != nil && actor.exist?
  202.     end
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ○ Enemy Overdrive Gain Gauge
  206.   #     enemy_index : Enemy index (-1 : All Enemies)
  207.   #     value    : Increase Amount (Subtraction works as well)
  208.   #--------------------------------------------------------------------------
  209.   def gain_enemy_od_gauge(enemy_index, value)
  210.     if enemy_index == -1
  211.       # A all living enemies gauge is operated.
  212.       $game_troop.existing_members.each { |enemy|
  213.         enemy.overdrive += value
  214.       }
  215.     else
  216.       enemy = $game_troop.members[enemy_index]
  217.       enemy.overdrive += value if enemy != nil && enemy.exist?
  218.     end
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ○ Set Actor Drive Type
  222.   #     actor_id : Actor ID (-1 : Entire Party)
  223.   #     types    : Array of drive type ( When omitted: Initialization. )
  224.   #--------------------------------------------------------------------------
  225.   def set_actor_drive_type(actor_id, types = nil)
  226.     if actor_id == -1
  227.       # A drive type all members is changed.
  228.       $game_party.members.each { |actor|
  229.         actor.drive_type = types
  230.       }
  231.     else
  232.       actor = $game_actors[actor_id]
  233.       actor.drive_type = types if actor != nil
  234.     end
  235.   end
  236.   #--------------------------------------------------------------------------
  237.   # ○ Set Enemy Drive Type
  238.   #     actor_id : Enemy ID (-1 : All Enemies)
  239.   #     types    : Array of drive type ( When omitted: Initialization. )
  240.   #--------------------------------------------------------------------------
  241.   def set_enemy_drive_type(enemy_index, types = nil)
  242.     if enemy_index == -1
  243.       # A drive type all enemies is changed.
  244.       $game_troop.members.each { |enemy|
  245.         enemy.drive_type = types
  246.       }
  247.     else
  248.       enemy = $game_troop.members[enemy_index]
  249.       enemy.drive_type = types if enemy != nil
  250.     end
  251.   end
  252. end
  253.  
  254. #==============================================================================
  255. # ■ RPG::Skill
  256. #==============================================================================
  257.  
  258. class RPG::Skill < RPG::UsableItem
  259.   #--------------------------------------------------------------------------
  260.   # ○ Overdrive cache generation
  261.   #--------------------------------------------------------------------------
  262.   def create_overdrive_cache
  263.     @__is_overdrive = false
  264.     @__od_cost = KGC::OverDrive::GAUGE_MAX
  265.     @__od_gain_rate = 100
  266.  
  267.     self.note.split(/[\r\n]+/).each { |line|
  268.       case line
  269.       when KGC::OverDrive::Regexp::Skill::OVER_DRIVE
  270.         # Overdrive
  271.         @__is_overdrive = true
  272.         @__od_cost = $1.to_i if $1 != nil
  273.       when KGC::OverDrive::Regexp::Skill::OD_GAIN_RATE
  274.         # Gauge increase rate
  275.         @__od_gain_rate = $1.to_i
  276.       end
  277.     }
  278.     # Unless OverDrive doesn't consume gauge
  279.     unless @__is_overdrive
  280.       @__od_cost = 0
  281.     end
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ○ OverDrive is a skill?
  285.   #--------------------------------------------------------------------------
  286.   def overdrive?
  287.     create_overdrive_cache if @__is_overdrive == nil
  288.     return @__is_overdrive
  289.   end
  290.   #--------------------------------------------------------------------------
  291.   # ○ Consumption of drive gauge
  292.   #--------------------------------------------------------------------------
  293.   def od_cost
  294.     create_overdrive_cache if @__od_cost == nil
  295.     return @__od_cost
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ○ The drive gauge increase rate
  299.   #--------------------------------------------------------------------------
  300.   def od_gain_rate
  301.     create_overdrive_cache if @__od_gain_rate == nil
  302.     return @__od_gain_rate
  303.   end
  304. end
  305.  
  306. #==============================================================================
  307. # ■ Game_Battler
  308. #==============================================================================
  309.  
  310. class Game_Battler
  311.   #--------------------------------------------------------------------------
  312.   # ● Open Global Variable
  313.   #--------------------------------------------------------------------------
  314.   attr_writer   :drive_type               # Drive Type
  315.   #--------------------------------------------------------------------------
  316.   # ○ Acquire amount of drive gauge
  317.   #--------------------------------------------------------------------------
  318.   def overdrive
  319.     @overdrive = 0 if @overdrive == nil
  320.     return @overdrive
  321.   end
  322.   #--------------------------------------------------------------------------
  323.   # ○ Drive gauge maximum amount acquisition
  324.   #--------------------------------------------------------------------------
  325.   def max_overdrive
  326.     return KGC::OverDrive::GAUGE_MAX
  327.   end
  328.   #--------------------------------------------------------------------------
  329.   # ○ ドライブゲージの操作
  330.   #--------------------------------------------------------------------------
  331.   def overdrive=(value)
  332.     @overdrive = [[value, max_overdrive].min, 0].max
  333.   end
  334.  
  335.   #--------------------------------------------------------------------------
  336.   # ○ Sound played on gauge max
  337.   #--------------------------------------------------------------------------
  338.   def odmax_sound
  339.     return KGC::OverDrive::ODMAX_SOUND
  340.   end
  341.  
  342.   #------------------------#
  343.   def odmax_sound_played?
  344.     return false
  345.   end
  346.   #------------------------#
  347.  
  348.   #--------------------------------------------------------------------------
  349.   # ○ ドライブタイプの取得
  350.   #--------------------------------------------------------------------------
  351.   def drive_type
  352.     return []
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ○ OverDrive スキル習得済み判定
  356.   #--------------------------------------------------------------------------
  357.   def overdrive_skill_learned?
  358.     return true
  359.   end
  360.   #--------------------------------------------------------------------------
  361.   # ○ ゲージ表示判定
  362.   #--------------------------------------------------------------------------
  363.   def od_gauge_visible?
  364.     return false
  365.   end
  366.   #--------------------------------------------------------------------------
  367.   # ○ ゲージ増加可否判定
  368.   #--------------------------------------------------------------------------
  369.   def can_gain_overdrive?
  370.     return true
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ○ 攻撃時増加判定
  374.   #--------------------------------------------------------------------------
  375.   def drive_attack?
  376.     return drive_type.include?(KGC::OverDrive::Type::ATTACK)
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ○ 被ダメージ時増加判定
  380.   #--------------------------------------------------------------------------
  381.   def drive_damage?
  382.     return drive_type.include?(KGC::OverDrive::Type::DAMAGE)
  383.   end
  384.   #--------------------------------------------------------------------------
  385.   # ○ 勝利時増加判定
  386.   #--------------------------------------------------------------------------
  387.   def drive_victory?
  388.     return drive_type.include?(KGC::OverDrive::Type::VICTORY)
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   # ○ 逃走時増加判定
  392.   #--------------------------------------------------------------------------
  393.   def drive_escape?
  394.     return drive_type.include?(KGC::OverDrive::Type::ESCAPE)
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ○ 孤独時増加判定
  398.   #--------------------------------------------------------------------------
  399.   def drive_alone?
  400.     return drive_type.include?(KGC::OverDrive::Type::ALONE)
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ○ 行動時増加判定
  404.   #--------------------------------------------------------------------------
  405.   def drive_action?
  406.     return drive_type.include?(KGC::OverDrive::Type::ACTION)
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ○ 瀕死時増加判定
  410.   #--------------------------------------------------------------------------
  411.   def drive_fatal?
  412.     return drive_type.include?(KGC::OverDrive::Type::FATAL)
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ○ Determine guard
  416.   #--------------------------------------------------------------------------
  417.   def drive_guard?
  418.     return drive_type.include?(KGC::OverDrive::Type::GUARD)
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● ステートの付加
  422.   #     state_id : ステート ID
  423.   #--------------------------------------------------------------------------
  424.   alias add_state_KGC_OverDrive add_state unless $@
  425.   def add_state(state_id)
  426.     add_state_KGC_OverDrive(state_id)
  427.     reset_overdrive_on_dead if dead?
  428.   end
  429.   #--------------------------------------------------------------------------
  430.   # ○ スキルの消費ドライブゲージ計算
  431.   #     skill : スキル
  432.   #--------------------------------------------------------------------------
  433.   def calc_od_cost(skill)
  434.     return 0 unless skill.is_a?(RPG::Skill)
  435.  
  436.     return skill.od_cost
  437.   end
  438.   #--------------------------------------------------------------------------
  439.   # ● スキルの使用可能判定
  440.   #     skill : スキル
  441.   #--------------------------------------------------------------------------
  442.   alias skill_can_use_KGC_OverDrive? skill_can_use? unless $@
  443.   def skill_can_use?(skill)
  444.     return false unless skill_can_use_KGC_OverDrive?(skill)
  445.  
  446.     return false if calc_od_cost(skill) > overdrive
  447.     return true
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● ダメージの反映
  451.   #     user : スキルかアイテムの使用者
  452.   #    呼び出し前に @hp_damage、@mp_damage、@absorbed が設定されていること。
  453.   #--------------------------------------------------------------------------
  454.   alias execute_damage_KGC_OverDrive execute_damage unless $@
  455.   def execute_damage(user)
  456.     execute_damage_KGC_OverDrive(user)
  457.     increase_overdrive(user)
  458.   end
  459.   #--------------------------------------------------------------------------
  460.   # ○ 死亡時ドライブゲージ初期化処理
  461.   #--------------------------------------------------------------------------
  462.   def reset_overdrive_on_dead
  463.     return unless KGC::OverDrive::EMPTY_ON_DEAD
  464.     self.overdrive = 0
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   # ○ ドライブゲージ増加処理
  468.   #     attacker : 攻撃者
  469.   #--------------------------------------------------------------------------
  470.   def increase_overdrive(attacker = nil)
  471.     return unless attacker.is_a?(Game_Battler)  # 攻撃者がバトラーでない
  472.     return if self.class == attacker.class      # 攻撃側と防御側が同じ
  473.     return if hp_damage == 0 && mp_damage == 0  # ダメージなし
  474.  
  475.     if can_gain_overdrive?
  476.       increase_attacker_overdrive(attacker)
  477.       increase_defender_overdrive(attacker)
  478.     end
  479.     reset_overdrive_on_dead if dead?
  480.   end
  481.  
  482.   #--------------------------------------------------------------------------
  483.   # ○ Increase Attacker's Overdrive
  484.   #     attacker : Attacker
  485.   #--------------------------------------------------------------------------
  486.   def increase_attacker_overdrive(attacker)
  487.     return unless attacker.drive_attack?  # Drive type "Attack" none
  488.  
  489.     od_gain = [KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ATTACK], 1].max
  490.     if attacker.action.kind == 1
  491.       rate = attacker.action.skill.od_gain_rate  # Rate of the skill is applied.
  492.       od_gain = od_gain * rate / 100
  493.     end
  494.     attacker.overdrive += od_gain
  495.     # Added by Mr. Anonymous 4/9/08
  496.     # if attacker's overdrive = gauge_max
  497.     if attacker.overdrive == max_overdrive && odmax_sound_played? == false
  498.       odmax_sound.play
  499.       def odmax_sound_played?
  500.         return true
  501.       end
  502.     end
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ○ Increase Defender's Overdrive
  506.   #     attacker : Attacker
  507.   #--------------------------------------------------------------------------
  508.   def increase_defender_overdrive(attacker)
  509.     return unless self.drive_damage?  # No Drive Type "Damage"
  510.  
  511.     rate = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::DAMAGE]
  512.     od_gain = hp_damage * rate / maxhp
  513.     od_gain += mp_damage * rate / maxmp if maxmp > 0
  514.     self.overdrive += [od_gain, 1].max
  515.     # Added by Mr. Anonymous 4/9/08
  516.     # if actor recieves damage leading to overdrive = gauge_max
  517.     if self.overdrive == max_overdrive && odmax_sound_played? == false
  518.       odmax_sound.play
  519.       def odmax_sound_played?
  520.         return true
  521.       end
  522.     end
  523.   end
  524.   #--------------------------------------------------------------------------
  525.   # ● Skill Effects
  526.   #     user  : User
  527.   #     skill : Skill
  528.   #--------------------------------------------------------------------------
  529.   alias skill_effect_KGC_OverDrive skill_effect unless $@
  530.   def skill_effect(user, skill)
  531.     skill_effect_KGC_OverDrive(user, skill)
  532.  
  533.     # If imported KGC_ReproduceFunctions & item used has execute skill tag...
  534.     if $imported["ReproduceFunctions"] && $game_temp.exec_skill_on_item
  535.       return
  536.     end
  537.   end
  538. end
  539.  
  540. #==============================================================================
  541. # ■ Game_Actor
  542. #==============================================================================
  543.  
  544. class Game_Actor < Game_Battler
  545.   #--------------------------------------------------------------------------
  546.   # ● セットアップ
  547.   #     actor_id : アクター ID
  548.   #--------------------------------------------------------------------------
  549.   alias setup_KGC_OverDrive setup unless $@
  550.   def setup(actor_id)
  551.     setup_KGC_OverDrive(actor_id)
  552.  
  553.     @overdrive = 0
  554.     @drive_type = nil
  555.   end
  556.   #--------------------------------------------------------------------------
  557.   # ○ OverDrive タイプの取得
  558.   #--------------------------------------------------------------------------
  559.   def drive_type
  560.     unless @drive_type.is_a?(Array)
  561.       return KGC::OverDrive::DEFAULT_ACTOR_DRIVE_TYPE
  562.     end
  563.     return @drive_type
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # ○ OverDrive スキル習得済み判定
  567.   #--------------------------------------------------------------------------
  568.   def overdrive_skill_learned?
  569.     result = false
  570.     # 一時的に戦闘中フラグを解除
  571.     last_in_battle = $game_temp.in_battle
  572.     $game_temp.in_battle = false
  573.  
  574.     self.skills.each { |skill|
  575.       if skill.overdrive?
  576.         result = true
  577.         break
  578.       end
  579.     }
  580.     $game_temp.in_battle = last_in_battle
  581.     return result
  582.   end
  583.   #--------------------------------------------------------------------------
  584.   # ○ ゲージ増加可否判定
  585.   #--------------------------------------------------------------------------
  586.   def can_gain_overdrive?
  587.     if KGC::OverDrive::NOT_GAIN_GAUGE_HIDING
  588.       # 非表示
  589.       return false if KGC::OverDrive::HIDE_GAUGE_ACTOR.include?(self.id)
  590.     end
  591.     if KGC::OverDrive::HIDE_GAUGE_NO_OD_SKILLS
  592.       # 未修得
  593.       return false unless overdrive_skill_learned?
  594.     end
  595.  
  596.     return true
  597.   end
  598.   #--------------------------------------------------------------------------
  599.   # ○ ゲージ表示判定
  600.   #--------------------------------------------------------------------------
  601.   def od_gauge_visible?
  602.     # 戦闘中非表示
  603.     if KGC::OverDrive::HIDE_GAUGE_NOT_IN_BATTLE && !$game_temp.in_battle
  604.       return false
  605.     end
  606.     # 非表示
  607.     return false if KGC::OverDrive::HIDE_GAUGE_ACTOR.include?(self.id)
  608.     # ゲージ増加不可
  609.     return false unless can_gain_overdrive?
  610.  
  611.     return true
  612.   end
  613. end
  614.  
  615. #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
  616.  
  617. #==============================================================================
  618. # ■ Game_Enemy
  619. #==============================================================================
  620.  
  621. class Game_Enemy < Game_Battler
  622.   #--------------------------------------------------------------------------
  623.   # ● オブジェクト初期化
  624.   #     index    : 敵グループ内インデックス
  625.   #     enemy_id : 敵キャラ ID
  626.   #--------------------------------------------------------------------------
  627.   alias initialize_KGC_OverDrive initialize unless $@
  628.   def initialize(index, enemy_id)
  629.     initialize_KGC_OverDrive(index, enemy_id)
  630.  
  631.     @overdrive = 0
  632.     @drive_type = nil
  633.   end
  634.   #--------------------------------------------------------------------------
  635.   # ○ OverDrive タイプの取得
  636.   #--------------------------------------------------------------------------
  637.   def drive_type
  638.     unless @drive_type.is_a?(Array)
  639.       return KGC::OverDrive::DEFAULT_ENEMY_DRIVE_TYPE
  640.     end
  641.     return @drive_type
  642.   end
  643. end
  644.  
  645. #==============================================================================
  646. # ■ Window_Base
  647. #==============================================================================
  648.  
  649. class Window_Base < Window
  650.   #--------------------------------------------------------------------------
  651.   # ○ ドライブゲージの通常時の色 1 の取得
  652.   #--------------------------------------------------------------------------
  653.   def od_gauge_normal_color1
  654.     color = KGC::OverDrive::GAUGE_NORMAL_START_COLOR
  655.     return (color.is_a?(Integer) ? text_color(color) : color)
  656.   end
  657.   #--------------------------------------------------------------------------
  658.   # ○ ドライブゲージの通常時の色 2 の取得
  659.   #--------------------------------------------------------------------------
  660.   def od_gauge_normal_color2
  661.     color = KGC::OverDrive::GAUGE_NORMAL_END_COLOR
  662.     return (color.is_a?(Integer) ? text_color(color) : color)
  663.   end
  664.   #--------------------------------------------------------------------------
  665.   # ○ ドライブゲージの最大時の色 1 の取得
  666.   #--------------------------------------------------------------------------
  667.   def od_gauge_max_color1
  668.     color = KGC::OverDrive::GAUGE_MAX_START_COLOR
  669.     return (color.is_a?(Integer) ? text_color(color) : color)
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ○ ドライブゲージの最大時の色 2 の取得
  673.   #--------------------------------------------------------------------------
  674.   def od_gauge_max_color2
  675.     color = KGC::OverDrive::GAUGE_MAX_END_COLOR
  676.     return (color.is_a?(Integer) ? text_color(color) : color)
  677.   end
  678.   #--------------------------------------------------------------------------
  679.   # ● 名前の描画
  680.   #     actor : アクター
  681.   #     x     : 描画先 X 座標
  682.   #     y     : 描画先 Y 座標
  683.   #--------------------------------------------------------------------------
  684.   alias draw_actor_name_KGC_OverDrive draw_actor_name unless $@
  685.   def draw_actor_name(actor, x, y)
  686.     draw_actor_od_gauge(actor, x, y, 108)
  687.  
  688.     draw_actor_name_KGC_OverDrive(actor, x, y)
  689.   end
  690.   #--------------------------------------------------------------------------
  691.   # ○ ドライブゲージの描画
  692.   #     actor : アクター
  693.   #     x     : 描画先 X 座標
  694.   #     y     : 描画先 Y 座標
  695.   #     width : 幅
  696.   #--------------------------------------------------------------------------
  697.   def draw_actor_od_gauge(actor, x, y, width = 120)
  698.     return unless actor.od_gauge_visible?
  699.  
  700.     gw = width * actor.overdrive / actor.max_overdrive
  701.     gc1 = (gw == width ? od_gauge_max_color1 : od_gauge_normal_color1)
  702.     gc2 = (gw == width ? od_gauge_max_color2 : od_gauge_normal_color2)
  703.     self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
  704.     self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
  705.   end
  706. end
  707.  
  708. #==============================================================================
  709. # ■ Window_Skill
  710. #==============================================================================
  711.  
  712. if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE
  713.  
  714. class Window_Skill < Window_Selectable
  715.   #--------------------------------------------------------------------------
  716.   # ○ スキルをリストに含めるかどうか
  717.   #     skill : スキル
  718.   #--------------------------------------------------------------------------
  719.   unless $@
  720.     alias include_KGC_OverDrive? include? if method_defined?(:include?) unless $@
  721.   end
  722.   def include?(skill)
  723.     return false if skill == nil
  724.  
  725.     if defined?(include_KGC_OverDrive?)
  726.       return false unless include_KGC_OverDrive?(skill)
  727.     end
  728.  
  729.     return false unless skill.overdrive?
  730.  
  731.     return (@actor.calc_od_cost(skill) <= @actor.overdrive)
  732.   end
  733.  
  734. if method_defined?(:include_KGC_OverDrive?)
  735.   #--------------------------------------------------------------------------
  736.   # ● リフレッシュ
  737.   #--------------------------------------------------------------------------
  738.   def refresh
  739.     @data = []
  740.     for skill in @actor.skills
  741.       next unless include?(skill)
  742.       @data.push(skill)
  743.       if skill.id == @actor.last_skill_id
  744.         self.index = @data.size - 1
  745.       end
  746.     end
  747.     @item_max = @data.size
  748.     create_contents
  749.     for i in 0...@item_max
  750.       draw_item(i)
  751.     end
  752.   end
  753. end
  754.  
  755. end  # <-- class
  756. end  # <-- if KGC::OverDrive::HIDE_SKILL_LACK_OF_GAUGE
  757.  
  758. #==============================================================================
  759. # ■ Scene_Skill
  760. #==============================================================================
  761.  
  762. class Scene_Skill < Scene_Base
  763.   #--------------------------------------------------------------------------
  764.   # ● Use Skill(The effects of use other than the ally object are applied.)
  765.   #--------------------------------------------------------------------------
  766.   alias use_skill_nontarget_KGC_OverDrive use_skill_nontarget unless $@
  767.   def use_skill_nontarget
  768.     consume_od_gauge
  769.  
  770.     use_skill_nontarget_KGC_OverDrive
  771.   end
  772.   #--------------------------------------------------------------------------
  773.   # ○ Consume Drive gauge when skill is used
  774.   #--------------------------------------------------------------------------
  775.   def consume_od_gauge
  776.     @actor.overdrive -= @actor.calc_od_cost(@skill)
  777.   end
  778. end
  779.  
  780. #==============================================================================
  781. # ■ Scene_Battle
  782. #==============================================================================
  783.  
  784. class Scene_Battle < Scene_Base
  785.   #--------------------------------------------------------------------------
  786.   # ● 戦闘終了
  787.   #     result : 結果 (0:勝利 1:逃走 2:敗北)
  788.   #--------------------------------------------------------------------------
  789.   alias battle_end_KGC_OverDrive battle_end unless $@
  790.   def battle_end(result)
  791.     increase_overdrive_on_battle_end(result)
  792.  
  793.     battle_end_KGC_OverDrive(result)
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ○ 戦闘終了時のドライブゲージ増加処理
  797.   #     result : 結果 (0:Victory 1:Escape 2:Defeat)
  798.   #--------------------------------------------------------------------------
  799.   def increase_overdrive_on_battle_end(result)
  800.     case result
  801.     when 0  # 勝利
  802.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::VICTORY]
  803.       $game_party.existing_members.each { |actor|
  804.         actor.overdrive += od_gain if actor.drive_victory?
  805.       }
  806.     when 1  # 逃走
  807.       od_gain = KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ESCAPE]
  808.       $game_party.existing_members.each { |actor|
  809.         actor.overdrive += od_gain if actor.drive_escape?
  810.       }
  811.     end
  812.   end
  813.   #--------------------------------------------------------------------------
  814.   # ● 戦闘行動の実行
  815.   #--------------------------------------------------------------------------
  816.   alias execute_action_KGC_OverDrive execute_action unless $@
  817.   def execute_action
  818.     increase_overdrive_on_action
  819.  
  820.     execute_action_KGC_OverDrive
  821.   end
  822.   #--------------------------------------------------------------------------
  823.   # ○ Increase Gauge on Action
  824.   #--------------------------------------------------------------------------
  825.   def increase_overdrive_on_action
  826.     battler = @active_battler
  827.     od_gain = 0
  828.     unit = (battler.actor? ? $game_party : $game_troop)
  829.  
  830.     # Alone
  831.     if battler.drive_alone? && unit.existing_members.size == 1
  832.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ALONE]
  833.     end
  834.     # Action
  835.     if battler.drive_action?
  836.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::ACTION]
  837.     end
  838.     # Fatal
  839.     if battler.drive_fatal? && battler.hp < battler.maxhp / 4
  840.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::FATAL]
  841.     end
  842.     # Guard
  843.     if battler.drive_guard?
  844.       od_gain += KGC::OverDrive::GAIN_RATE[KGC::OverDrive::Type::GUARD]
  845.     end
  846.     battler.overdrive += od_gain
  847.   end
  848.   #--------------------------------------------------------------------------
  849.   # ● Execution of battle action: Skill
  850.   #--------------------------------------------------------------------------
  851.   alias execute_action_skill_KGC_OverDrive execute_action_skill unless $@
  852.   def execute_action_skill
  853.     execute_action_skill_KGC_OverDrive
  854.  
  855.     consume_od_gauge
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ○ Drive gauge consumption when skill is used
  859.   #--------------------------------------------------------------------------
  860.   def consume_od_gauge
  861.     skill = @active_battler.action.skill
  862.     @active_battler.overdrive -= @active_battler.calc_od_cost(skill)
  863.   end
  864. end
  865.  
  866. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
  867. #_/  The original untranslated version of this script can be found here:
  868. # http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/battle_system&tech=over_drive
  869. #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
Advertisement
Add Comment
Please, Sign In to add comment