mrbubble

Shield Blocking

Jul 3rd, 2012
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 46.43 KB | None | 0 0
  1. #==============================================================================
  2. # ++ Shield Blocking ++                                       v1.1 (7/09/12)
  3. #==============================================================================
  4. # Script by:
  5. #     Mr. Bubble ( http://mrbubblewand.wordpress.com/ )
  6. #--------------------------------------------------------------------------
  7. # The motivation for making this script came from the awkward infatuation
  8. # with newbie RM users and dual-weapon wielding. Maybe there needs to be a
  9. # better incentive for using a shield.
  10. #
  11. # With that, I chose to make a script that supports blocking in battle.
  12. # Shield block design mechanics are borrowed from World of Warcraft. This
  13. # includes the now obsolete 'block value' statistic and more recent
  14. # 'critical block' mechanic. Users have a choice of using block value to
  15. # reduce damage, a simple percentage reduction of damage, or a mix of both.
  16. #
  17. # This script introduces four new battler parameters for both actors and
  18. # enemies:
  19. #
  20. #   blv : BLock Value - reduces blocked damage by a flat amount
  21. #   blr : BLock reduction Rate - reduces damage by a percentage
  22. #   blc : BLock Chance - percentage chance to block normally
  23. #   cbl : Critical BLock chance - percentage chance to block critically
  24. #  
  25. # Additional options include negating critical hits when they are blocked.
  26. #--------------------------------------------------------------------------
  27. #   ++ Changelog ++
  28. #--------------------------------------------------------------------------
  29. # v1.1 : Typo/Bugfix with $imported variable. (7/09/2012)
  30. # v1.0 : Initial release. (7/03/2012)
  31. #--------------------------------------------------------------------------
  32. #   ++ Installation ++
  33. #--------------------------------------------------------------------------
  34. # Install this script in the Materials section in your project's
  35. # script editor.
  36. #
  37. # Install below YEA - Ace Status Menu if you also have that installed.
  38. #==============================================================================
  39. #   ++ Blocking Notetags ++
  40. #==============================================================================
  41. # The following Notetags are for Actors, Classes, Weapons, Armors, Enemies,
  42. # and States:
  43. #
  44. # Note: Some tags are given shorter tags for typing convenience. You only
  45. #       need to use one <tag> from a given group for a notebox.
  46. #
  47. # <blocking>
  48. # <block>
  49. #   This tag allows the ability to block. Blocking an attack reduces damage
  50. #   taken depending on the battler's block value (BLV) and block reduction
  51. #   rate (BLR). This tag is not limited to shields. Any actor, class, or
  52. #   piece of equipment can provide the ability to block. Enemies can
  53. #   block too.
  54. #
  55. # <critical blocking>
  56. # <critical block>
  57. # <crit block>
  58. #   This tag allows the critical blocking ability. Critical blocks provide a
  59. #   bonus to block value and block reduction rate when critical blocks occur.
  60. #   Critical blocks take precedence over normal blocks if both occur at the
  61. #   same time. This tag is not limited to shields. Any actor, class, or
  62. #   piece of equipment can provide the ability to critical block. Enemies
  63. #   can critical block too.
  64. #
  65. # <block value: +n>
  66. # <block value: -n>
  67. #   This tag modifies block value (BLV). Block value directly subtracts
  68. #   damage from an attack when a block occurs. For example, if an attacker
  69. #   does 200 damage, and a defender has 50 block value, the defender can
  70. #   potentially reduce the damage to 150 damage if the attack is blocked.
  71. #   Block value stacks with block reduction rate (BLR).
  72. #
  73. # <block reduction rate: +n%>
  74. # <block reduction rate: -n%>
  75. # <block rate: +n%>
  76. # <block rate: -n%>
  77. #   This tag modifies block reduction rate (BLR) which reduces damage by a
  78. #   percentage rate. For example, if BLR is 30, damage will be reduced by
  79. #   30% when blocked. This effect stacks with block value (BLV).
  80. #   Do not mistake "block rate" with "block chance". They are different
  81. #   within this script.
  82. #  
  83. # <block chance: +n%>
  84. # <block chance: -n%>
  85. #   This tag modifies normal block chance (BLC). Normal block chance
  86. #   affects how often normal blocks occur.
  87. #
  88. # <critical block chance: +n%>
  89. # <critical block chance: -n%>
  90. # <crit block chance: +n%>
  91. # <crit block chance: -n%>
  92. #   This tag modifies critical block chance (CBL). Critical block chance
  93. #   affects how often critical blocks occur.
  94. #--------------------------------------------------------------------------
  95. # The following Notetags are for Skills and Items only:
  96. #
  97. # <unblockable>
  98. #   Items and skills with this tag are rendered unblockable. This tag will
  99. #   only affect blocking. It has no effect on evasion, etc.
  100. #--------------------------------------------------------------------------
  101. #   ++ Blocking Formula ++
  102. #--------------------------------------------------------------------------
  103. # This is a simplified internal formula used to calculate total block
  104. # damage reduction:
  105. #
  106. #   damage = (damage - block_value) * (1 - (block_reduction_rate))
  107. #
  108. # Rates in VXAce are generally kept as values between 0.0 and 1.0
  109. #
  110. # A bonus multiplier is applied to block_value and block_reduction_rate
  111. # when a critical block occurs.
  112. #--------------------------------------------------------------------------
  113. #   ++ Compatibility ++
  114. #--------------------------------------------------------------------------
  115. # This script has built-in compatibility with the following scripts:
  116. #     - Yanfly Engine Ace - Ace Status Menu
  117. #
  118. # This script aliases the following default VXA methods:
  119. #
  120. #     Game_Battler#execute_damage
  121. #     Game_Battler#make_damage_value
  122. #     Game_Battler#apply_guard
  123. #
  124. #     Game_ActionResult#clear_hit_flags
  125. #     Game_ActionResult#clear_damage_values
  126. #
  127. #     Window_BattleLog#display_hp_damage
  128. #    
  129. # There are no default method overwrites.
  130. #
  131. # Requests for compatibility with other scripts are welcome.
  132. #--------------------------------------------------------------------------
  133. #     Compatibility Notes
  134. #--------------------------------------------------------------------------
  135. # To add the various blocking parameters to the Ace Status Menu
  136. # "Properties" window, add the lines:
  137. #
  138. #             [:blv, "Block Value"],
  139. #             [:blr, "Block Reduction Rate"],
  140. #             [:blc, "Block Chance"],
  141. #             [:cbl, "Critical Block Chance"],
  142. #
  143. # Under any one of the three PROPERTIES_COLUMN under Properties Window
  144. # Settings.
  145. #--------------------------------------------------------------------------
  146. #   ++ Terms and Conditions ++
  147. #--------------------------------------------------------------------------
  148. # Please do not repost this script elsewhere without permission.
  149. # Free for non-commercial use. For commercial use, contact me first.
  150. #
  151. # Newest versions of this script can be found at
  152. #                                           http://mrbubblewand.wordpress.com/
  153. #==============================================================================
  154.  
  155. $imported = {} if $imported.nil?
  156. $imported["BubsBlocking"] = true
  157.  
  158. #==========================================================================
  159. # ++ START OF USER CUSTOMIZATION MODULE ++
  160. #==========================================================================
  161. module Bubs
  162.   #==========================================================================
  163.   # ++ Blocking Settings
  164.   #==========================================================================
  165.   module Blocking
  166.   #--------------------------------------------------------------------------
  167.   #   Block Parameters Vocab
  168.   #--------------------------------------------------------------------------
  169.   BLV_VOCAB = "Block Value"             # Block Value
  170.   BLR_VOCAB = "Block Reduction Rate"    # Block Reduction Rate
  171.   BLC_VOCAB = "Block Chance"            # Block Chance
  172.   CBL_VOCAB = "Critical Block Chance"   # Critical Block Chance
  173.  
  174.   #--------------------------------------------------------------------------
  175.   #   Block Parameters Vocab Abbreviations
  176.   #--------------------------------------------------------------------------
  177.   BLV_VOCAB_A = "BLV"    # Block Value Abbr.
  178.   BLR_VOCAB_A = "BLR"    # Block Reduction Rate Abbr.
  179.   BLC_VOCAB_A = "BLC"    # Block Chance Abbr.
  180.   CBL_VOCAB_A = "CBL"    # Critical Block Chance Abbr.
  181.  
  182.   #--------------------------------------------------------------------------
  183.   #   Default Blocking Armor Types
  184.   #--------------------------------------------------------------------------
  185.   # This setting allows you to automatically set certain Armor Type IDs
  186.   # with the Blocking trait. Armor Type IDs can be found under the "Terms"
  187.   # tab in the database of your project. For example, this can be useful
  188.   # if you have shields as an Armor Type.
  189.   BLOCKING_ARMOR_TYPES = [5,6]
  190.  
  191.   #--------------------------------------------------------------------------
  192.   #   Default Critical Blocking Armor Types
  193.   #--------------------------------------------------------------------------
  194.   # This setting allows you to automatically set certain Armor Type IDs
  195.   # with the Critical Blocking trait. Armor Type IDs can be found under the
  196.   # "Terms" tab in the database of your project.
  197.   #
  198.   # Critical blocking provides a higher damage reduction effect than normal
  199.   # blocking.
  200.   CRITICAL_BLOCKING_ARMOR_TYPES = [6]
  201.  
  202.   #--------------------------------------------------------------------------
  203.   #   Unblockable Elements Setting
  204.   #--------------------------------------------------------------------------
  205.   # This setting allows you to have unblockable elements for any item
  206.   # or skill that has an Element ID listed in the array. Element ID numbers
  207.   # can be found under the "Terms" tab in the database of your project.
  208.   UNBLOCKABLE_ELEMENTS = []
  209.   #--------------------------------------------------------------------------
  210.   #   Unblockable Skill Types Setting
  211.   #--------------------------------------------------------------------------
  212.   # This setting allows you to have unblockable Skill Type in the event
  213.   # you choose to make such a skill category. Skill Type ID numbers
  214.   # can be found under the "Terms" tab in the database of your project.
  215.   UNBLOCKABLE_SKILL_TYPES = []
  216.  
  217.   #--------------------------------------------------------------------------
  218.   #   Blockable Hit Types Setting
  219.   #--------------------------------------------------------------------------
  220.   # This setting allows you to decide what kind of hit types are blockable
  221.   # Add the hit type number into the array to allow that type to be blockable.
  222.   #
  223.   # 0 : Certain hits
  224.   # 1 : Physical attacks
  225.   # 2 : Magical attacks
  226.   BLOCKABLE_HIT_TYPES = [1]
  227.  
  228.   #--------------------------------------------------------------------------
  229.   #   Block Value Variance
  230.   #--------------------------------------------------------------------------
  231.   # This value determines the variance range for Block Value when attacks
  232.   # are blocked. This works similarly to the variance value for items and
  233.   # skills. This has no effect on Block Reduction Rate.
  234.   BLV_VARIANCE = 10
  235.  
  236.   #--------------------------------------------------------------------------
  237.   #   Block Sound Effects
  238.   #--------------------------------------------------------------------------
  239.   # These settings allow you to choose a sound effect for normal and critical
  240.   # blocks.
  241.   #                    "Filename", Volume, Pitch
  242.   NORMAL_BLOCK_SE   = ["Evasion2",     80,   110]   # Normal Block SE
  243.   CRITICAL_BLOCK_SE = ["Evasion2",     80,   110]   # Critical Block SE
  244.  
  245.   #--------------------------------------------------------------------------
  246.   #   Actor Default Block Parameter Formulas
  247.   #--------------------------------------------------------------------------
  248.   # The following settings are formulas used for producing the base values
  249.   # for blocking parameters. The values produced by these formulas stack
  250.   # with any bonuses gained from equipped items, class, states, etc.
  251.   #
  252.   # Formulas are made within the scope of class Game_Battler. This means
  253.   # parameters such as (but not limited to) atk, def, level, luk, etc. can
  254.   # be used within formulas. If you wish to use the defense parameter
  255.   # "def", you must use the term "self.def" instead.
  256.   #
  257.   # Blocking-specific battler parameters may also be used:
  258.   #   blv : BLock Value
  259.   #   blr : BLock reduction Rate
  260.   #   blc : BLock Chance
  261.   #   cbl : Critical BLock chance
  262.   #
  263.   # :base_blr, :base_blc, and :base_cbl should produce rate values
  264.   # between 0~100.
  265.   ACTOR_BLOCK_SETTINGS = {
  266.     :base_blv => "(self.def / 4)",  # Base Block Value Formula
  267.     :base_blr => "0",               # Base Block Reduction Rate Formula
  268.     :base_blc => "5",               # Base Block Chance Formula
  269.     :base_cbl => "(blc / 3)",       # Base Critical Block Chance Formula
  270.  
  271.   #--------------------------------------------------------------------------
  272.   #   Actor Maximum Block Parameter Settings
  273.   #--------------------------------------------------------------------------
  274.   # The following settings allow you to set maximum values for any block
  275.   # parameters for actors.
  276.     :max_blv => 99999,    # Maximum Block Value
  277.     :max_blr => 100,      # Maximum Block Reduction Rate (%)
  278.     :max_blc => 75,       # Maximum Block Chance (%)
  279.     :max_cbl => 50,       # Maximum Critical Block Chance (%)
  280.    
  281.   #--------------------------------------------------------------------------
  282.   #   Actor Critical Block Multiplier Settings
  283.   #--------------------------------------------------------------------------
  284.   # You can set Block Value and Block Reduction Rate multiplier for
  285.   # actor Critical Blocks here.
  286.     :critical_blv_multiplier => 2.0, # Block Value Crit Multiplier
  287.     :critical_blr_multiplier => 2.0, # Block Reduction Rate Crit Multiplier
  288.    
  289.   #--------------------------------------------------------------------------
  290.   #   Actor TP Gain On Block Formula
  291.   #--------------------------------------------------------------------------
  292.   # You may specify the formula used for TP gain whenever a block is made
  293.   # by an actor. This setting is for advanced users.
  294.   #
  295.   # Data included within the scope of Game_Battler is available which
  296.   # includes, but is not limited to, atk, mhp, mmp, tp, tcr, etc.
  297.   #
  298.   # "blocked_damage" is available as a variable which holds the total
  299.   # amount of damage that was blocked by the actor.
  300.     :tp_gain => "40 * (blocked_damage / mhp.to_f) * tcr",
  301.    
  302.   #--------------------------------------------------------------------------
  303.   #   Actor Block - Cancel Critical Hits
  304.   #--------------------------------------------------------------------------
  305.   # true  : Prevent critical hits when an attack is blocked.
  306.   # false : Critical hits are not prevented.
  307.     :cancel_critical_hits => true,
  308.    
  309.   #--------------------------------------------------------------------------
  310.   #   Actor Block - In-battle Text
  311.   #--------------------------------------------------------------------------
  312.   # These settings allow you to change the in-battle text when a normal
  313.   # or critical block occurs. The first %s is the actor's name while
  314.   # the second %s is the amount of damage blocked.
  315.     :block_text          => "%s blocked %s damage!",            # Normal block
  316.     :critical_block_text => "%s critically blocked %s damage!", # Critical block
  317.    
  318.   } # <-- Do not delete
  319.  
  320.   #--------------------------------------------------------------------------
  321.   #   Enemy Default Block Parameter Formulas
  322.   #--------------------------------------------------------------------------
  323.   # The following settings are formulas used for producing the base values
  324.   # for blocking parameters. The values produced by these formulas stack
  325.   # with any bonuses gained from states, etc.
  326.   #
  327.   # Formulas are made within the scope of class Game_Battler. This means
  328.   # parameters such as (but not limited to) atk, def, level, luk, etc. can
  329.   # be used within formulas. If you wish to use the defense parameter
  330.   # "def", you must use the term "self.def" instead.
  331.   #
  332.   # Blocking-specific battler parameters may also be used:
  333.   #   blv : BLock Value
  334.   #   blr : BLock Reduction rate
  335.   #   blc : BLock Chance
  336.   #   cbl : Critical BLock chance
  337.   #
  338.   # :base_blr, :base_blc, and :base_cbl should produce rate values
  339.   # between 0~100.
  340.   ENEMY_BLOCK_SETTINGS = {
  341.     :base_blv => "(self.def / 4)",  # Base Block Value Formula
  342.     :base_blr => "0",               # Base Block Reduction Rate Formula
  343.     :base_blc => "5",               # Base Block Chance Formula
  344.     :base_cbl => "(blc / 3)",       # Base Critical Block Chance Formula
  345.    
  346.   #--------------------------------------------------------------------------
  347.   #   Enemy Maximum Block Parameter Settings
  348.   #--------------------------------------------------------------------------
  349.   # The following settings allow you to set maximum values for any block
  350.   # parameters for enemies.
  351.     :max_blv => 99999,    # Maximum Block Value
  352.     :max_blr => 100,      # Maximum Block Reduction Rate (%)
  353.     :max_blc => 75,       # Maximum Block Chance (%)
  354.     :max_cbl => 50,       # Maximum Critical Block Chance (%)
  355.    
  356.   #--------------------------------------------------------------------------
  357.   #   Enemy Critical Block Multiplier Settings
  358.   #--------------------------------------------------------------------------
  359.   # You can set Block Value and Block Reduction Rate multiplier for
  360.   # enemy Critical Blocks here.
  361.     :critical_blv_multiplier => 2.0, # Block Value Crit Multiplier
  362.     :critical_blr_multiplier => 2.0, # Block Reduction Rate Crit Multiplier
  363.    
  364.   #--------------------------------------------------------------------------
  365.   #   Enemy TP Gain On Block Formula
  366.   #--------------------------------------------------------------------------
  367.   # You may specify the formula used for TP gain whenever a block is made
  368.   # by an enemy. This setting is for advanced users.
  369.   #
  370.   # Data included within the scope of Game_Battler is available which
  371.   # includes, but is not limited to, atk, mhp, mmp, tp, tcr, etc.
  372.   #
  373.   # "blocked_damage" is available as a variable which holds the total
  374.   # amount of damage that was blocked by the enemy.
  375.     :tp_gain => "40 * (blocked_damage / mhp.to_f) * tcr",
  376.  
  377.   #--------------------------------------------------------------------------
  378.   #   Enemy Block - Cancel Critical Hits
  379.   #--------------------------------------------------------------------------
  380.   # true  : Prevent critical hits when an attack is blocked.
  381.   # false : Critical hits are not prevented.
  382.     :cancel_critical_hits => true,
  383.  
  384.   #--------------------------------------------------------------------------
  385.   #   Enemy Block - In-battle Text
  386.   #--------------------------------------------------------------------------
  387.   # These settings allow you to change the in-battle text when a normal
  388.   # or critical block occurs. The first %s is the enemy's name while
  389.   # the second %s is the amount of damage blocked.
  390.     :block_text          => "%s blocked %s damage!",            # Normal block
  391.     :critical_block_text => "%s critically blocked %s damage!", # Critical block
  392.  
  393.   } # <-- Do not delete
  394.  
  395.   end # module Blocking
  396. end # module Bubs
  397.  
  398. #==========================================================================
  399. # ++ END OF USER CUSTOMIZATION MODULE ++
  400. #==========================================================================
  401.  
  402.  
  403.  
  404. #==========================================================================
  405. # ++ Bubs::Regexp
  406. #==========================================================================
  407. module Bubs
  408.   module Regexp
  409.     module BaseItem
  410.       CAN_BLOCK = /<(?:BLOCKING|block)>/i
  411.       CAN_CRIT_BLOCK = /<(?:CRITICAL|crit)[\s_](?:BLOCKING|block)>/i
  412.       BLOCK_VALUE = /<(?:BLOCK_VALUE|block value):\s*([-+]?\d+\.?\d*)>/i
  413.      
  414.       BLOCK_REDUCTION_RATE =
  415.   /<(?:BLOCK[\s_]REDUCTION|block)[\s_]rate:\s*([-+]?\d+\.?\d*)[%ï¼…]>/i
  416.      
  417.       BLOCK_CHANCE =
  418.   /<(?:BLOCK_CHANCE|block chance):\s*([-+]?\d+\.?\d*)[%ï¼…]>/i
  419.      
  420.       CRITICAL_BLOCK_CHANCE =
  421.   /<(?:CRITICAL|crit)[\s_]block[\s_]chance:\s*([-+]?\d+\.?\d*)[%ï¼…]>/i
  422.      
  423.     end # module BaseItem
  424.  
  425.     module UsableItem
  426.       UNBLOCKABLE = /<?:UNBLOCKABLE|unblockable>/i
  427.     end # module UsableItem
  428.   end # module Regexp
  429. end # module Bubs
  430.  
  431.  
  432.  
  433. #==========================================================================
  434. # ++ DataManager
  435. #==========================================================================
  436. module DataManager
  437.   #--------------------------------------------------------------------------
  438.   # alias : load_database
  439.   #--------------------------------------------------------------------------
  440.   class << self; alias load_database_bubs_blocking load_database; end
  441.   def self.load_database
  442.     load_database_bubs_blocking # alias
  443.     load_notetags_bubs_blocking
  444.   end
  445.  
  446.   #--------------------------------------------------------------------------
  447.   # new method : load_notetags_bubs_blocking
  448.   #--------------------------------------------------------------------------
  449.   def self.load_notetags_bubs_blocking
  450.     groups = [$data_actors, $data_classes, $data_skills, $data_items,
  451.       $data_weapons, $data_armors, $data_enemies, $data_states]
  452.     for group in groups
  453.       for obj in group
  454.         next if obj.nil?
  455.         obj.load_notetags_bubs_blocking
  456.       end # for obj
  457.     end # for group
  458.   end # def
  459.  
  460. end # module DataManager
  461.  
  462.  
  463. #==========================================================================
  464. # ++ RPG::BaseItem
  465. #==========================================================================
  466. # A superclass of actor, class, skill, item, weapon, armor, enemy, and state.
  467. class RPG::BaseItem
  468.   #--------------------------------------------------------------------------
  469.   # public instance variables
  470.   #--------------------------------------------------------------------------
  471.   attr_accessor :blocking
  472.   attr_accessor :critical_blocking
  473.   attr_accessor :unblockable
  474.   attr_accessor :block_value
  475.   attr_accessor :block_reduction_rate
  476.   attr_accessor :block_chance
  477.   attr_accessor :critical_block_chance
  478.  
  479.   #--------------------------------------------------------------------------
  480.   # common cache : load_notetags_bubs_blocking
  481.   #--------------------------------------------------------------------------
  482.   def load_notetags_bubs_blocking
  483.     @blocking = false
  484.     @critical_blocking = false
  485.     @unblockable = false
  486.     @block_value = 0.0
  487.     @block_reduction_rate = 0.0
  488.     @block_chance = 0.0
  489.     @critical_block_chance = 0.0
  490.    
  491.     default_block_settings
  492.    
  493.     self.note.split(/[\r\n]+/).each { |line|
  494.       case line
  495.  
  496.       when Bubs::Regexp::BaseItem::CAN_BLOCK
  497.         @blocking = true
  498.        
  499.       when Bubs::Regexp::BaseItem::CAN_CRIT_BLOCK
  500.         @critical_blocking = true
  501.        
  502.       when Bubs::Regexp::BaseItem::BLOCK_VALUE
  503.         @block_value = $1.to_f
  504.        
  505.       when Bubs::Regexp::BaseItem::BLOCK_REDUCTION_RATE
  506.         @block_reduction_rate = $1.to_f
  507.        
  508.       when Bubs::Regexp::BaseItem::BLOCK_CHANCE
  509.         @block_chance = $1.to_f
  510.        
  511.       when Bubs::Regexp::BaseItem::CRITICAL_BLOCK_CHANCE
  512.         @critical_block_chance = $1.to_f
  513.  
  514.       end
  515.     } # self.note.split
  516.    
  517.   end # def
  518.  
  519.   #--------------------------------------------------------------------------
  520.   # common cache : default_block_settings
  521.   #--------------------------------------------------------------------------
  522.   def default_block_settings
  523.     if self.is_a?(RPG::Armor)
  524.       @blocking = Bubs::Blocking::BLOCKING_ARMOR_TYPES.include?(@atype_id)
  525.       @critical_blocking = Bubs::Blocking::CRITICAL_BLOCKING_ARMOR_TYPES.include?(@atype_id)
  526.     elsif self.is_a?(RPG::Skill)
  527.       @unblockable = Bubs::Blocking::UNBLOCKABLE_SKILL_TYPES.include?(@stype_id)
  528.     end # self.is_a?(RPG::Armor)
  529.   end # def default_block_settings
  530. end # module RPG::BaseItem
  531.  
  532.  
  533.  
  534. #==========================================================================
  535. # ++ RPG::UsableItem
  536. #==========================================================================
  537. # The Superclass of Skill and Item.
  538. class RPG::UsableItem < RPG::BaseItem
  539.   #--------------------------------------------------------------------------
  540.   # common cache : load_notetags_bubs_blocking
  541.   #--------------------------------------------------------------------------
  542.   def load_notetags_bubs_blocking
  543.     @unblockable = false
  544.    
  545.     default_block_settings
  546.  
  547.     self.note.split(/[\r\n]+/).each { |line|
  548.       case line
  549.  
  550.       when Bubs::Regexp::UsableItem::UNBLOCKABLE
  551.         @unblockable = true
  552.        
  553.       end
  554.     } # self.note.split
  555.   end # def
  556.  
  557. end # class RPG::UsableItem
  558.  
  559.  
  560.  
  561. #==============================================================================
  562. # ++ Vocab
  563. #==============================================================================
  564. module Vocab
  565.   # Actor Blocking Text
  566.   ActorBlock = Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:block_text]
  567.   ActorCritBlock = Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:critical_block_text]
  568.  
  569.   # Actor Blocking Text
  570.   EnemyBlock = Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:block_text]
  571.   EnemyCritBlock = Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:critical_block_text]
  572.  
  573.   # Block Value
  574.   def self.blv; Bubs::Blocking::BLV_VOCAB; end
  575.   def self.blv_a; Bubs::Blocking::BLV_VOCAB_A; end
  576.   # Block Reduction Rate
  577.   def self.blr; Bubs::Blocking::BLR_VOCAB; end
  578.   def self.blr_a; Bubs::Blocking::BLR_VOCAB_A; end
  579.   # Block Chance
  580.   def self.blc; Bubs::Blocking::BLC_VOCAB; end
  581.   def self.blc_a; Bubs::Blocking::BLC_VOCAB_A; end
  582.   # Critical Block Chance
  583.   def self.cbl; Bubs::Blocking::CBL_VOCAB; end
  584.   def self.cbl_a; Bubs::Blocking::CBL_VOCAB_A; end
  585. end # module Vocab
  586.  
  587. #==============================================================================
  588. # ++ Sound
  589. #==============================================================================
  590. module Sound
  591.   # Normal Block SE
  592.   def self.play_block
  593.     Audio.se_play("/Audio/SE/" + Bubs::Blocking::NORMAL_BLOCK_SE[0],
  594.                   Bubs::Blocking::NORMAL_BLOCK_SE[1],
  595.                   Bubs::Blocking::NORMAL_BLOCK_SE[2])
  596.   end
  597.   # Critical Block SE
  598.   def self.play_critical_block
  599.     Audio.se_play("/Audio/SE/" + Bubs::Blocking::CRITICAL_BLOCK_SE[0],
  600.                   Bubs::Blocking::CRITICAL_BLOCK_SE[1],
  601.                   Bubs::Blocking::CRITICAL_BLOCK_SE[2])
  602.   end
  603. end # module Sound
  604.  
  605.  
  606.  
  607. #==========================================================================
  608. # ++ Game_BattlerBase
  609. #==========================================================================
  610. class Game_BattlerBase
  611.   #--------------------------------------------------------------------------
  612.   # new method : can_block?
  613.   #--------------------------------------------------------------------------
  614.   def can_block?
  615.     blocking? && movable?
  616.   end
  617.  
  618.   #--------------------------------------------------------------------------
  619.   # new method : can_critical_block?
  620.   #--------------------------------------------------------------------------
  621.   def can_critical_block?
  622.     critical_blocking? && movable?
  623.   end
  624.  
  625.   #--------------------------------------------------------------------------
  626.   # new method : blocking?
  627.   #--------------------------------------------------------------------------
  628.   def blocking?
  629.     if actor?
  630.       return true if self.actor.blocking
  631.       return true if self.class.blocking
  632.       for equip in equips
  633.         next if equip.nil?
  634.         return true if equip.blocking
  635.       end
  636.     else
  637.       return true if self.enemy.blocking
  638.     end
  639.     for state in states
  640.       next if state.nil?
  641.       return true if state.blocking
  642.     end
  643.     return false
  644.   end # def blocking?
  645.  
  646.   #--------------------------------------------------------------------------
  647.   # new method : critical_blocking?
  648.   #--------------------------------------------------------------------------
  649.   def critical_blocking?
  650.     if actor?
  651.       return true if self.actor.critical_blocking
  652.       return true if self.class.critical_blocking
  653.       for equip in equips
  654.         next if equip.nil?
  655.         return true if equip.critical_blocking
  656.       end
  657.     else
  658.       return true if self.enemy.critical_blocking
  659.     end
  660.     for state in states
  661.       next if state.nil?
  662.       return true if state.critical_blocking
  663.     end
  664.     return false
  665.   end # def critical_blocking?
  666.  
  667.   #--------------------------------------------------------------------------
  668.   # new method : unblockable?        # this method is not used by default
  669.   #--------------------------------------------------------------------------
  670.   def unblockable?
  671.     if actor?
  672.       return true if self.actor.unblockable
  673.       return true if self.class.unblockable
  674.       for armor in armors
  675.         next if armor.nil?
  676.         return true if armor.unblockable
  677.       end
  678.     else
  679.       return true if self.enemy.unblockable
  680.     end
  681.     for state in states
  682.       next if state.nil?
  683.       return true if state.unblockable
  684.     end
  685.     return false
  686.   end # def unblockable?
  687.  
  688.   #--------------------------------------------------------------------------
  689.   # new method : blv        # BLock Value
  690.   #--------------------------------------------------------------------------
  691.   def blv
  692.     n = 0.0
  693.     if actor?
  694.       n += Float(eval(Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:base_blv]))
  695.       n += self.actor.block_value
  696.       n += self.class.block_value
  697.       for equip in equips
  698.         next if equip.nil?
  699.         n += equip.block_value
  700.       end
  701.     else
  702.       n += Float(eval(Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:base_blv]))
  703.       n += self.enemy.block_value
  704.     end
  705.     for state in states
  706.       next if state.nil?
  707.       n += state.block_value
  708.     end
  709.     # determine maximum block value
  710.     n = [n, blv_max].min
  711.     n = [n, 0].max
  712.    
  713.     return n
  714.   end # def blv
  715.  
  716.  
  717.   #--------------------------------------------------------------------------
  718.   # new method : blr        # BLock reduction Rate
  719.   #--------------------------------------------------------------------------
  720.   def blr
  721.     n = 0.0
  722.     if actor?
  723.       n += Float(eval(Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:base_blr])) * 100
  724.       n += self.actor.block_reduction_rate
  725.       n += self.class.block_reduction_rate
  726.       for equip in equips
  727.         next if equip.nil?
  728.         n += equip.block_reduction_rate
  729.       end
  730.     else
  731.       n += Float(eval(Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:base_blr])) * 100
  732.       n += self.enemy.block_reduction_rate
  733.     end
  734.     for state in states
  735.       next if state.nil?
  736.       n += state.block_reduction_rate
  737.     end
  738.     n *= 0.01
  739.     # determine maximum block rate
  740.     n = [n, blr_max].min    
  741.     n = [n, 0].max
  742.    
  743.     return n
  744.   end # def blr
  745.  
  746.   #--------------------------------------------------------------------------
  747.   # new method : blc        # BLock Chance
  748.   #--------------------------------------------------------------------------
  749.   def blc
  750.     n = 0.0
  751.     if actor?
  752.       n += Float(eval(Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:base_blc])) * 100
  753.       n += self.actor.block_chance
  754.       n += self.class.block_chance
  755.       for equip in equips
  756.         next if equip.nil?
  757.         n += equip.block_chance
  758.       end
  759.     else
  760.       n += Float(eval(Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:base_blc])) * 100
  761.       n += self.enemy.block_chance
  762.     end
  763.     for state in states
  764.       next if state.nil?
  765.       n += state.block_chance
  766.     end
  767.     n *= 0.01
  768.     # determine maximum block chance
  769.     n = [n, blc_max].min
  770.     n = [n, 0].max
  771.     return n
  772.   end # def blc
  773.  
  774.   #--------------------------------------------------------------------------
  775.   # new method : cbl        # Critical BLock chance
  776.   #--------------------------------------------------------------------------
  777.   def cbl
  778.     n = 0.0
  779.     if actor?
  780.       n += Float(eval(Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:base_cbl])) * 100
  781.       n += self.actor.critical_block_chance
  782.       n += self.class.critical_block_chance
  783.       for equip in equips
  784.         next if equip.nil?
  785.         n += equip.critical_block_chance
  786.       end
  787.     else
  788.       n += Float(eval(Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:base_cbl])) * 100
  789.       n += self.enemy.critical_block_chance
  790.     end
  791.     for state in states
  792.       next if state.nil?
  793.       n += state.critical_block_chance
  794.     end
  795.     n *= 0.01
  796.     # determine maximum critical block chance
  797.     n = [n, cbl_max].min
  798.     n = [n, 0].max
  799.    
  800.     return n
  801.   end # def cbl
  802.  
  803.   #--------------------------------------------------------------------------
  804.   # new method : blv_max        # BLock Value
  805.   #--------------------------------------------------------------------------
  806.   def blv_max
  807.     if actor?
  808.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:max_blv]
  809.     else
  810.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:max_blv]
  811.     end
  812.   end
  813.  
  814.   #--------------------------------------------------------------------------
  815.   # new method : blr_max        # BLock reduction Rate
  816.   #--------------------------------------------------------------------------
  817.   def blr_max
  818.     if actor?
  819.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:max_blr] * 0.01
  820.     else
  821.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:max_blr] * 0.01
  822.     end
  823.   end
  824.  
  825.   #--------------------------------------------------------------------------
  826.   # new method : blc_max        # BLock Chance
  827.   #--------------------------------------------------------------------------
  828.   def blc_max
  829.     if actor?
  830.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:max_blc] * 0.01
  831.     else
  832.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:max_blc] * 0.01
  833.     end
  834.   end
  835.  
  836.   #--------------------------------------------------------------------------
  837.   # new method : cbl_max        # Critical BLock chance
  838.   #--------------------------------------------------------------------------
  839.   def cbl_max
  840.     if actor?
  841.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:max_cbl] * 0.01
  842.     else
  843.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:max_cbl] * 0.01
  844.     end
  845.   end
  846.  
  847. end # class Game_BattlerBase
  848.  
  849.  
  850.  
  851. #==============================================================================
  852. # ++ Game_Battler
  853. #==============================================================================
  854. class Game_Battler < Game_BattlerBase
  855.   #--------------------------------------------------------------------------
  856.   # alias : make_damage_value
  857.   #--------------------------------------------------------------------------
  858.   alias make_damage_value_bubs_blocking make_damage_value
  859.   def make_damage_value(user, item)
  860.     check_block(user, item)
  861.     make_damage_value_bubs_blocking(user, item) # alias
  862.   end
  863.  
  864.   #--------------------------------------------------------------------------
  865.   # alias : apply_guard
  866.   #--------------------------------------------------------------------------
  867.   alias apply_guard_bubs_blocking apply_guard
  868.   def apply_guard(damage)
  869.     apply_block(apply_guard_bubs_blocking(damage)) # alias
  870.   end
  871.  
  872.   #--------------------------------------------------------------------------
  873.   # new method : apply_block
  874.   #--------------------------------------------------------------------------
  875.   def apply_block(damage)
  876.     return damage unless @result.blocked || @result.critical_blocked
  877.     damage = apply_block_value(damage)
  878.     damage = apply_block_reduction_rate(damage)
  879.   end
  880.  
  881.   #--------------------------------------------------------------------------
  882.   # new method : blockable_hit_types
  883.   #--------------------------------------------------------------------------
  884.   def blockable_hit_types
  885.     Bubs::Blocking::BLOCKABLE_HIT_TYPES
  886.   end
  887.  
  888.   #--------------------------------------------------------------------------
  889.   # new method : check_block
  890.   #--------------------------------------------------------------------------
  891.   def check_block(user, item)
  892.     # Avoids block checking more than once
  893.     return if @result.block_checked
  894.     @result.block_checked = true
  895.  
  896.     # Check for unblockable flag
  897.     return if check_unblockable(user, item)
  898.    
  899.     # Do block checks and rolls
  900.     @result.blocked = (can_block? && block?)
  901.     @result.critical_blocked = (can_critical_block? && critical_block?)
  902.  
  903.     # Cancel out critical if blocked
  904.     if @result.blocked || @result.critical_blocked
  905.       @result.critical = false if cancel_critical_hits?
  906.     end
  907.   end
  908.  
  909.   #--------------------------------------------------------------------------
  910.   # new method : check_unblockable
  911.   #--------------------------------------------------------------------------
  912.   def check_unblockable(user, item)
  913.     # Unblockable attack check
  914.     return true if item.unblockable
  915.     # Blockable hit type check
  916.     return true unless blockable_hit_types.include?(item.hit_type)
  917.     # Unblockable element check
  918.     return true if Bubs::Blocking::UNBLOCKABLE_ELEMENTS.include?(item.damage.element_id)
  919.     # Unblockable skill type check
  920.     return true if item.is_a?(RPG::Skill) &&
  921.             Bubs::Blocking::UNBLOCKABLE_SKILL_TYPES.include?(item.stype_id)
  922.     return false
  923.   end
  924.  
  925.   #--------------------------------------------------------------------------
  926.   # new method : block?
  927.   #--------------------------------------------------------------------------
  928.   def block?
  929.     rand < blc # Block roll
  930.   end
  931.  
  932.   #--------------------------------------------------------------------------
  933.   # new method : critical_block?
  934.   #--------------------------------------------------------------------------
  935.   def critical_block?
  936.     rand < cbl # Critical block roll
  937.   end
  938.  
  939.   #--------------------------------------------------------------------------
  940.   # new method : apply_block_value
  941.   #--------------------------------------------------------------------------
  942.   def apply_block_value(damage)
  943.     block_value = apply_block_value_variance(blv, Bubs::Blocking::BLV_VARIANCE)
  944.     return damage if block_value <= 0
  945.    
  946.     # Apply critical block multiplier
  947.     block_value *= blv_multiplier if @result.critical_blocked
  948.     # Determine min/max block value
  949.     block_value = [[0, block_value].max, blv_max].min
  950.     # Keep track of amount of damage blocked
  951.     @result.blocked_damage += block_value.to_i
  952.     # Subtract block value from damage
  953.     damage -= block_value
  954.    
  955.     return 0 if damage < 0
  956.     return damage
  957.   end
  958.  
  959.   #--------------------------------------------------------------------------
  960.   # new method : apply_block_reduction_rate
  961.   #--------------------------------------------------------------------------
  962.   def apply_block_reduction_rate(damage)
  963.     block_rate = blr
  964.     return damage if block_rate <= 0
  965.    
  966.     # Apply critical block multiplier
  967.     block_rate *= blr_multiplier if @result.critical_blocked
  968.     # Determine min/max block rate
  969.     block_rate = [[0, block_rate].max, blr_max].min
  970.     # Calculate damage rate
  971.     block_rate = (1 - block_rate)
  972.     # Keep track of amount of damage blocked
  973.     @result.blocked_damage += (damage - (damage * block_rate)).to_i
  974.     # Scale the damage
  975.     damage *= block_rate
  976.    
  977.     return damage
  978.   end
  979.  
  980.   #--------------------------------------------------------------------------
  981.   # new method : apply_block_value_variance
  982.   #--------------------------------------------------------------------------
  983.   def apply_block_value_variance(block_value, variance)
  984.     amp = [block_value.abs * variance / 100, 0].max.to_i
  985.     var = rand(amp + 1) + rand(amp + 1) - amp
  986.     block_value = block_value + var
  987.   end
  988.  
  989.   #--------------------------------------------------------------------------
  990.   # new method : blv_multiplier     # For critical blocks
  991.   #--------------------------------------------------------------------------
  992.   def blv_multiplier
  993.     if actor?
  994.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:critical_blv_multiplier]
  995.     else
  996.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:critical_blv_multiplier]
  997.     end
  998.   end
  999.  
  1000.   #--------------------------------------------------------------------------
  1001.   # new method : blr_multiplier     # For critical blocks
  1002.   #--------------------------------------------------------------------------
  1003.   def blr_multiplier
  1004.     if actor?
  1005.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:critical_blr_multiplier]
  1006.     else
  1007.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:critical_blr_multiplier]
  1008.     end
  1009.   end
  1010.  
  1011.   #--------------------------------------------------------------------------
  1012.   # new method : cancel_critical_hits?
  1013.   #--------------------------------------------------------------------------
  1014.   def cancel_critical_hits?
  1015.     if actor?
  1016.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:cancel_critical_hits]
  1017.     else
  1018.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:cancel_critical_hits]
  1019.     end
  1020.   end
  1021.  
  1022.   #--------------------------------------------------------------------------
  1023.   # alias : execute_damage
  1024.   #--------------------------------------------------------------------------
  1025.   alias execute_damage_bubs_blocking execute_damage
  1026.   def execute_damage(user)
  1027.     execute_damage_bubs_blocking(user)
  1028.     on_block(user, @result.blocked_damage) if @result.blocked_damage > 0
  1029.   end
  1030.  
  1031.   #--------------------------------------------------------------------------
  1032.   # new method : tp_gain_on_block_formula
  1033.   #--------------------------------------------------------------------------
  1034.   def tp_gain_on_block_formula
  1035.     if actor?
  1036.       Bubs::Blocking::ACTOR_BLOCK_SETTINGS[:tp_gain]
  1037.     else
  1038.       Bubs::Blocking::ENEMY_BLOCK_SETTINGS[:tp_gain]
  1039.     end
  1040.   end
  1041.  
  1042.   #--------------------------------------------------------------------------
  1043.   # new method : charge_tp_by_block          # Charge TP by Damage Blocked
  1044.   #--------------------------------------------------------------------------
  1045.   def charge_tp_by_block(blocked_damage)
  1046.     self.tp += Float(eval(tp_gain_on_block_formula))
  1047.   end
  1048.  
  1049.   #--------------------------------------------------------------------------
  1050.   # new method : on_block            # Executes whenever damage is blocked
  1051.   #--------------------------------------------------------------------------
  1052.   def on_block(user, blocked_damage)
  1053.     charge_tp_by_block(blocked_damage)
  1054.   end
  1055.  
  1056. end # class Game_Battler
  1057.  
  1058.  
  1059.  
  1060. #==============================================================================
  1061. # ++ Game_ActionResult
  1062. #==============================================================================
  1063. class Game_ActionResult
  1064.   #--------------------------------------------------------------------------
  1065.   # * Public Instance Variables
  1066.   #--------------------------------------------------------------------------
  1067.   attr_accessor :blocked                  # block flag
  1068.   attr_accessor :critical_blocked         # critical block flag
  1069.   attr_accessor :blocked_damage           # total damage blocked
  1070.   attr_accessor :block_checked            # block chance check determined flag
  1071.   #--------------------------------------------------------------------------
  1072.   # alias : clear_hit_flags
  1073.   #--------------------------------------------------------------------------
  1074.   alias clear_hit_flags_bubs_blocking clear_hit_flags
  1075.   def clear_hit_flags
  1076.     clear_hit_flags_bubs_blocking # alias
  1077.    
  1078.     @blocked = false
  1079.     @critical_blocked = false
  1080.     @block_checked = false
  1081.   end
  1082.  
  1083.   #--------------------------------------------------------------------------
  1084.   # alias : clear_damage_values
  1085.   #--------------------------------------------------------------------------
  1086.   alias clear_damage_values_bubs_blocking clear_damage_values
  1087.   def clear_damage_values
  1088.     clear_damage_values_bubs_blocking # alias
  1089.    
  1090.     @blocked_damage = 0
  1091.   end
  1092.  
  1093.   #--------------------------------------------------------------------------
  1094.   # new method : block_damage_text
  1095.   #--------------------------------------------------------------------------
  1096.   def block_damage_text
  1097.     if @critical_blocked # Critical blocks
  1098.       if @battler.actor?
  1099.         fmt = Vocab::ActorCritBlock
  1100.       else
  1101.         fmt = Vocab::EnemyCritBlock
  1102.       end
  1103.       sprintf(fmt, @battler.name, @blocked_damage.to_i)
  1104.     elsif @blocked # Normal blocks
  1105.       if @battler.actor?
  1106.         fmt = Vocab::ActorBlock
  1107.       else
  1108.         fmt = Vocab::EnemyBlock
  1109.       end
  1110.       sprintf(fmt, @battler.name, @blocked_damage.to_i)
  1111.     else
  1112.       ""
  1113.     end
  1114.   end # def block_damage_text
  1115.  
  1116. end # class Game_ActionResult
  1117.  
  1118.  
  1119.  
  1120. #==============================================================================
  1121. # ++ Window_BattleLog
  1122. #==============================================================================
  1123. class Window_BattleLog < Window_Selectable
  1124.   #--------------------------------------------------------------------------
  1125.   # alias : display_hp_damage
  1126.   #--------------------------------------------------------------------------
  1127.   alias display_hp_damage_bubs_blocking display_hp_damage
  1128.   def display_hp_damage(target, item)
  1129.     return if item && !item.damage.to_hp?
  1130.     if target.result.blocked || target.result.critical_blocked
  1131.       # Play SE
  1132.       Sound.play_block if target.result.blocked
  1133.       Sound.play_critical_block if target.result.critical_blocked
  1134.       # Block battle text
  1135.       add_text(target.result.block_damage_text)
  1136.       wait
  1137.     end
  1138.     display_hp_damage_bubs_blocking(target, item)
  1139.   end
  1140. end
  1141.  
  1142.  
  1143.  
  1144. if $imported["YEA-StatusMenu"]
  1145. #==============================================================================
  1146. # ++ Window_StatusItem
  1147. #==============================================================================
  1148. class Window_StatusItem < Window_Base
  1149.   #--------------------------------------------------------------------------
  1150.   # alias : draw_property
  1151.   #--------------------------------------------------------------------------
  1152.   alias draw_property_bubs_blocking draw_property
  1153.   def draw_property(property, dx, dy, dw)
  1154.     fmt = "%1.2f%%"
  1155.     case property[0]
  1156.     #---
  1157.     when :blv
  1158.       return dy unless $imported["BubsBlocking"]
  1159.       fmt = "%d"
  1160.       value = sprintf(fmt, @actor.blv * 100)
  1161.     when :blr
  1162.       return dy unless $imported["BubsBlocking"]
  1163.       value = sprintf(fmt, @actor.blr * 100)
  1164.     when :blc
  1165.       return dy unless $imported["BubsBlocking"]
  1166.       value = sprintf(fmt, @actor.blc * 100)
  1167.     when :cbl
  1168.       return dy unless $imported["BubsBlocking"]
  1169.       value = sprintf(fmt, @actor.cbl * 100)
  1170.     #---
  1171.     else
  1172.       return draw_property_bubs_blocking(property, dx, dy, dw) # alias
  1173.     end
  1174.     colour = Color.new(0, 0, 0, translucent_alpha/2)
  1175.     rect = Rect.new(dx+1, dy+1, dw-2, line_height-2)
  1176.     contents.fill_rect(rect, colour)
  1177.     change_color(system_color)
  1178.     draw_text(dx+4, dy, dw-8, line_height, property[1], 0)
  1179.     change_color(normal_color)
  1180.     draw_text(dx+4, dy, dw-8, line_height, value, 2)
  1181.     return dy + line_height
  1182.   end
  1183. end # class Window_StatusItem
  1184.  
  1185. end # if $imported["YEA-StatusMenu"]
Advertisement
Add Comment
Please, Sign In to add comment