VanCoolz

[RGSS 2] Mana Shield State

May 14th, 2012
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 6.62 KB | None | 0 0
  1. #==============================================================================
  2. # [RGSS 2] Mana Shield
  3. # Version : 1.1
  4. # Author : LowlingLife
  5. #==============================================================================
  6. # Membuat state yang membuat damage di-deal ke SP, bukan ke HP.
  7. #==============================================================================
  8. # CHANGELOG :
  9. # V. 1.0 | Initial Release
  10. # V. 1.1 | Re-make from zero. Add Half Damage State.
  11. #=============================================================================
  12. module ManaShield
  13.   # ID dari State yang akan mengalihkan damage ke SP secara Full.
  14.   FULL_STATE = [17, 18, 19]
  15.  
  16.   # ID dari State dimana separuh damage dialihkan ke SP dan separuh lagi
  17.   # dialihkan ke HP.
  18.   HALF_STATE = [20, 21, 22]
  19.  
  20.   # ID dari State dimana hanya separuh damage yang dialihkan ke SP tapi
  21.   # separuhnya tidak dialihkan ke HP.
  22.   HALF_DAMAGE_STATE = [23, 24, 25]
  23.  
  24.   # Set ke true jika ingin memakai fitur Overflow. Jika Damage yang di-deal
  25.   # lebih besar daripada SP, sisanya akan di deal ke HP.
  26.   OVERFLOW = false
  27.  
  28.   # Set ke true jika ingin Mana Shield State otomatis di-remove setelah
  29.   # mendapat damage yang lebih besar dari pada SP.
  30.   # NOTE : Uncheck Release Condition :
  31.   # at the end of battle jika menggunakan opsi ini.
  32.   AUTO_REMOVE = true
  33.  
  34.   # Set ke true jika ingin agar Mana Shield tetap men-deal damage yang
  35.   # disebabkan Skill ke SP.
  36.   SKILL_PROTECTION = true
  37. #==============================================================================
  38. # EDITING BEYOND THIS LINE CAN CAUSE DAMAGE TO YOUR GAME. THEREFORE, EDIT
  39. # WITH YOUR OWN RISK!
  40. #==============================================================================
  41. class Game_Battler
  42.   include ManaShield
  43.  
  44.   attr_accessor :overflow
  45.  
  46.   #----------------------------------------------------------------------------
  47.   # INITIALIZE
  48.   #----------------------------------------------------------------------------
  49.   alias mana_shield_initialize initialize unless $@
  50.   def initialize
  51.     mana_shield_initialize
  52.     @overflow = 0
  53.   end
  54.  
  55.   #----------------------------------------------------------------------------
  56.   # CHECH MANA SHIELD
  57.   #----------------------------------------------------------------------------
  58.   def check_mana_shield
  59.     if FULL_STATE.any?{|s| @states.include?(s)}
  60.       @mp_damage = damage
  61.       if @mp_damage > self.mp
  62.         if OVERFLOW
  63.           @overflow = damage - self.mp
  64.           @mp_damage = damage - @overflow
  65.           @hp_damage = @overflow
  66.         else
  67.           @overflow = damage - self.mp
  68.           @mp_damage = damage - @overflow
  69.         end
  70.         for s in FULL_STATE
  71.           @states.delete(s) if AUTO_REMOVE
  72.           @states_turn.delete(s) if AUTO_REMOVE
  73.         end
  74.       end
  75.     elsif HALF_STATE.any?{|s| @states.include?(s)}
  76.       @mp_damage = damage / 2
  77.       @hp_damage = damage / 2
  78.       if @mp_damage > self.mp
  79.         if OVERFLOW
  80.           @overflow = damage - self.mp
  81.           @mp_damage = damage - @overflow
  82.           @hp_damage = @overflow
  83.         else
  84.           @overflow = damage - self.mp
  85.           @mp_damage = damage - @overflow
  86.         end
  87.         for s in HALF_STATE
  88.           @states.delete(s) if AUTO_REMOVE
  89.           @states_turn.delete(s) if AUTO_REMOVE
  90.         end
  91.       end
  92.     elsif HALF_DAMAGE_STATE.any?{|s| @states.include?(s)}
  93.       @mp_damage = damage / 2
  94.         if @mp_damage > self.mp
  95.         if OVERFLOW
  96.           @overflow = damage - self.mp
  97.           @mp_damage = damage - @overflow
  98.           @hp_damage = @overflow
  99.         else
  100.           @overflow = damage - self.mp
  101.           @mp_damage = damage - @overflow
  102.         end
  103.         for s in HALF_DAMAGE_STATE
  104.           @states.delete(s) if AUTO_REMOVE
  105.           @states_turn.delete(s) if AUTO_REMOVE
  106.         end
  107.       end
  108.     else
  109.       @hp_damage = damage
  110.     end
  111.   end
  112.    
  113.   #--------------------------------------------------------------------------
  114.   # * Calculation of Damage From Normal Attack
  115.   #--------------------------------------------------------------------------
  116.   def make_attack_damage_value(attacker)
  117.     damage = attacker.atk * 4 - self.def * 2        # base calculation
  118.     damage = 0 if damage < 0                        # if negative, make 0
  119.     damage *= elements_max_rate(attacker.element_set)   # elemental adjustment
  120.     damage /= 100
  121.     if damage == 0                                  # if damage is 0,
  122.       damage = rand(2)                              # half of the time, 1 dmg
  123.     elsif damage > 0                                # a positive number?
  124.       @critical = (rand(100) < attacker.cri)        # critical hit?
  125.       @critical = false if prevent_critical         # criticals prevented?
  126.       damage *= 3 if @critical                      # critical adjustment
  127.     end
  128.     damage = apply_variance(damage, 20)             # variance
  129.     damage = apply_guard(damage)                    # guard adjustment
  130.     check_mana_shield
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # * Calculation of Damage Caused by Skills or Items
  134.   #--------------------------------------------------------------------------
  135.   def make_obj_damage_value(user, obj)
  136.     damage = obj.base_damage                        # get base damage
  137.     if damage > 0                                   # a positive number?
  138.       damage += user.atk * 4 * obj.atk_f / 100      # Attack F of the user
  139.       damage += user.spi * 2 * obj.spi_f / 100      # Spirit F of the user
  140.       unless obj.ignore_defense                     # Except for ignore defense
  141.         damage -= self.def * 2 * obj.atk_f / 100    # Attack F of the target
  142.         damage -= self.spi * 1 * obj.spi_f / 100    # Spirit F of the target
  143.       end
  144.       damage = 0 if damage < 0                      # If negative, make 0
  145.     elsif damage < 0                                # a negative number?
  146.       damage -= user.atk * 4 * obj.atk_f / 100      # Attack F of the user
  147.       damage -= user.spi * 2 * obj.spi_f / 100      # Spirit F of the user
  148.     end
  149.     damage *= elements_max_rate(obj.element_set)    # elemental adjustment
  150.     damage /= 100
  151.     damage = apply_variance(damage, obj.variance)   # variance
  152.     damage = apply_guard(damage)                    # guard adjustment
  153.     if obj.damage_to_mp  
  154.       @mp_damage = damage                           # damage MP
  155.     else
  156.       check_mana_shield if SKILL_PROTECTION         # damage HP
  157.     end
  158.   end
  159. end
  160. #==============================================================================
  161. # END OF SCRIPT
  162. #==============================================================================
  163. end
Advertisement
Add Comment
Please, Sign In to add comment