Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Ring menu

Sain07

Member

Hi,
(First my mothertongue is german pls excuse my mistakes :) )

I´m new in RPGMakerXP an not really good in scripting. I found a very cool ringmenu and want it for my game. But the problem is
1. After a fight I can´t open my menu (When I start the game there are no mistakes) and it comes a window with the sentence : " Script 'ringmenu' line 352: RGSSError occurd disposed bitmap."
2. There are a button in it names "questlog" I don´t need it so how I get it out of the menu?

here is it:
Code:
------------------------------------------------------------------------------

#  Ring_Menu

#------------------------------------------------------------------------------

#  By:  XRXS, Dubealex, and Hypershadow180

#------------------------------------------------------------------------------

class Scene_Menu

#------------------------------------------------------------------------------

#  Initialize

#------------------------------------------------------------------------------

  def initialize(menu_index = 0)

    @menu_index = menu_index

    $location_text=[]

    $gold_text=[]

    $window_size=[]

    $ring_menu_text=[]

    $chara_select=[]

    @window_opacity=[]

    @chara_select=[]

    @window_position=[]

    $location_text[0]="Calibri" # Font Type

    $location_text[1]=24 # Font Size

    $location_text[2]=0 # Location Title Color

    $location_text[4]=0 # Map Name Color

    $location_text[3]="Location:" # Text

    $gold_text[0]="Calibri" # Font Type

    $gold_text[1]=20 # Font Size

    $gold_text[2]=0 # Gold Title Color

    $gold_text[3]=0 # Gold Color

    $gold_text[4]="Gold" # Text

    @window_opacity[0]=255 # Border Opacity

    @window_opacity[1]=130 # Background Opacity

    $window_location_skin="001-Blue01" # Location Windowskin

    $window_gold_skin="001-Blue01" # Gold Windowskin

    @window_position[0]=0 # X Axis Position

    @window_position[1]=0 # Location Y Axis Position

    @window_position[2]=384 # Gold Y Axis Position

    $window_size[0]=160 # Length

    $window_size[1]=96 # Height

    $ring_menu_text[0]="Calibri" # Font Type

    $ring_menu_text[7]=0 # Font Color

    $ring_menu_text[8]=20 # Font Size

    $ring_menu_text[1]="Items"

    $ring_menu_text[2]="Skills"

    $ring_menu_text[3]="Equip"

    $ring_menu_text[4]="Stats"

    $ring_menu_text[5]="Questlog"

    $ring_menu_text[6]="Save"

    $ring_menu_text[7]="Quit"

    @chara_select[0]=408 # X Axis Position

    @chara_select[1]=0 # Y Axis Position

    $chara_select[0]="Calibri" # Font Type

    $chara_select[1]=0 # Font Color

    $chara_select[5]=24 # Font Size

    $chara_select[2]=255 # Border Opacity

    $chara_select[3]=130 # Background Opacity

    $chara_select[4]="001-Blue01" # Windowskin

  end

#------------------------------------------------------------------------------

#  Main

#------------------------------------------------------------------------------

  def main

    @window_gold = Window_MenuGold.new

    @window_gold.x = @window_position[0]

    @window_gold.y = @window_position[2]

    @window_gold.opacity = @window_opacity[0]

    @window_gold.back_opacity = @window_opacity[1]

    @spriteset = Spriteset_Map.new

    px = $game_player.screen_x - 15

    py = $game_player.screen_y - 24

    @command_window = Window_RingMenu.new(px,py)

    @command_window.index = @menu_index

    if $game_party.actors.size == 0

      @command_window.disable_item(0)

      @command_window.disable_item(1)

      @command_window.disable_item(2)

      @command_window.disable_item(3)

    end

    @command_window.z = 100

    if $game_system.save_disabled

      @command_window.disable_item(5)

    end

    @status_window = Window_RingMenuStatus.new

    @status_window.x = @chara_select[0]

    @status_window.y = @chara_select[1]

    @status_window.z = 200

    @status_window.opacity=$chara_select[2]

    @status_window.back_opacity=$chara_select[3]

    @status_window.visible = false

    Graphics.transition

    loop do

      Graphics.update

      Input.update

      update

      if $scene != self

        break

      end

    end

    Graphics.freeze

    @spriteset.dispose

    @window_gold.dispose

    @command_window.dispose

    @status_window.dispose

  end

#------------------------------------------------------------------------------

#  Update

#------------------------------------------------------------------------------

  def update

    @window_gold.update

    @command_window.update

    @status_window.update

    if @command_window.active

      update_command

      return

    end

    if @status_window.active

      update_status

      return

    end

  end

#------------------------------------------------------------------------------

#  Update Comman

#------------------------------------------------------------------------------

  def update_command

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      $scene = Scene_Map.new

      return

    end

    if Input.trigger?(Input::C)

      if $game_party.actors.size == 0 and @command_window.index < 4

        $game_system.se_play($data_system.buzzer_se)

        return

      end

    case @command_window.index

    when 0

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Item.new

    when 1

      $game_system.se_play($data_system.decision_se)

      @command_window.active = false

      @status_window.active = true

      @status_window.visible = true

      @status_window.index = 0

    when 2

      $game_system.se_play($data_system.decision_se)

      @command_window.active = false

      @status_window.active = true

      @status_window.visible = true

      @status_window.index = 0

    when 3

      $game_system.se_play($data_system.decision_se)

      @command_window.active = false

      @status_window.active = true

      @status_window.visible = true

      @status_window.index = 0

    when 4

      $game_system.se_play($data_system.decision_se)

      @command_window.active = false

      @status_window.active = true

      @status_window.visible = true

      @status_window.index = 0

    when 5

      if $game_system.save_disabled

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Save.new

    when 6

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_End.new

    end

    return

  end

  return if @command_window.animation?

    if Input.press?(Input::UP) or  Input.press?(Input::LEFT)

      $game_system.se_play($data_system.cursor_se)

      @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)

      return

    end

    if Input.press?(Input::DOWN) or  Input.press?(Input::RIGHT)

      $game_system.se_play($data_system.cursor_se)

      @command_window.setup_move_move(Window_RingMenu::MODE_MOVER)

      return

    end

  end

#------------------------------------------------------------------------------

#  Update Status

#------------------------------------------------------------------------------

  def update_status

    if Input.trigger?(Input::B)

      $game_system.se_play($data_system.cancel_se)

      @command_window.active = true

      @status_window.active = false

      @status_window.visible = false

      @status_window.index = -1

      return

    end

    if Input.trigger?(Input::C)

    case @command_window.index

    when 1

      if $game_party.actors[@status_window.index].restriction >= 2

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Skill.new(@status_window.index)

    when 2

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Equip.new(@status_window.index)

    when 3

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Status.new(@status_window.index)

    when 4

      $game_system.se_play($data_system.decision_se)

      $scene = Scene_Questlog.new

      end

      return

    end

  end

end

#------------------------------------------------------------------------------

#  Window_RingMenu

#------------------------------------------------------------------------------

class Window_RingMenu < Window_Base

  STARTUP_FRAMES = 20

  MOVING_FRAMES = 5 

  RING_R = 64       

  ICON_ITEM  = RPG::Cache.icon("034-Item03")

  ICON_SKILL  = RPG::Cache.icon("044-Skill01")

  ICON_EQUIP  = RPG::Cache.icon("001-Weapon01")

  ICON_STATUS = RPG::Cache.icon("050-Skill07")

  ICON_QUESTLOG = RPG::Cache.icon("039-Item08")

  ICON_SAVE  = RPG::Cache.icon("038-Item07")

  ICON_EXIT  = RPG::Cache.icon("046-Skill03")

  ICON_DISABLE= RPG::Cache.icon("")

  SE_STARTUP = "056-Right02"

  MODE_START = 1

  MODE_WAIT  = 2

  MODE_MOVER = 3

  MODE_MOVEL = 4

  attr_accessor :index

#------------------------------------------------------------------------------

#  Initialize

#------------------------------------------------------------------------------

  def initialize( center_x, center_y )

    super(0, 0, 640, 480)

    self.contents = Bitmap.new(width-32, height-32)

    self.contents.font.name = $ring_menu_text[0]

    self.contents.font.color = text_color($ring_menu_text[7])

    self.contents.font.size = $ring_menu_text[8]

    self.opacity = 0

    self.back_opacity = 0

    s1 = $ring_menu_text[1]

    s2 = $ring_menu_text[2]

    s3 = $ring_menu_text[3]

    s4 = $ring_menu_text[4]

    s5 = $ring_menu_text[5]

    s6 = $ring_menu_text[6]

    s7 = $ring_menu_text[7]

    @commands = [ s1, s2, s3, s4, s5, s6, s7 ]

    @item_max = 7

    @index = 0

    @items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_QUESTLOG, ICON_SAVE, ICON_EXIT ]

    @disabled = [ false, false, false, false, false, false, false ]

    @cx = center_x - 16

    @cy = center_y - 16

    setup_move_start

    refresh

  end

#------------------------------------------------------------------------------

#  Update

#------------------------------------------------------------------------------

  def update

    super

    refresh

  end

#------------------------------------------------------------------------------

#  Refresh

#------------------------------------------------------------------------------

  def refresh

    self.contents.clear

    case @mode

    when MODE_START

      refresh_start

    when MODE_WAIT

      refresh_wait

    when MODE_MOVER

      refresh_move(1)

    when MODE_MOVEL

      refresh_move(0)

    end

    rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)

    self.contents.draw_text(rect, @commands[@index],1)

  end

#------------------------------------------------------------------------------

#  Refresh Start

#------------------------------------------------------------------------------

  def refresh_start

    d1 = 2.0 * Math::PI / @item_max

    d2 = 1.0 * Math::PI / STARTUP_FRAMES

    r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES

    for i in 0...@item_max

      j = i - @index

      d = d1 * j + d2 * @steps

      x = @cx + ( r * Math.sin( d ) ).to_i

      y = @cy - ( r * Math.cos( d ) ).to_i

      draw_item(x, y, i)

    end

    @steps -= 1

    if @steps < 1

      @mode = MODE_WAIT

    end

  end

#------------------------------------------------------------------------------

#  Refresh Wait

#------------------------------------------------------------------------------

  def refresh_wait

    d = 2.0 * Math::PI / @item_max

    for i in 0...@item_max

      j = i - @index

      x = @cx + ( RING_R * Math.sin( d * j ) ).to_i

      y = @cy - ( RING_R * Math.cos( d * j ) ).to_i

      draw_item(x, y, i)

    end

  end

#------------------------------------------------------------------------------

#  Refresh Move

#------------------------------------------------------------------------------

  def refresh_move( mode )

    d1 = 2.0 * Math::PI / @item_max

    d2 = d1 / MOVING_FRAMES

    d2 *= -1 if mode != 0

    for i in 0...@item_max

      j = i - @index

      d = d1 * j + d2 * @steps

      x = @cx + ( RING_R * Math.sin( d ) ).to_i

      y = @cy - ( RING_R * Math.cos( d ) ).to_i

      draw_item(x, y, i)

    end

    @steps -= 1

    if @steps < 1

      @mode = MODE_WAIT

    end

  end

#------------------------------------------------------------------------------

#  Draw Item

#------------------------------------------------------------------------------

  def draw_item(x, y, i)

    rect = Rect.new(0, 0, @items[i].width, @items[i].height)

    if @index == i

      self.contents.blt( x, y, @items[i], rect )

      if @disabled[@index]

        self.contents.blt( x, y, ICON_DISABLE, rect )

      end

    else

      self.contents.blt( x, y, @items[i], rect, 128 )

      if @disabled[@index]

        self.contents.blt( x, y, ICON_DISABLE, rect, 128 )

      end

    end

  end

#------------------------------------------------------------------------------

#  Disable Item

#------------------------------------------------------------------------------

  def disable_item(index)

    @disabled[index] = true

  end

#------------------------------------------------------------------------------

#  Setup Move Start

#------------------------------------------------------------------------------

  def setup_move_start

    @mode = MODE_START

    @steps = STARTUP_FRAMES

    if  SE_STARTUP != nil and SE_STARTUP != ""

      Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)

    end

  end

#------------------------------------------------------------------------------

#  Setup Move Move

#------------------------------------------------------------------------------

  def setup_move_move(mode)

    if mode == MODE_MOVER

      @index -= 1

      @index = @items.size - 1 if @index < 0

    elsif mode == MODE_MOVEL

      @index += 1

      @index = 0 if @index >= @items.size

    else

      return

    end

    @mode = mode

    @steps = MOVING_FRAMES

  end

#------------------------------------------------------------------------------

#  Animation

#------------------------------------------------------------------------------

  def animation?

    return @mode != MODE_WAIT

  end

end

#------------------------------------------------------------------------------

#  Window_RingMenuStatus

#------------------------------------------------------------------------------

class Window_RingMenuStatus < Window_Selectable

#------------------------------------------------------------------------------

#  Initialize

#------------------------------------------------------------------------------

  def initialize

    super(204, 64, 232, 352)

    self.contents = Bitmap.new(width - 32, height - 32)

    self.contents.font.size = $chara_select[5]

    refresh

    self.active = false

    self.index = -1

  end

#------------------------------------------------------------------------------

#  Refresh

#------------------------------------------------------------------------------

  def refresh

    self.contents.clear

    self.windowskin = RPG::Cache.windowskin($chara_select[4])

    self.contents.font.name = $chara_select[0]

    self.contents.font.color = text_color($chara_select[1])

    @item_max = $game_party.actors.size

    for i in 0...$game_party.actors.size

      x = 80

      y = 80 * i

      actor = $game_party.actors[i]

      draw_actor_graphic(actor, x - 60, y + 65)

      draw_actor_name(actor, x, y + 2)

      draw_actor_hp(actor, x - 40, y + 26)

      draw_actor_sp(actor, x - 40, y + 50)

    end

  end

#------------------------------------------------------------------------------

#  Update Cursor Rect

#------------------------------------------------------------------------------

  def update_cursor_rect

    if @index < 0

      self.cursor_rect.empty

    else

      self.cursor_rect.set(0, @index * 80, self.width - 32, 80)

    end

  end

end

 

#------------------------------------------------------------------------------

#  Window_MenuGold

#------------------------------------------------------------------------------

class Window_MenuGold < Window_Base

#------------------------------------------------------------------------------

#  Initialize

#------------------------------------------------------------------------------

  def initialize

    super(0, 0, $window_size[0], $window_size[1])

    self.contents = Bitmap.new(width - 32, height - 32)

    self.contents.font.name = $gold_text[0]

    self.contents.font.size = $gold_text[1]

    refresh

  end

#------------------------------------------------------------------------------

#  Refresh

#------------------------------------------------------------------------------

  def refresh

    self.contents.clear

    self.windowskin = RPG::Cache.windowskin($window_gold_skin)

    self.contents.font.color = text_color($gold_text[2])

    self.contents.draw_text(4, 0, 120, 32, $gold_text[4])

    self.contents.font.color = text_color($gold_text[3])

    self.contents.draw_text(4, 32, 120, 32, $game_party.gold.to_s, 2)

  end

end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top