Advertisement
roninator2

Hit Chance Display

Dec 15th, 2024
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.78 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Message for Hit Chance                 ║  Version: 1.00     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║ Show hit chance percentage                    ║    12 May 2021     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Display a message for change to hit                          ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   Configure settings below                                         ║
  20. # ║                                                                    ║
  21. # ╚════════════════════════════════════════════════════════════════════╝
  22. # ╔════════════════════════════════════════════════════════════════════╗
  23. # ║ Updates:                                                           ║
  24. # ║ 1.00 - 22 Nov 2024 - Script finished                               ║
  25. # ║                                                                    ║
  26. # ╚════════════════════════════════════════════════════════════════════╝
  27. # ╔════════════════════════════════════════════════════════════════════╗
  28. # ║ Credits and Thanks:                                                ║
  29. # ║   Roninator2                                                       ║
  30. # ║   Vlue & Tsukihime                                                 ║
  31. # ╚════════════════════════════════════════════════════════════════════╝
  32. # ╔════════════════════════════════════════════════════════════════════╗
  33. # ║ Terms of use:                                                      ║
  34. # ║  Follow the original Authors terms of use where applicable         ║
  35. # ║    - When not made by me (Roninator2)                              ║
  36. # ║  Free for all uses in RPG Maker except nudity                      ║
  37. # ║  Anyone using this script in their project before these terms      ║
  38. # ║  were changed are allowed to use this script even if it conflicts  ║
  39. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  40. # ║  No part of this code can be used with AI programs or tools        ║
  41. # ║  Credit must be given                                              ║
  42. # ╚════════════════════════════════════════════════════════════════════╝
  43.  
  44. module R2_HIT
  45.   #Whether to place the hit chance text above or below the enemy
  46.   ABOVE_MONSTER = false
  47.   #Text to display next to hit chance number
  48.   HIT_TEXT = "Chance to hit"
  49.   #The width of the text
  50.   TEXT_WIDTH = 150
  51.   #The height of the text
  52.   TEXT_HEIGHT = 20
  53.   #Offset the hit rate along the x-axis(left,right)
  54.   TEXT_OFFSET_X = -50
  55.   #Offset the hit rate along the y-axis(up,down)
  56.   TEXT_OFFSET_Y = 2
  57.  
  58.   #The width of the text placement make larger if text is cut off
  59.   LOC_WIDTH = 100
  60.   #The height of the text placement
  61.   LOC_HEIGHT = 15
  62.  
  63.   #Size of the displayed text
  64.   TEXT_SIZE = Font.default_size
  65.   #Font of the displayed text
  66.   TEXT_FONT = Font.default_name
  67.  
  68. end
  69.  
  70. # ╔════════════════════════════════════════════════════════════════════╗
  71. # ║                      End of editable region                        ║
  72. # ╚════════════════════════════════════════════════════════════════════╝
  73.  
  74. class Sprite_Battler
  75.   alias hitrate_update update
  76.   def update
  77.     hitrate_update
  78.     return unless @battler.is_a?(Game_Enemy)
  79.     if @battler
  80.       update_hitrate
  81.     end
  82.   end
  83.   def update_hitrate
  84.     setup_hitrate if @hit_rate.nil?
  85.     if @hit_display.nil?
  86.       @hit_display = Sprite_Base.new(self.viewport)
  87.       @hit_display.bitmap = Bitmap.new(R2_HIT::TEXT_WIDTH,R2_HIT::TEXT_SIZE)
  88.       @hit_display.bitmap.font.size = R2_HIT::TEXT_SIZE
  89.       @hit_display.bitmap.font.name = R2_HIT::TEXT_FONT
  90.       @hit_display.x = @hit_rate.x + R2_HIT::TEXT_OFFSET_X
  91.       @hit_display.y = @hit_rate.y + R2_HIT::TEXT_OFFSET_Y
  92.       @hit_display.z = 111
  93.     end
  94.     determine_text_visible
  95.     return unless @hit_rate.visible
  96.     if @hit_rate.opacity != self.opacity
  97.       @hit_rate.opacity = self.opacity
  98.     end
  99.     @hit_rate.bitmap.clear
  100.     @hit_display.opacity = @hit_rate.opacity if @hit_display.opacity != @hit_rate.opacity
  101.     @hit_display.bitmap.clear
  102.     text = draw_hit_rate(@hit_display.x,@hit_display.y)
  103.     return if text.nil?
  104.     @hit_display.bitmap.draw_text(0,0,R2_HIT::TEXT_WIDTH,@hit_display.height,text)
  105.   end
  106.  
  107.   def setup_hitrate
  108.     @hit_rate = Sprite_Base.new(self.viewport)
  109.     width = R2_HIT::LOC_WIDTH
  110.     height = R2_HIT::LOC_HEIGHT
  111.     @hit_rate.bitmap = Bitmap.new(width,height)
  112.     @hit_rate.x = self.x + @hit_rate.width / 2 + R2_HIT::TEXT_OFFSET_X
  113.     @hit_rate.y = self.y + R2_HIT::TEXT_OFFSET_Y - self.bitmap.height - @hit_rate.height
  114.     @hit_rate.y = self.y + R2_HIT::TEXT_OFFSET_Y unless R2_HIT::ABOVE_MONSTER
  115.     @hit_rate.x = 0 if @hit_rate.x < 0
  116.     @hit_rate.y = 0 if @hit_rate.y < 0
  117.     @hit_rate.z = 104
  118.   end
  119.  
  120.   def determine_text_visible
  121.     if !@battler.alive?
  122.       @hit_rate.visible = false
  123.       @hit_display.visible = false
  124.       return if !@battler.alive?
  125.     end
  126.     @hit_rate.visible = true
  127.     return unless SceneManager.scene.is_a?(Scene_Battle)
  128.     return unless SceneManager.scene.enemy_window
  129.     @hit_rate.visible = SceneManager.scene.target_window_index == @battler.index
  130.     @hit_rate.visible = false if !SceneManager.scene.enemy_window.active
  131.     @hit_display.visible = false if !@hit_rate.visible
  132.     @hit_display.visible = true if @hit_rate.visible
  133.   end
  134.  
  135.   alias hitrate_dispose dispose
  136.   def dispose
  137.     @hit_rate.dispose if @hit_rate
  138.     @hit_display.dispose if @hit_display
  139.     hitrate_dispose
  140.   end
  141.  
  142.   #-----------------------------------------------------------------------------
  143.   # New
  144.   #-----------------------------------------------------------------------------
  145.   def draw_hit_rate(dx, dy)
  146.     return unless SceneManager.scene_is?(Scene_Battle)
  147.     return unless SceneManager.scene.enemy_window
  148.     reveal(SceneManager.scene.enemy_window.enemy)
  149.     hitdata = (get_hit_rate * 100).to_i
  150.     text = "#{R2_HIT::HIT_TEXT} #{hitdata}%"
  151.     return text
  152.   end
  153.  
  154.   def reveal(battler)
  155.     return if @battler == battler
  156.     @battler = battler
  157.   end
  158.  
  159.   def actor; return BattleManager.actor; end
  160.  
  161.   def get_hit_rate
  162.     hit_rate = @battler.item_hit(actor, actor.current_action.item)
  163.     evade_rate = @battler.item_eva(actor, actor.current_action.item)
  164.     return (hit_rate) * (1 - evade_rate)
  165.   end
  166. end
  167.  
  168. class Scene_Battle
  169.   attr_reader  :enemy_window
  170.   def target_window_index
  171.     begin
  172.     @enemy_window.enemy.index
  173.     rescue
  174.       return -1
  175.     end
  176.   end
  177. end
  178.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement