Advertisement
roninator2

Equip Item Name Scroll Text

Nov 17th, 2024
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 14.90 KB | Source Code | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Equip Item Name Scroll Text            ║  Version: 1.03     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║ Scroll the text when too long to fit          ║    17 Sep 2023     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires:                                                          ║
  11. # ║                                                                    ║
  12. # ║   TsukiHime Instance Items                                         ║
  13. # ║   Intended to assist with Item Affixes                             ║
  14. # ║                                                                    ║
  15. # ╚════════════════════════════════════════════════════════════════════╝
  16. # ╔════════════════════════════════════════════════════════════════════╗
  17. # ║ Brief Description:                                                 ║
  18. # ║       Allow scrolling text in equip screen                         ║
  19. # ╚════════════════════════════════════════════════════════════════════╝
  20. # ╔════════════════════════════════════════════════════════════════════╗
  21. # ║ Instructions:                                                      ║
  22. # ║                                                                    ║
  23. # ║  Plug and play                                                     ║
  24. # ║  Change the speed number if you like                               ║
  25. # ║                                                                    ║
  26. # ║  Designed for the default system and settings                      ║
  27. # ║  Modifications may need to be done if not using defaults           ║
  28. # ║                                                                    ║
  29. # ╚════════════════════════════════════════════════════════════════════╝
  30. # ╔════════════════════════════════════════════════════════════════════╗
  31. # ║ Updates:                                                           ║
  32. # ║ 1.03 - 22 Nov 2024 - Script finished                               ║
  33. # ║                                                                    ║
  34. # ╚════════════════════════════════════════════════════════════════════╝
  35. # ╔════════════════════════════════════════════════════════════════════╗
  36. # ║ Credits and Thanks:                                                ║
  37. # ║   Roninator2                                                       ║
  38. # ║   RPG Maker Source                                                 ║
  39. # ╚════════════════════════════════════════════════════════════════════╝
  40. # ╔════════════════════════════════════════════════════════════════════╗
  41. # ║ Terms of use:                                                      ║
  42. # ║  Follow the original Authors terms of use where applicable         ║
  43. # ║    - When not made by me (Roninator2)                              ║
  44. # ║  Free for all uses in RPG Maker except nudity                      ║
  45. # ║  Anyone using this script in their project before these terms      ║
  46. # ║  were changed are allowed to use this script even if it conflicts  ║
  47. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  48. # ║  No part of this code can be used with AI programs or tools        ║
  49. # ║  Credit must be given                                              ║
  50. # ╚════════════════════════════════════════════════════════════════════╝
  51.  
  52. module R2_Equip_Scroll_Name
  53.   Equip_Speed = 0.8 # anything from 0.4 to 1.2 is ok
  54.   Equip_length = 16 # length of name to show when not selected
  55. end
  56.  
  57. # ╔════════════════════════════════════════════════════════════════════╗
  58. # ║                      End of editable region                        ║
  59. # ╚════════════════════════════════════════════════════════════════════╝
  60.  
  61. #==============================================================================
  62. # ** Window_EquipSlot
  63. #==============================================================================
  64.  
  65. class Window_EquipSlot < Window_Selectable
  66.  
  67.   #--------------------------------------------------------------------------
  68.   # * Object Initialization
  69.   #--------------------------------------------------------------------------
  70.   alias r2_equip_text_scroll_init   initialize
  71.   def initialize(x, y, width)
  72.     @r2_scrolling_equip_text_line ||= {}
  73.     r2_equip_text_scroll_init(x, y, width)
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # * Draw Item Name
  77.   #     enabled : Enabled flag. When false, draw semi-transparently.
  78.   #--------------------------------------------------------------------------
  79.   def draw_item_name(item, x, y, enabled = true, width = 175)
  80.     return unless item
  81.     draw_icon(item.icon_index, x, y, enabled)
  82.     change_color(normal_color, enabled)
  83.     cw = contents.text_size(item.name).width
  84.     if cw < width
  85.       draw_text(x + 24, y, width, line_height, item.name)
  86.     else
  87.       set_text(item.id, x, y, item.name, width, cw)
  88.     end
  89.   end
  90. #=============================================================================
  91.   #--------------------------------------------------------------------------
  92.   # * Update.                                                           [MOD]
  93.   #--------------------------------------------------------------------------
  94.   alias r2_update_equip_text_scroll   update
  95.   def update
  96.     # Original method.
  97.     r2_update_equip_text_scroll
  98.     # data -> key = id -> 0 = text, 1 = speed, 2 = width, 3 = bitmap,
  99.     # 4 - position {x,y}, 5 - text width, 6 - placement, 7 - direction <- ->
  100.     # 8 - viewport
  101.     refresh if @r2_scrolling_equip_text_line == {} && self.active
  102.     return if @r2_scrolling_equip_text_line == {}
  103.     eqitem = @actor.equips[@index].nil? ? -1 : @actor.equips[@index].id
  104.     @r2_scrolling_equip_text_line.each do |id, data|
  105.       next if eqitem != id
  106.       if data[3].nil?
  107.         refresh
  108.         return
  109.       end
  110.       data[3].visible = visible
  111.       # Advance the image position
  112.       # Change the offset X to scroll.
  113.       if (data[7] == 0)
  114.         data[6] += (1.0 * data[1])
  115.         data[3].ox = data[6] + data[2]
  116.       elsif (data[7] == 1)
  117.         data[6] -= (1.0 * data[1])
  118.         data[3].ox = data[6] + data[2]
  119.       end
  120.       if (data[6] >= (data[5] + (data[2] / 5)))
  121.         data[7] = 1
  122.       elsif (data[6] <= (data[5] - data[2] + 30))
  123.         data[7] = 0
  124.       end
  125.     end
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # * Set Text.                                                         [REP]
  129.   #--------------------------------------------------------------------------
  130.   def set_text(id, x, y, text, width, cw)
  131.     # New text?
  132.     # data -> key = id -> 0 = text, 1 = speed, 2 = width, 3 = bitmap,
  133.     # 4 - position, 5 - text width, 6 - placement, 7 - direction,
  134.     # 8 - viewport
  135.     @r2_scrolling_equip_text_line ||= {}
  136.     if @r2_scrolling_equip_text_line.empty? || @r2_scrolling_equip_text_line[id].nil? ||
  137.         text != @r2_scrolling_equip_text_line[id][1]
  138.       # Dispose the Scrolling Help objects if needed.
  139.       r2_scrolling_text_dispose(id) if @r2_scrolling_equip_text_line[id] != nil
  140.       speed = R2_Equip_Scroll_Name::Equip_Speed
  141.       x = x + self.x
  142.       if cw > width
  143.         # draw the line as a scrolling line.
  144.         @r2_scrolling_equip_text_line[id] = [text, speed, width, nil, [x, y], cw,
  145.           x, 0, nil]
  146.         r2_equip_scrolling_text_create(id, x, y, text, width)
  147.       end
  148.     end
  149.   end
  150.   #--------------------------------------------------------------------------
  151.   # * Scrolling Help Create.                                            [NEW]
  152.   #--------------------------------------------------------------------------
  153.   def r2_equip_scrolling_text_create(id, x, y, text, width)
  154.     # draw normal text if not at index position
  155.     eqitem = @actor.equips[@index].nil? ? -1 : @actor.equips[@index].id
  156.     if eqitem != id
  157.       text = text[0..(R2_Equip_Scroll_Name::Equip_length - 1)] + "..."
  158.       draw_text(120, y, width, line_height, text)
  159.       return
  160.     end
  161.     # Create a Bitmap instance to draw the text into it.
  162.     line_bitmap = Bitmap.new(@r2_scrolling_equip_text_line[id][5] + 24, calc_line_height(text))
  163.     # Save current Window's Bitmap.
  164.     original_contents = contents
  165.     # Set the recently created Bitmap as the Window's Bitmap.
  166.     self.contents = line_bitmap
  167.     # Use the default method to draw the text into it.
  168.     draw_text_ex(24, 0, text)
  169.     # Reset back the Window's Bitmap to the original one.
  170.     self.contents = original_contents
  171.     # Viewport for the Scrolling Line.
  172.     @r2_scrolling_equip_text_line[id][8] = Viewport.new(
  173.       x + standard_padding + 24,
  174.       self.y + y + standard_padding,
  175.       width,
  176.       line_bitmap.height
  177.     )
  178.     # Put the recently created Viewport on top of this Window.
  179.     @r2_scrolling_equip_text_line[id][8].z = viewport ? viewport.z + 1 : z + 1
  180.     # Create a Plane instance for the scrolling effect.
  181.     @r2_scrolling_equip_text_line[id][3] = Plane.new(@r2_scrolling_equip_text_line[id][8])
  182.     # Assign the recently created Bitmap (where the line is drawn) to it.
  183.     @r2_scrolling_equip_text_line[id][3].bitmap = line_bitmap
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # * Scrolling Help Dispose.                                           [NEW]
  187.   #--------------------------------------------------------------------------
  188.   def r2_equip_scrolling_text_dispose(id)
  189.     # Disposes Bitmap, Plane and Viewport.
  190.     if !@r2_scrolling_equip_text_line[id][3].nil?
  191.       @r2_scrolling_equip_text_line[id][3].bitmap.dispose
  192.       @r2_scrolling_equip_text_line[id][3].dispose
  193.     end
  194.     # Prevents executing this method when the Plane (or Viewport) is disposed.
  195.     @r2_scrolling_equip_text_line[id][3] = nil
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # * Dispose All values.                                               [NEW]
  199.   #--------------------------------------------------------------------------
  200.   def dispose_equip_list
  201.     if @r2_scrolling_equip_text_line != {}
  202.       @r2_scrolling_equip_text_line.each do |key, entry|
  203.         r2_equip_scrolling_text_dispose(key)
  204.       end
  205.     end
  206.     @r2_scrolling_equip_text_line = {}
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # * Dispose.                                                          [MOD]
  210.   #--------------------------------------------------------------------------
  211.   def dispose
  212.     # Dispose Scrolling Help objects if needed.
  213.     if @r2_scrolling_equip_text_line != {}
  214.       dispose_equip_list
  215.     end
  216.     @r2_scrolling_text_line = {}
  217.     # Original method.
  218.     super
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # * Refresh
  222.   #--------------------------------------------------------------------------
  223.   alias r2_refresh_dispose_scroll_text  refresh
  224.   def refresh
  225.     if @r2_scrolling_equip_text_line != {}
  226.       dispose_equip_list
  227.     end
  228.     @r2_scrolling_equip_text_line = {}
  229.     r2_refresh_dispose_scroll_text
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # * Cursor Movement Processing
  233.   #--------------------------------------------------------------------------
  234.   alias r2_cursor_index_move_refresh_draw process_cursor_move
  235.   def process_cursor_move
  236.     last_index = @index
  237.     r2_cursor_index_move_refresh_draw
  238.     refresh if @index != last_index
  239.   end
  240. end
  241.  
  242. class Scene_Equip < Scene_MenuBase
  243.   #--------------------------------------------------------------------------
  244.   # * Item [Cancel]
  245.   #--------------------------------------------------------------------------
  246.   alias r2_equip_scroll_name_refresh_on_cancel   on_item_cancel
  247.   def on_item_cancel
  248.     r2_equip_scroll_name_refresh_on_cancel
  249.     @item_window.refresh
  250.   end
  251.   #--------------------------------------------------------------------------
  252.   # * Slot [Cancel]
  253.   #--------------------------------------------------------------------------
  254.   alias r2_slot_equip_text_scroll_cancel_refresh  on_slot_cancel
  255.   def on_slot_cancel
  256.     r2_slot_equip_text_scroll_cancel_refresh
  257.     @slot_window.refresh
  258.   end
  259. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement