Advertisement
roninator2

Display Damage Values

Nov 19th, 2024
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 12.75 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Display Damage Values                  ║  Version: 1.07     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║   Show potential damage values                ║    13 May 2021     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Displays text on battler to show damage range                ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   Configure settings below                                         ║
  20. # ║ Updates:                                                           ║
  21. # ║   - When selecting a skill, the window will now hide               ║
  22. # ║   - Corrected damage value checking every frame                    ║
  23. # ║   - fixed error when first battler is defeated                     ║
  24. # ║   - Added Color Settings                                           ║
  25. # ║   - Fixed formula processing for variable use                      ║
  26. # ║                                                                    ║
  27. # ╚════════════════════════════════════════════════════════════════════╝
  28. # ╔════════════════════════════════════════════════════════════════════╗
  29. # ║ Updates:                                                           ║
  30. # ║ 1.00 - 22 Nov 2024 - Script finished                               ║
  31. # ║                                                                    ║
  32. # ╚════════════════════════════════════════════════════════════════════╝
  33. # ╔════════════════════════════════════════════════════════════════════╗
  34. # ║ Credits and Thanks:                                                ║
  35. # ║   Roninator2                                                       ║
  36. # ║   Vlue & Tsukihime                                                 ║
  37. # ╚════════════════════════════════════════════════════════════════════╝
  38. # ╔════════════════════════════════════════════════════════════════════╗
  39. # ║ Terms of use:                                                      ║
  40. # ║  Follow the original Authors terms of use where applicable         ║
  41. # ║    - When not made by me (Roninator2)                              ║
  42. # ║  Free for all uses in RPG Maker except nudity                      ║
  43. # ║  Anyone using this script in their project before these terms      ║
  44. # ║  were changed are allowed to use this script even if it conflicts  ║
  45. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  46. # ║  No part of this code can be used with AI programs or tools        ║
  47. # ║  Credit must be given                                              ║
  48. # ╚════════════════════════════════════════════════════════════════════╝
  49.  
  50. module R2_DAM
  51.   #Whether to place the hp bar above or below the enemy
  52.   ABOVE_MONSTER = true
  53.   #The width of the hp bar
  54.   TEXT_WIDTH = 150
  55.   #The height of the hp bar
  56.   TEXT_HEIGHT = 20
  57.   #Offset the hit rate along the x-axis(left,right)
  58.   TEXT_OFFSET_X = -50
  59.   #Offset the hit rate along the y-axis(up,down)
  60.   TEXT_OFFSET_Y = 2
  61.  
  62.   #The width of the hp bar
  63.   LOC_WIDTH = 100
  64.   #The height of the hp bar
  65.   LOC_HEIGHT = 15
  66.  
  67.   #Size of the displayed text
  68.   TEXT_SIZE = Font.default_size
  69.   #Font of the displayed text
  70.   TEXT_FONT = Font.default_name
  71.  
  72.   TEXT_RED = 255
  73.   TEXT_GREEN = 255
  74.   TEXT_BLUE = 255
  75.  
  76.   TEXT = "damage"
  77.  
  78.   DAMAGE_SWITCH = 2
  79. end
  80.  
  81. # ╔════════════════════════════════════════════════════════════════════╗
  82. # ║                      End of editable region                        ║
  83. # ╚════════════════════════════════════════════════════════════════════╝
  84.  
  85. $imported = {} if $imported.nil?
  86.  
  87. class Sprite_Battler
  88.   alias dam_value_update update
  89.   def update
  90.     dam_value_update
  91.     return unless @battler.is_a?(Game_Enemy)
  92.     if @battler
  93.       update_dam_value
  94.     end
  95.   end
  96.   def update_dam_value
  97.     setup_dam_value if @dam_value.nil?
  98.     if @dam_display.nil?
  99.       @dam_display = Sprite_Base.new(self.viewport)
  100.       @dam_display.bitmap = Bitmap.new(R2_DAM::TEXT_WIDTH,R2_DAM::TEXT_SIZE)
  101.       @dam_display.bitmap.font.color.set(R2_DAM::TEXT_RED, R2_DAM::TEXT_GREEN, R2_DAM::TEXT_BLUE)
  102.       @dam_display.bitmap.font.size = R2_DAM::TEXT_SIZE
  103.       @dam_display.bitmap.font.name = R2_DAM::TEXT_FONT
  104.       @dam_display.x = @dam_value.x + R2_DAM::TEXT_OFFSET_X
  105.       @dam_display.y = @dam_value.y + R2_DAM::TEXT_OFFSET_Y
  106.       @dam_display.z = 110
  107.     end
  108.     determine_dam_visible
  109.     return unless @dam_value.visible
  110.     if @dam_value.opacity != self.opacity
  111.       @dam_value.opacity = self.opacity
  112.     end
  113.     @dam_value.bitmap.clear
  114.     @dam_display.opacity = @dam_value.opacity if @dam_display.opacity != @dam_value.opacity
  115.     @dam_display.bitmap.clear
  116.     text = draw_dam_value(@dam_display.x,@dam_display.y)
  117.     return if text.nil?
  118.     @dam_display.bitmap.draw_text(0,0,R2_DAM::TEXT_WIDTH,@dam_display.height,text)
  119.   end
  120.  
  121.   def setup_dam_value
  122.     @dam_value = Sprite_Base.new(self.viewport)
  123.     width = R2_DAM::LOC_WIDTH
  124.     height = R2_DAM::LOC_HEIGHT
  125.     @dam_value.bitmap = Bitmap.new(width,height)
  126.     @dam_value.x = self.x + @dam_value.width / 2 + R2_DAM::TEXT_OFFSET_X
  127.     @dam_value.y = self.y + R2_DAM::TEXT_OFFSET_Y - self.bitmap.height - @dam_value.height
  128.     @dam_value.y = self.y + R2_DAM::TEXT_OFFSET_Y unless R2_DAM::ABOVE_MONSTER
  129.     @dam_value.x = 0 if @dam_value.x < 0
  130.     @dam_value.y = 0 if @dam_value.y < 0
  131.     @dam_value.z = 109
  132.   end
  133.  
  134.   def determine_dam_visible
  135.     if !@battler.alive?
  136.       @dam_value.visible = false
  137.       @dam_display.visible = false
  138.       return if !@battler.alive?
  139.     end
  140.     @dam_value.visible = true
  141.     return unless SceneManager.scene.is_a?(Scene_Battle)
  142.     return unless SceneManager.scene.enemy_window
  143.     @dam_value.visible = SceneManager.scene.target_window_index == @battler.index
  144.     @dam_value.visible = false if !SceneManager.scene.enemy_window.active
  145.     @dam_display.visible = false if !@dam_value.visible
  146.     @dam_display.visible = true if @dam_value.visible
  147.   end
  148.  
  149.   alias dam_display_dispose dispose
  150.   def dispose
  151.     @dam_value.dispose if @dam_value
  152.     @dam_display.dispose if @dam_display
  153.     dam_display_dispose
  154.   end
  155.  
  156.   def reveal(battler)
  157.     return if @battler == battler
  158.     @battler = battler
  159.     $game_switches[R2_DAM::DAMAGE_SWITCH] = false
  160.   end
  161.  
  162.   def draw_dam_value(dx, dy)
  163.     return unless SceneManager.scene_is?(Scene_Battle)
  164.     return unless SceneManager.scene.enemy_window
  165.     reveal(SceneManager.scene.enemy_window.enemy)
  166.     enemy = $game_troop.members[SceneManager.scene.enemy_window.enemy.index]
  167.     user = $game_actors[BattleManager.actor.id]
  168.     item = $data_skills[BattleManager.actor.input.item.id]
  169.     @dam_data = [] if $game_switches[R2_DAM::DAMAGE_SWITCH] == false
  170.     @dam_data = find_dam_value(enemy, user, item) if $game_switches[R2_DAM::DAMAGE_SWITCH] == false
  171.     text = "#{@dam_data[0]} to #{@dam_data[1]} #{R2_DAM::TEXT}"
  172.     $game_switches[R2_DAM::DAMAGE_SWITCH] = true
  173.     return text
  174.   end
  175.  
  176.   def actor; return BattleManager.actor; end
  177.  
  178.   def enemy; return SceneManager.scene.enemy_window.enemy; end
  179.  
  180.   def find_dam_value(enemy, user, item)
  181.     damage = actor.find_damage_value(enemy, user, item)
  182.     amp = [damage.abs * item.damage.variance / 100, 0].max.to_i
  183.     low = damage * ((100.00 - item.damage.variance) / 100.00)
  184.     low = low - amp
  185.     low = low.to_i
  186.     high = damage * ((100.00 + item.damage.variance) / 100.00)
  187.     high = high + amp
  188.     high = high.to_i
  189.     return [low, high]
  190.   end
  191.  
  192. end
  193.  
  194. class Game_Battler < Game_BattlerBase
  195.   def find_damage_value(enemy, user, item)
  196.     ovars = Marshal.load(Marshal.dump($game_variables))
  197.     oswitchs = $game_switches.clone
  198.     value = item.damage.eval(user, enemy, $game_variables)
  199.     value *= item_element_rate(user, item)
  200.     $game_variables = ovars
  201.     $game_switches = oswitchs
  202.     enemy_element = $data_enemies[enemy.enemy_id]
  203.     item_element = item.damage.element_id
  204.     enemy_element.features.each do |elem|
  205.       if elem.data_id == item_element
  206.         value *= elem.value
  207.         value = value.to_i
  208.       end
  209.     end
  210.     value *= pdr if item.physical?
  211.     value *= mdr if item.magical?
  212.     value *= rec if item.damage.recover?
  213.     return value
  214.   end
  215. end
  216. class Window_BattleEnemy < Window_Selectable
  217.   def process_cursor_move
  218.     super
  219.     $game_switches[R2_DAM::DAMAGE_SWITCH] = false
  220.   end
  221. end
  222. class Scene_Battle
  223.   attr_reader  :enemy_window
  224.   def target_window_index
  225.     begin
  226.     @enemy_window.enemy.index
  227.     rescue
  228.       return -1
  229.     end
  230.   end
  231.   if !$imported["YEA-BattleEngine"]
  232.     def on_skill_ok
  233.       @skill = @skill_window.item
  234.       BattleManager.actor.input.set_skill(@skill.id)
  235.       BattleManager.actor.last_skill.object = @skill
  236.       if !@skill.need_selection?
  237.         @skill_window.hide
  238.         next_command
  239.       elsif @skill.for_opponent?
  240.         @skill_window.hide
  241.         select_enemy_selection
  242.       else
  243.         select_actor_selection
  244.       end
  245.       $game_switches[R2_DAM::DAMAGE_SWITCH] = false
  246.     end
  247.     def on_skill_cancel
  248.       @skill_window.hide
  249.       @actor_command_window.activate
  250.       $game_switches[R2_DAM::DAMAGE_SWITCH] = false
  251.     end
  252.     def on_enemy_cancel
  253.       @enemy_window.hide
  254.       case @actor_command_window.current_symbol
  255.       when :attack
  256.         @actor_command_window.activate
  257.       when :skill
  258.         @skill_window.show
  259.         @skill_window.activate
  260.       when :item
  261.         @item_window.activate
  262.       end
  263.       $game_switches[R2_DAM::DAMAGE_SWITCH] = false
  264.     end
  265.   end
  266. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement