Advertisement
roninator2

Syvkal Ring Menu Addon - Title Ring

Nov 21st, 2024 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 17.56 KB | None | 0 0
  1. # ╔═══════════════════════════════════════════════╦════════════════════╗
  2. # ║ Title: Syvkal Ring Menu Addon - Title Ring    ║  Version: 1.03     ║
  3. # ║ Author: Roninator2                            ║                    ║
  4. # ╠═══════════════════════════════════════════════╬════════════════════╣
  5. # ║ Function:                                     ║   Date Created     ║
  6. # ║                                               ╠════════════════════╣
  7. # ║      Add ring menu to title menu              ║    02 Jan 2021     ║
  8. # ╚═══════════════════════════════════════════════╩════════════════════╝
  9. # ╔════════════════════════════════════════════════════════════════════╗
  10. # ║ Requires: Syvkal's Ring Menu - Optional                            ║
  11. # ║                                                                    ║
  12. # ╚════════════════════════════════════════════════════════════════════╝
  13. # ╔════════════════════════════════════════════════════════════════════╗
  14. # ║ Brief Description:                                                 ║
  15. # ║       Add ring menu to title menu                                  ║
  16. # ╚════════════════════════════════════════════════════════════════════╝
  17. # ╔════════════════════════════════════════════════════════════════════╗
  18. # ║ Instructions:                                                      ║
  19. # ║   Using code from Syvkal's Ring Menu                               ║
  20. # ║   I created the title screen menu                                  ║
  21. # ║                                                                    ║
  22. # ║   If other options are added, it will require changes.             ║
  23. # ║   Icons must be in the format of ''choice' + space + icon'         ║
  24. # ║   example                                                          ║
  25. # ║   'yes icon'.png or 'no icon'.png  - without quotes                ║
  26. # ╚════════════════════════════════════════════════════════════════════╝
  27. # ╔════════════════════════════════════════════════════════════════════╗
  28. # ║ Updates:                                                           ║
  29. # ║ 1.00 - 02 Jan 2021 - Initial publish                               ║
  30. # ║ 1.01 - 02 Jan 2021 - Created Circle Background                     ║
  31. # ║ 1.02 - 03 Jan 2021 - Added color options for background            ║
  32. # ║ 1.03 - 04 Jan 2021 - Made independent of Syvkals script            ║
  33. # ╚════════════════════════════════════════════════════════════════════╝
  34. # ╔════════════════════════════════════════════════════════════════════╗
  35. # ║ Credits and Thanks:                                                ║
  36. # ║   Roninator2                                                       ║
  37. # ║   Syvkal                                                           ║
  38. # ║   Spaceferryblues                                                  ║
  39. # ║   Masked                                                           ║
  40. # ║   Shiroyasha                                                       ║
  41. # ╚════════════════════════════════════════════════════════════════════╝
  42. # ╔════════════════════════════════════════════════════════════════════╗
  43. # ║ Terms of use:                                                      ║
  44. # ║  Follow the original Authors terms of use where applicable         ║
  45. # ║    - When not made by me (Roninator2)                              ║
  46. # ║  Free for all uses in RPG Maker except nudity                      ║
  47. # ║  Anyone using this script in their project before these terms      ║
  48. # ║  were changed are allowed to use this script even if it conflicts  ║
  49. # ║  with these new terms. New terms effective 03 Apr 2024             ║
  50. # ║  No part of this code can be used with AI programs or tools        ║
  51. # ║  Credit must be given                                              ║
  52. # ╚════════════════════════════════════════════════════════════════════╝
  53.  
  54. module R2_Title_Shade
  55.   Use_Background = true
  56.   # Set colors to the circle image
  57.   Background_Red = 0
  58.   Background_Green = 0
  59.   Background_Blue = 0
  60.   Background_Opacity = 180
  61. end
  62.  
  63. module R2_Syvkal_Ring
  64.   RING_R = 75
  65.   STARTUP_FRAMES = 20
  66.   MOVING_FRAMES = 15
  67. end
  68.  
  69. # ╔════════════════════════════════════════════════════════════════════╗
  70. # ║                      End of editable region                        ║
  71. # ╚════════════════════════════════════════════════════════════════════╝
  72.  
  73. #==============================================================================
  74. # ** Window_TitleCommand
  75. #------------------------------------------------------------------------------
  76. #  This window is for selecting New Game/Continue on the title screen.
  77. #==============================================================================
  78. class Window_TitleCommand < Window_Command
  79.   #--------------------------------------------------------------------------
  80.   # * Object Initialization
  81.   #--------------------------------------------------------------------------
  82.   def initialize
  83.     super(0, 0)
  84.     @cx = contents.width / 2; @cy = contents.height / 2
  85.     @icons = []
  86.     @titlecom = []
  87.     @startup = R2_Syvkal_Ring::STARTUP_FRAMES
  88.     @steps = @startup
  89.     @list.clear
  90.     make_command_list
  91.     update_placement
  92.     make_title_icons
  93.     select(1) if continue_enabled
  94.     select(0) if !continue_enabled
  95.     self.opacity = 0
  96.     if R2_Title_Shade::Use_Background
  97.       create_back_bitmap_turn
  98.       create_back_sprite_turn
  99.     end
  100.     @mode = :start
  101.     open
  102.     activate
  103.     refresh
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # * Refresh Start Period
  107.   #--------------------------------------------------------------------------
  108.   def refresh_start
  109.     d1 = 2.0 * Math::PI / item_max
  110.     d2 = 1.0 * Math::PI / @startup
  111.     r = R2_Syvkal_Ring::RING_R - 1.0 * R2_Syvkal_Ring::RING_R * @steps / @startup
  112.     for i in 0...item_max
  113.       j = i - index
  114.       d = d1 * j + d2 * @steps
  115.       x = @cx + ( r * Math.sin( d ) ).to_i
  116.       y = @cy - ( r * Math.cos( d ) ).to_i
  117.       draw_item_icons(x, y, i)
  118.     end
  119.     @steps -= 1
  120.     if @steps < 0
  121.       @mode = :wait
  122.     end
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # * Refresh Wait Period
  126.   #--------------------------------------------------------------------------
  127.   def refresh_wait
  128.     d = 2.0 * Math::PI / item_max
  129.     for i in 0...item_max
  130.       j = i - index
  131.       x = @cx + ( R2_Syvkal_Ring::RING_R * Math.sin( d * j) ).to_i
  132.       y = @cy - ( R2_Syvkal_Ring::RING_R * Math.cos( d * j) ).to_i
  133.       draw_item_icons(x, y, i)
  134.     end
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # * Refresh Movement Period
  138.   #--------------------------------------------------------------------------
  139.   def refresh_move( mode )
  140.     d1 = 2.0 * Math::PI / item_max
  141.     d2 = d1 / R2_Syvkal_Ring::MOVING_FRAMES
  142.     d2 *= -1 unless mode != 0
  143.     for i in 0...item_max
  144.       j = i - index
  145.       d = d1 * j + d2 * @steps
  146.       x = @cx + ( R2_Syvkal_Ring::RING_R * Math.sin( d ) ).to_i
  147.       y = @cy - ( R2_Syvkal_Ring::RING_R * Math.cos( d ) ).to_i
  148.       draw_item_icons(x, y, i)
  149.     end
  150.     @steps -= 1
  151.     if @steps < 0
  152.       @mode = :wait
  153.     end
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # * Update Cursor
  157.   #--------------------------------------------------------------------------
  158.   def update_cursor
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # * Frame Update
  162.   #--------------------------------------------------------------------------
  163.   def update
  164.     super
  165.     refresh if animation?
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # * Refresh
  169.   #--------------------------------------------------------------------------
  170.   def refresh    
  171.     self.contents.clear
  172.     case @mode
  173.     when :start
  174.       refresh_start
  175.     when :wait
  176.       refresh_wait
  177.     when :mover
  178.       refresh_move(1)
  179.     when :movel
  180.       refresh_move(0)
  181.     end
  182.     rect = Rect.new(self.x, self.y + 60, self.contents.width, line_height)
  183.     draw_text(rect, choice_name(index), 1)
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # * Determines if is moving
  187.   #--------------------------------------------------------------------------
  188.   def animation?
  189.     return @mode != :wait
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # * Move Cursor Down
  193.   #--------------------------------------------------------------------------
  194.   def cursor_down(wrap)
  195.     cursor_right(wrap)
  196.   end
  197.   #--------------------------------------------------------------------------
  198.   # * Move Cursor Up
  199.   #--------------------------------------------------------------------------
  200.   def cursor_up(wrap)
  201.     cursor_left(wrap)
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # * Move Cursor Right
  205.   #--------------------------------------------------------------------------
  206.   def cursor_right(wrap)
  207.     unless animation?
  208.       select((index + 1) % item_max)
  209.       @mode = :mover
  210.       @steps = R2_Syvkal_Ring::MOVING_FRAMES
  211.       Sound.play_cursor
  212.     end
  213.   end
  214.   #--------------------------------------------------------------------------
  215.   # * Move Cursor Left
  216.   #--------------------------------------------------------------------------
  217.   def cursor_left(wrap)
  218.     unless animation?
  219.       select((index - 1 + item_max) % item_max)
  220.       @mode = :movel
  221.       @steps = R2_Syvkal_Ring::MOVING_FRAMES
  222.       Sound.play_cursor
  223.     end
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # * Update Window Position
  227.   #--------------------------------------------------------------------------
  228.   def update_placement
  229.     self.x = (Graphics.width - width) / 2
  230.     self.y = (Graphics.height * 1.6 - height) / 2.2
  231.   end
  232.   #--------------------------------------------------------------------------
  233.   # * Get Activation State of Continue
  234.   #--------------------------------------------------------------------------
  235.   def continue_enabled
  236.     DataManager.save_file_exists?
  237.   end
  238.   #--------------------------------------------------------------------------
  239.   # * make_title_icons
  240.   #--------------------------------------------------------------------------
  241.   def make_title_icons
  242.     @titlecom.each_with_index do |command, i|
  243.       @icons.push(Cache::picture(command + ' Icon'))
  244.       rect = Rect.new(self.x, self.y, @icons[i].width / 2, @icons[i].height / 2)
  245.       draw_item_icons(x, y, i)
  246.     end
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   # * Get Window Width
  250.   #--------------------------------------------------------------------------
  251.   def window_width
  252.     return Graphics.width
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # * Get Window Height
  256.   #--------------------------------------------------------------------------
  257.   def window_height
  258.     return Graphics.height
  259.   end
  260.   #--------------------------------------------------------------------------
  261.   # * Create Command List
  262.   #--------------------------------------------------------------------------
  263.   def make_command_list
  264.     @titlecom = []
  265.     add_command(Vocab::new_game, :new_game)
  266.     add_command(Vocab::continue, :continue, continue_enabled)
  267.     add_command(Vocab::shutdown, :shutdown)
  268.     @titlecom.push(Vocab::new_game)
  269.     @titlecom.push(Vocab::continue)
  270.     @titlecom.push(Vocab::shutdown)
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # * Get Command Name
  274.   #--------------------------------------------------------------------------
  275.   def choice_name(index)
  276.     return if @titlecom == nil
  277.     @titlecom[index]
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # * Draw Item
  281.   #     x     : draw spot x-coordinate
  282.   #     y     : draw spot y-coordinate
  283.   #     i     : item number
  284.   #--------------------------------------------------------------------------
  285.   def draw_item_icons(x, y, i)
  286.     return if @icons.nil?
  287.     rect = Rect.new(0, 0, @icons[i].width, @icons[i].height)
  288.     if i == index
  289.       self.contents.blt(x - rect.width/2, y - rect.height/2, @icons[i], rect )
  290.       unless command_enabled?(index)
  291.         self.contents.blt(x - rect.width/2, y - rect.height/2, ICON_DISABLE, rect )
  292.       end
  293.     else
  294.       self.contents.blt(x - rect.width/2, y - rect.height/2, @icons[i], rect, 128 )
  295.     end
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # * Create Background Bitmap
  299.   #--------------------------------------------------------------------------
  300.   def create_back_bitmap_turn
  301.         @back_bitmap_turn = Bitmap.new(width, height)
  302.     r = R2_Title_Shade::Background_Red
  303.     g = R2_Title_Shade::Background_Green
  304.     b = R2_Title_Shade::Background_Blue
  305.     o = R2_Title_Shade::Background_Opacity
  306.     @back_bitmap_turn.draw_circle(275,200,100,Color.new(r,g,b,o))
  307.   end
  308.   #--------------------------------------------------------------------------
  309.   # * Create Background Sprite
  310.   #--------------------------------------------------------------------------
  311.   def create_back_sprite_turn
  312.         @back_sprite_turn = Sprite.new
  313.         @back_sprite_turn.bitmap = @back_bitmap_turn
  314.         @back_sprite_turn.z = z - 1
  315.     @back_sprite_turn.y = self.y
  316.         @back_sprite_turn.x = self.x
  317.   end
  318.   #--------------------------------------------------------------------------
  319.   # * Free Background Bitmap
  320.   #--------------------------------------------------------------------------
  321.   def dispose_back_bitmap_turn
  322.         @back_bitmap_turn.dispose
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # * Free Background Sprite
  326.   #--------------------------------------------------------------------------
  327.   def dispose_back_sprite_turn
  328.         @back_sprite_turn.dispose
  329.   end
  330.   #--------------------------------------------------------------------------
  331.   # * Dispose Background
  332.   #--------------------------------------------------------------------------
  333.   alias r2_title_back_dispose dispose
  334.   def dispose
  335.     r2_title_back_dispose
  336.         dispose_back_bitmap_turn
  337.         dispose_back_sprite_turn
  338.   end
  339. end
  340. #==============================================================================
  341. # ** Bitmap
  342. #==============================================================================
  343. class Bitmap
  344.   #----------------------------------------------------------------------------
  345.   # * Drawing a circle
  346.   #----------------------------------------------------------------------------
  347. def draw_circle(y,x,r,color)
  348.  
  349.   for i in (y - r).. (y + r)
  350.     j1 = Math.sqrt((r**2) - ((i - y)*(i - y))) + x
  351.     j2 = - Math.sqrt((r**2) - ((i - y)*(i - y))) + x
  352.     j1 = j1.to_i
  353.     j2 = j2.to_i
  354.  
  355.     for k in j2..j1
  356.       self.set_pixel(i,k,color)
  357.     end
  358.    
  359.   end
  360.  
  361.   for j in (x - r).. (x + r)
  362.     i1 = Math.sqrt((r**2) - ((j - x)*(j - x))) + y
  363.     i2 = - Math.sqrt((r**2) - ((j - x)*(j - x))) + y
  364.     self.set_pixel(i1,j,color)
  365.     self.set_pixel(i2,j,color)
  366.   end
  367. end
  368. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement