Advertisement
roninator2

Actor HUD on Map

Nov 20th, 2024
424
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 13.14 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Actor HUD on Map                       ║  Version: 1.02     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║    Show a HUD on the map                      ║    10 Oct 2021     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: nil                                                      ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║        Allows to display actor data on screen                      ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   Adjust the settings to your preference                           ║
  20. # ║                                                                    ║
  21. # ╚════════════════════════════════════════════════════════════════════╝
  22. # ╔════════════════════════════════════════════════════════════════════╗
  23. # ║ Updates:                                                           ║
  24. # ║ 1.00 - 10 Oct 2021 - Script finished                               ║
  25. # ║ 1.01 - 12 Oct 2021 - Added more options                            ║
  26. # ║ 1.02 - 15 Oct 2021 - fixed not updating when removing actors       ║
  27. # ║                                                                    ║
  28. # ╚════════════════════════════════════════════════════════════════════╝
  29. # ╔════════════════════════════════════════════════════════════════════╗
  30. # ║ Credits and Thanks:                                                ║
  31. # ║   Roninator2                                                       ║
  32. # ║                                                                    ║
  33. # ╚════════════════════════════════════════════════════════════════════╝
  34. # ╔════════════════════════════════════════════════════════════════════╗
  35. # ║ Terms of use:                                                      ║
  36. # ║  Follow the original Authors terms of use where applicable         ║
  37. # ║    - When not made by me (Roninator2)                              ║
  38. # ║  Free for all uses in RPG Maker except nudity                      ║
  39. # ║  Anyone using this script in their project before these terms      ║
  40. # ║  were changed are allowed to use this script even if it conflicts  ║
  41. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  42. # ║  No part of this code can be used with AI programs or tools        ║
  43. # ║  Credit must be given                                              ║
  44. # ╚════════════════════════════════════════════════════════════════════╝
  45.  
  46. module Vocab
  47.   Exp_s = "EXP"
  48. end
  49.  
  50. module R2_MAP_HUD
  51.   # Configure options
  52.  
  53.   Hud_X         = 0      # Hud Position
  54.   Hud_Y         = 300     # Hud Position
  55.   Hud_Width     = 300     # Hud Width
  56.   Hud_Height    = 120     # Hud Height
  57.  
  58.   Actor_Shown   = 0       # 0 = party leader, 1 = first follower
  59.  
  60.   Key_Cycle     = :CTRL   # Key to cycle actors
  61.   Use_Cycle     = true    # Option to use cycle control
  62.  
  63.   Show_Level    = true    # Show actor level
  64.   Level_X       = 0       # Face graphic X position
  65.   Level_Y       = 0       # Face graphic Y position
  66.  
  67.   Show_Class    = true    # Show actor class
  68.   Class_X       = 0       # Face graphic X position
  69.   Class_Y       = 0       # Face graphic Y position
  70.  
  71.   Show_Face     = true    # Show face graphic
  72.   Face_X        = 0       # Face graphic X position
  73.   Face_Y        = 0       # Face graphic Y position
  74.   Face_Index    = 0       # Index of face Graphic
  75.  
  76.   Show_Sprite   = false   # Show Sprite graphic
  77.   Sprite_X      = 50      # Sprite graphic X position
  78.   Sprite_Y      = 80      # Sprite graphic Y position
  79.  
  80.   Show_HP       = true    # Show HP bar
  81.   HP_X          = 120     # HP bar X position
  82.   HP_Y          = 0       # HP bar Y position
  83.   HP_Width      = 124     # HP bar width
  84.  
  85.   Show_MP       = true    # Show MP bar
  86.   MP_X          = 120     # MP bar X position
  87.   MP_Y          = 20      # MP bar Y position
  88.   MP_Width      = 124     # MP bar width
  89.  
  90.   Show_TP       = true    # Show TP bar
  91.   TP_X          = 120     # TP bar X position
  92.   TP_Y          = 40      # TP bar Y position
  93.   TP_Width      = 124     # TP bar width
  94.  
  95.   Show_EXP      = true    # Show Experience
  96.   EXP_X         = 120     # Exp bar X position
  97.   EXP_Y         = 60      # Exp bar Y position
  98.   EXP_Width     = 124     # Exp bar width
  99.  
  100.   Show_Gold     = true    # Show Gold amount
  101.   Gold_X        = 220     # Gold X position
  102.   Gold_Y        = 80      # Gold Y position
  103.  
  104.   Window_Opacity      = 0         # window visibility, does not affect contents
  105.   Window_Back_Opacity = 0         # Window background opacity
  106.   Window_Graphic      = "Window"  # Window Graphic file to use
  107.  
  108.   Font          = "Arial"
  109.   Font_Size     = 20
  110.  
  111. end
  112. # ╔════════════════════════════════════════════════════════════════════╗
  113. # ║                      End of editable region                        ║
  114. # ╚════════════════════════════════════════════════════════════════════╝
  115.  
  116. class Actor_Hud_Window < Window_Base
  117.   attr_reader :map_refresh
  118.   def initialize(id)
  119.     x = R2_MAP_HUD::Hud_X
  120.     y = R2_MAP_HUD::Hud_Y
  121.     w = R2_MAP_HUD::Hud_Width
  122.     h = R2_MAP_HUD::Hud_Height
  123.     super(x,y,w,h)
  124.     self.windowskin = Cache.system(R2_MAP_HUD::Window_Graphic)
  125.     self.opacity = R2_MAP_HUD::Window_Opacity
  126.     self.back_opacity = R2_MAP_HUD::Window_Back_Opacity
  127.     self.contents_opacity = 255
  128.     @current_actor = id
  129.     @old_actor = 0
  130.     refresh
  131.   end
  132.  
  133.   def actor_data
  134.     switch_actor if @current_actor > ($game_party.members.size - 1)
  135.     @old_actor = @current_actor
  136.     @actor = $game_party.members[@current_actor]
  137.     face = R2_MAP_HUD::Face_Index > 0 ? R2_MAP_HUD::Face_Index : @actor.face_index
  138.     # actor image
  139.     draw_face(@actor.face_name, face, R2_MAP_HUD::Face_X, R2_MAP_HUD::Face_Y, enabled = true) if R2_MAP_HUD::Show_Face
  140.     draw_actor_graphic(@actor, R2_MAP_HUD::Sprite_X, R2_MAP_HUD::Sprite_Y) if R2_MAP_HUD::Show_Sprite
  141.     # level
  142.     draw_actor_level(@actor, R2_MAP_HUD::Level_X, R2_MAP_HUD::Level_Y + line_height * 1) if R2_MAP_HUD::Show_Level
  143.     # class
  144.     draw_actor_class(@actor, R2_MAP_HUD::Class_X, R2_MAP_HUD::Class_Y) if R2_MAP_HUD::Show_Class
  145.     # hp
  146.     width = R2_MAP_HUD::HP_Width
  147.     draw_actor_hp(@actor, R2_MAP_HUD::HP_X, R2_MAP_HUD::HP_Y, width) if R2_MAP_HUD::Show_HP
  148.     # mp
  149.     width = R2_MAP_HUD::MP_Width
  150.     draw_actor_mp(@actor, R2_MAP_HUD::MP_X, R2_MAP_HUD::MP_Y, width) if R2_MAP_HUD::Show_MP
  151.     # tp
  152.     width = R2_MAP_HUD::TP_Width
  153.     draw_actor_tp(@actor, R2_MAP_HUD::TP_X, R2_MAP_HUD::TP_Y, width) if R2_MAP_HUD::Show_TP
  154.     # exp
  155.     width = R2_MAP_HUD::EXP_Width
  156.     draw_actor_exp(@actor, R2_MAP_HUD::EXP_X, R2_MAP_HUD::EXP_Y, width) if R2_MAP_HUD::Show_EXP
  157.     # gold
  158.     draw_currency_value($game_party.gold, Vocab::currency_unit, R2_MAP_HUD::Gold_X - contents.width, R2_MAP_HUD::Gold_Y, R2_MAP_HUD::Hud_Width) if R2_MAP_HUD::Show_Gold
  159.     @hud_gold = $game_party.gold
  160.     @current_hp = @actor.hp
  161.     @current_mp = @actor.mp
  162.     @current_tp = @actor.tp
  163.   end
  164.  
  165.   def exp_gauge_color1;   text_color(30);  end;    # TP gauge 1
  166.   def exp_gauge_color2;   text_color(27);  end;    # TP gauge 2
  167.  
  168.   def draw_actor_exp(actor, x, y, width = 124)
  169.     draw_exp_gauge(x, y, width, actor.exp, actor.current_level_exp, actor.next_level_exp, exp_gauge_color1, exp_gauge_color2)
  170.     change_color(system_color)
  171.     draw_text(x, y, 30, line_height, Vocab::Exp_s)
  172.     change_color(normal_color)
  173.     draw_text(x + width - 42, y, 42, line_height, actor.exp.to_i, 2)
  174.   end
  175.  
  176.   def draw_exp_gauge(x, y, width, exp, cur_exp, next_exp, color1, color2)
  177.     curr = (exp - cur_exp).to_f
  178.     dif = (next_exp - cur_exp).to_f
  179.     fill_w = (curr/dif).to_f
  180.     fill_w = fill_w * width
  181.     fill_w = fill_w.to_i
  182.     gauge_y = y + line_height - 8
  183.     contents.fill_rect(x, gauge_y, width, 6, gauge_back_color)
  184.     contents.gradient_fill_rect(x, gauge_y, fill_w, 6, color1, color2)
  185.   end
  186.  
  187.   def refresh
  188.     self.contents.clear
  189.     font = R2_MAP_HUD::Font
  190.     font_size = R2_MAP_HUD::Font_Size
  191.     self.contents.font = Font.new(font, font_size)
  192.     actor_data
  193.   end
  194.  
  195.   def hud_data_changed
  196.     return true if @current_actor != @old_actor
  197.     return true if @current_hp != @actor.hp
  198.     return true if @current_mp != @actor.mp
  199.     return true if @current_tp != @actor.tp
  200.     return true if @hud_gold != $game_party.gold
  201.     if @actor.exp_value
  202.       @actor.exp_value=(false)
  203.       return true
  204.     end
  205.     return false
  206.   end
  207.  
  208.   def update
  209.     super
  210.     refresh if hud_data_changed
  211.   end
  212.  
  213.   def switch_actor
  214.     @old_actor = @current_actor
  215.     @current_actor += 1
  216.     if @current_actor > ($game_party.members.size - 1 )
  217.       @current_actor = 0
  218.     end
  219.     update
  220.   end
  221.   def c_actor
  222.     return @current_actor
  223.   end
  224. end
  225.  
  226. class Game_Actor < Game_Battler
  227.   attr_accessor :exp_value
  228.   alias r2_actor_setup_hud  setup
  229.   def setup(actor_id)
  230.     r2_actor_setup_hud(actor_id)
  231.     @exp_value = false
  232.   end
  233.   alias r2_change_exp_update_hud  change_exp
  234.   def change_exp(exp, show)
  235.     r2_change_exp_update_hud(exp, show)
  236.     exp_value=(true)
  237.   end
  238.   def exp_value=(value = false)
  239.     @exp_value = value
  240.   end
  241.   def exp_value
  242.     return @exp_value
  243.   end
  244. end
  245.  
  246. class Scene_Map < Scene_Base
  247.   alias r2_map_hud_start  start
  248.   def start
  249.     r2_map_hud_start
  250.     start_hud
  251.   end
  252.   def start_hud
  253.     @actor_shown = R2_MAP_HUD::Actor_Shown == 0 ? $game_party.leader : $game_party.members[R2_MAP_HUD::Actor_Shown] if @actor_shown.nil?
  254.     @map_hud = Actor_Hud_Window.new(@actor_shown.id - 1)
  255.   end
  256.   alias r2_map_update_switch_actor    update
  257.   def update
  258.     r2_map_update_switch_actor
  259.     if Input.trigger?(R2_MAP_HUD::Key_Cycle)
  260.       @map_hud.switch_actor if R2_MAP_HUD::Use_Cycle
  261.     end
  262.     hud_update if @actor_shown != $game_party.members[@map_hud.c_actor]
  263.     @hud_actor = $game_party.members[@map_hud.c_actor]
  264.     if @hud_actor.exp_value
  265.       hud_update
  266.     end
  267.   end
  268.   def hud_update
  269.     @map_hud.refresh
  270.     @actor_shown = $game_party.members[@map_hud.c_actor]
  271.   end
  272. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement