Chaos Project

RPG Maker => RPG Maker Scripts => Script Requests => Topic started by: GAX on November 21, 2009, 04:18:04 pm

Title: [REQUEST][XP]Disc Custom Menu System
Post by: GAX on November 21, 2009, 04:18:04 pm
Alrighty...time for a request, this one being for a project that I'm nearly done with.  Here's the way the menu is supposed to look:
(http://i67.photobucket.com/albums/h313/GuardianAngel72/Chaottic%20Fury/Disc-for-Menu-System.png)

When selecting a character using Equip, Skill, or just the Character/Status selection, then it should display a battle animation on the character.  When cycling through characters,, they will rotate positions.  The info bar at the top will display a description of the menu selection in the bottom area, and the character's name while selecting a character.

Also, the black space in the background would be a wallpaper.  I've supplied a PSD file including the resources that should be needed to make this system work.
Disc Menu Resource and Example File (http://void-media.net/shio/Resources/DiscMenuResources.psd)

Thanks in advance for whoever can handle this, the only system I'm currently using to modify my menu system is that the menu has its own music.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: Jackolas on November 21, 2009, 04:23:04 pm
sorry, to advanced for me :S
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: RoseSkye on November 21, 2009, 04:29:53 pm
That girl should put some clothes on.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: GAX on November 21, 2009, 06:47:49 pm
No spam posts please...

Anyways, if anyone could pick this up soon and contact me, that'd be great =3

EDIT:  The Game Data selection should bring up a menu simmilar to the Exit Game menu, but with the options Save Game, Load Game, and Return.  In the bottom left corner it should display the time played and the total gold collected by the player.  Forgot that =/
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: fugibo on November 21, 2009, 08:42:36 pm
Hey, that was definitely on-topic. I don't know what you're on, but you need to get off it RIGHT NOW.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: [Faint] on November 21, 2009, 09:58:09 pm
too advanced for me but couldn't this be done with a script kind of like the ring menu? Except use the ring menu for the actors and make the disc/platform stationary. Just a suggestion.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: GAX on November 22, 2009, 01:05:53 am
The platform is stationary, only the characters rotate along it.  Instead of a selection highlight or arrow, the front character would have an animation applied to them.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: G_G on November 22, 2009, 02:22:17 am
gax I'll try to make this once your title screen is done, I've been pretty busy lately havent been able to do much.
How soon do you need your title screen?

And the menu I'll try to do when the title is done.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: GAX on November 22, 2009, 04:20:37 am
Title would be nice within the next week or so, don't worry too much about it.

Thanks G_g, really pulling my eggs out of the fryer on this one.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: Blizzard on November 22, 2009, 04:29:48 am
Basically my battle ring menu as character selection window. ;)

I hope I can find some time in the next few days to make the ring menu tutorial I've been promising LB to make. #_#
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: Fantasist on November 22, 2009, 11:17:03 am
Here's my version of the ring command tweaked for GAX's needs. It's made in such a way that you can simply replace a command window with a ring command, without even changing the window position. You just need to take care of the radius of the ring (which is about half the command window's width). Instead of giving an array of strings for commands, give an array of bitmaps. In this case, it would be an array of bitmaps of the actors.

Ring Command: ShowHide

#============================================================================
# ** Ring Command
#----------------------------------------------------------------------------
# by Fantasist
# Version GAX1
# 22-Nov-2009
#----------------------------------------------------------------------------
# Version History:
#
#   1.0 - First functional version
#   GAX1 - Alteration made for GuardianAngelX72's menu system
#----------------------------------------------------------------------------
# Description:
#
#     A rotating ring with pictures, can be used as a command window.
#----------------------------------------------------------------------------
# Compatibility:
#
#     Should not cause any problems. Not tested with the SDK.
#----------------------------------------------------------------------------
# Instructions:
#
#     Place this script anywhere below 'Scene_Debug' and above 'Main'.
#
# Usage:
#
#   Make the ring like this:
#
#        Ring_Command.new(x, y, radius, commands)
#
#     where
#       x, y: Position if the ring (top-left corner, not the center).
#       radius: Radius of the ring.
#       commands: An array of bitmaps.
#----------------------------------------------------------------------------
# Configuration:
#
# class Icon_Ring:
#
#             Icon_BG: Background to be used behind all ring icons (optional)
#        Icon_Disable: Icon overlay for 'disabled' options (optional, but
#                      there's no other way to show a disabled icon.
#   Select_Indication: nil - No indication
#                        0 - Blink
#                 <number> - ID of animation
#
# class Ring_Command:
#
#     Frames: Movement Speed. Larger number means slower movement.
#      Depth: Depth of the ring, meaning the 'tilt' factor.
#----------------------------------------------------------------------------
# Issues:
#
#     None so far.
#----------------------------------------------------------------------------
# Credits and Thanks:
#
#   Credits: Fantasist for making this.
#   Thanks: Chaos Project (Game) for inspiration
#----------------------------------------------------------------------------
# Notes:
#
#   If you have any comments or problems, you can find me at:
#
#    - forum.chaos-project.com
#
#   Enjoy ^_^
#============================================================================

#=============================================================================
# ** Icon_Ring
#=============================================================================

class Icon_Ring < RPG::Sprite
 
  Icon_BG = ''          # Background to be used behind all ring icons (optional)
  Icon_Disable = ''     # Icon overlay for 'disabled' options (optional, but
                        # there's noother way to show a disabled icon.
  Select_Indication = 1 # nil: No indication
                        # 0: Blink
                        # Any number > 0: ID of animation
 
 
  def initialize(item, disabled=false)
    super()
    @item = item
    self.bitmap = make_bmp(item, disabled)
    self.ox, self.oy = self.bitmap.width / 2, self.bitmap.height / 2
  end
 
  def make_bmp(item, disabled=false)
    bg = RPG::Cache.icon(Icon_BG).clone rescue Bitmap.new(32, 32)
    result = nil
    # Draw item
    if item.is_a?(Numeric)
      bg.draw_text(0, 0, bg.width, bg.height, item.to_s, 1)
      result = bg
    elsif item.is_a?(String)
      bg.draw_text(0, 0, bg.width, bg.height, item, 1)
      result = bg
    elsif item.is_a?(Bitmap)
      b = Bitmap.new(item.width, item.height)
      b.blt(b.width/2 - bg.width/2, b.height/2 - bg.height/2, bg, bg.rect)
      b.blt(b.width/2 - item.width/2, b.height/2 - item.height/2, item, item.rect)
      result = b
    end
    # Disable
    disable(result) if disabled
    return result
  end
 
  def disable(bmp=self.bitmap)
    return if bmp.nil? || bmp.disposed?
    x = RPG::Cache.icon(Icon_Disable) rescue Bitmap.new(32, 32)
    bmp.blt(bmp.width/2 - x.rect.width/2, bmp.height/2 - x.rect.height/2, x, x.rect)
  end
 
  def enable
    self.bitmap = make_bmp(@item)
  end
 
  def select
    return if Select_Indication == nil
    if Select_Indication <= 0
      self.blink_on
    else
      animation = $data_animations[Select_Indication]
      self.loop_animation(animation) rescue self.blink_on
    end
  end
 
  def deselect
    self.blink_off
    self.loop_animation(nil)
  end
 
end

#=============================================================================
# ** Ring_Command
#=============================================================================

class Ring_Command < Sprite
 
  Frames = 6 # Movement Speed. Larger number means slower movement
  Depth = 6 # Depth of the ring, meaning the 'tilt' factor.
 
  attr_reader :index
  attr_reader :radius
  attr_reader :commands
  attr_accessor :active
 
  # Dummy values for window compatibility
  attr_accessor :windowskin, :contents, :stretch, :cursor_rect, :pause,
                :back_opacity, :contents_opacity
 
  def initialize(x=320, y=240, r=200, commands=15, win_w=0, win_h=0)
    super()
    set_icons(commands)
    @unit_angle = 360.0/@commands.size
    @win_offset = [win_w/2, win_h]
    self.radius, self.x, self.y = r, x, y
    self.index = 0
    self.active = false
    @moving = 0
  end
 
  def set_icons(commands)
    # Dispose previous icons
    if @commands != nil
      @commands.each {|sprite|
      sprite.bitmap.dispose
      sprite.dispose}
    end
    # Make icons
    @commands = []
    if commands.is_a?(Array)
      commands.each {|item| @commands.push(Icon_Ring.new(item))}
    elsif commands.is_a?(Integer)
      (1..commands).each {|i| @commands.push(Icon_Ring.new(i))}
    end
  end
 
  def set_items(ang=self.angle)
    @commands.each_index {|i|
    @commands[i].deselect
    @commands[i].x = self.x + self.radius * sin(ang + @unit_angle * i)
    @commands[i].y = self.y + self.radius/Depth * cos(ang + @unit_angle * i)
    @commands[i].z = self.z + @commands[i].y
    unless Depth == 1
      multiplier = (@commands[i].y - (self.y-self.radius/Depth)).to_f / (2*self.radius/Depth)
      zoom = 0.8 + 0.2 * multiplier
      @commands[i].zoom_x = @commands[i].zoom_y = zoom
    end
    }
  end
 
  def move(dir=0)
    @moving = (dir == 0 ? Frames : -Frames)
  end
 
  def update
    if self.active
      @commands[@index].update
      @commands[@index].select
      if @moving != 0
        ang = (@unit_angle / Frames)
        self.angle += (@moving > 0 ? ang : -ang)
        self.angle -= 360 if self.angle > 360.0
        self.angle += 360 if self.angle < -360.0
        set_items
        @moving += (@moving < 0 ? 1 : -1)
      else
        if Input.repeat?(Input::RIGHT)
          $game_system.se_play($data_system.cursor_se)
          move(1)
          @index = (@index + 1) % @commands.size
        elsif Input.repeat?(Input::LEFT)
          $game_system.se_play($data_system.cursor_se)
          move(0)
          @index = (@index + @commands.size - 1) % @commands.size
        end
      end
    end
  end
 
  def disable_item(index)
    @commands[index].disable
  end
 
  def sin(val)
    Math.sin(Math::PI*val/180)
  end
 
  def cos(val)
    Math.cos(Math::PI*val/180)
  end
 
  def dispose
    super
    @commands.each {|sp|
    sp.bitmap.dispose
    sp.dispose}
  end
 
  def visible=(val)
    super(val)
    @commands.each {|sp| sp.visible = val}
  end
 
  def active=(val)
    @active = val
    @commands.each {|c| c.deselect} unless val
  end
 
  def index=(i)
    @index = i
    self.angle = i * @unit_angle
    set_items
  end
 
  def radius=(r)
    @radius = r
    set_items
  end
 
  def commands=(commands)
    #dispose previous icons
    if @commands != nil
      @commands.each {|sp|
      sp.bitmap.dispose
      sp.dispose}
    end
    @commands = commands
    @unit_angle = 360.0/@commands.size
    self.angle = 0
    self.index = 0
  end
 
  def x=(x)
    super(x+@win_offset[0])
    set_items
  end
 
  def y=(y)
    super(y+@win_offset[1])
    set_items
  end
 
end


It's not really optimized, I quickly polished an older version I have on the HDD, but it should do for this purpose.
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: G_G on November 22, 2009, 11:22:37 am
thanks fantasist this will help alot!
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: [Faint] on November 23, 2009, 10:14:11 am
either everyone had the same idea, or I actually gave a good suggestion lol :^_^':
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: GAX on December 05, 2009, 06:37:55 am
lol, bit of a combination [Faint].

Hopefully this gets done soon...but seeing how I'm still waiting on the title from G_G, I might aswell not hold my breath...*Goes back to mapping for Chaotic Fury*
Title: Re: [REQUEST][XP]Disc Custom Menu System
Post by: G_G on December 23, 2009, 03:02:05 pm
Hey I'll have to give you the menu this saturday. I had to go to my Grandma's on Monday therefore could not give it to you. But don't worry you'll get it :)