Advertisement
roninator2

Enemy Transform

Dec 16th, 2024
21
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 10.49 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Enemy Transform                        ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║   multiple enemy staged transformation        ║    08 May 2020     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Provide animation for enemies to transform                   ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   This script allows enemies to transform into another monster     ║
  20. # ║   when they reach a specified HP percentage remaining (or lower)   ║
  21. # ║                                                                    ║
  22. # ║   Enemy Notetags - These notetags go in the enemy notebox          ║
  23. # ║      <staged transform: x>                                         ║
  24. # ║      Sets the current enemy type to transform into                 ║
  25. # ║      enemy x upon reaching hp%.                                    ║
  26. # ║                                                                    ║
  27. # ║      <staged transform hp percent: x%>                             ║
  28. # ║      Sets the transform rate for the current enemy to be x%.       ║
  29. # ║      If the previous tag is not used, this notetag has no effect.  ║
  30. # ║                                                                    ║
  31. # ║      <staged transform anim: x>                                    ║
  32. # ║      Sets the animation to play on the enemy upon transforming.    ║
  33. # ║                                                                    ║
  34. # ╚════════════════════════════════════════════════════════════════════╝
  35. # ╔════════════════════════════════════════════════════════════════════╗
  36. # ║ Updates:                                                           ║
  37. # ║ 1.00 - 08 May 2020 - Script finished                               ║
  38. # ║                                                                    ║
  39. # ╚════════════════════════════════════════════════════════════════════╝
  40. # ╔════════════════════════════════════════════════════════════════════╗
  41. # ║ Credits and Thanks:                                                ║
  42. # ║   Roninator2                                                       ║
  43. # ║                                                                    ║
  44. # ╚════════════════════════════════════════════════════════════════════╝
  45. # ╔════════════════════════════════════════════════════════════════════╗
  46. # ║ Terms of use:                                                      ║
  47. # ║  Follow the original Authors terms of use where applicable         ║
  48. # ║    - When not made by me (Roninator2)                              ║
  49. # ║  Free for all uses in RPG Maker except nudity                      ║
  50. # ║  Anyone using this script in their project before these terms      ║
  51. # ║  were changed are allowed to use this script even if it conflicts  ║
  52. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  53. # ║  No part of this code can be used with AI programs or tools        ║
  54. # ║  Credit must be given                                              ║
  55. # ╚════════════════════════════════════════════════════════════════════╝
  56.  
  57. $imported = {} if $imported.nil?
  58. $imported["R2-EnemyStagedTransform"] = true
  59.  
  60. module R2
  61.   module REGEXP
  62.   module ENEMY
  63.    
  64.     STAGED_TRANSFORM = /<(?:STAGED_TRANSFORM|staged transform):[ ](\d+)>/i
  65.     STAGED_TRANSFORM_HP_PERCENT =
  66.       /<(?:STAGED_TRANSFORM_HP_PERCENT|staged transform hp percent):[ ](\d+)([%])>/i
  67.     STAGED_TRANSFORM_ANIM = /<(?:STAGED_TRANSFORM_ANIM|staged transform anim):[ ](\d+)>/i
  68.    
  69.   end # ENEMY
  70.   end # REGEXP
  71. end # R2
  72.  
  73. #==============================================================================
  74. # ■ DataManager
  75. #==============================================================================
  76.  
  77. module DataManager
  78.  
  79.   #--------------------------------------------------------------------------
  80.   # alias method: load_database
  81.   #--------------------------------------------------------------------------
  82.   class <<self; alias load_database_edtr2 load_database; end
  83.   def self.load_database
  84.     load_database_edtr2
  85.     load_notetags_edtr2
  86.   end
  87.  
  88.   #--------------------------------------------------------------------------
  89.   # new method: load_notetags_edt
  90.   #--------------------------------------------------------------------------
  91.   def self.load_notetags_edtr2
  92.     for obj in $data_enemies
  93.       next if obj.nil?
  94.       obj.load_notetags_edt
  95.     end
  96.   end
  97.  
  98. end # DataManager
  99.  
  100. #==============================================================================
  101. # ■ RPG::Enemy
  102. #==============================================================================
  103.  
  104. class RPG::Enemy < RPG::BaseItem
  105.  
  106.   #--------------------------------------------------------------------------
  107.   # public instance variables
  108.   #--------------------------------------------------------------------------
  109.   attr_accessor :staged_transform
  110.   attr_accessor :staged_transform_anim
  111.   attr_accessor :staged_transform_hp_percent
  112.  
  113.   #--------------------------------------------------------------------------
  114.   # common cache: load_notetags_edt
  115.   #--------------------------------------------------------------------------
  116.   def load_notetags_edt
  117.     @staged_transform = 0
  118.     @staged_transform_hp_percent = 1.0
  119.     @staged_transform_anim = 0
  120.     #---
  121.     self.note.split(/[\r\n]+/).each { |line|
  122.       case line
  123.       #---
  124.       when R2::REGEXP::ENEMY::STAGED_TRANSFORM
  125.         @staged_transform = $1.to_i
  126.       when R2::REGEXP::ENEMY::STAGED_TRANSFORM_HP_PERCENT
  127.         @staged_transform_hp_percent = $1.to_i * 0.01
  128.       when R2::REGEXP::ENEMY::STAGED_TRANSFORM_ANIM
  129.         @staged_transform_anim = $1.to_i
  130.       end
  131.     } # self.note.split
  132.     #---
  133.   end
  134.  
  135. end # RPG::Enemy
  136.  
  137. #==============================================================================
  138. # ■ Game_Battler
  139. #==============================================================================
  140.  
  141. class Game_Enemy < Game_Battler
  142.  
  143.   #--------------------------------------------------------------------------
  144.   # alias method: execute damage
  145.   #--------------------------------------------------------------------------
  146.   alias game_battler_damage_edt execute_damage
  147.   def execute_damage(user)
  148.     game_battler_damage_edt(user)
  149.     return staged_transform if meet_staged_transform_requirements?
  150.   end
  151.  
  152.   #--------------------------------------------------------------------------
  153.   # new method: meet_death_transform_requirements?
  154.   #--------------------------------------------------------------------------
  155.   def meet_staged_transform_requirements?
  156.     return false unless enemy?
  157.     return false unless enemy.staged_transform > 0
  158.     return false if $data_enemies[enemy.staged_transform].nil?
  159.     return false if $data_enemies[enemy.staged_transform_hp_percent].nil?
  160.     return (self.hp / enemy.params[0]) < enemy.staged_transform_hp_percent
  161.   end
  162.  
  163.   #--------------------------------------------------------------------------
  164.   # new method: death_transform
  165.   #--------------------------------------------------------------------------
  166.   def staged_transform
  167.     self.animation_id = enemy.staged_transform_anim
  168.     transform(enemy.staged_transform)
  169.   end
  170.  
  171. end # Game_Battler
  172.  
  173. #==============================================================================
  174. # ▼ End of File
  175. #==============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement