Tasty custom menu screen with gradients
#1
Tasty custom menu screen with gradients
tktarr
Jul 5 2006

This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given. If you are the owner of the thread, please contact administration.


This is quite a nice looking menu for you RPG Maker Xp Fans.

I DID NOT MAKE THIS SCRIPT! NO CREDIT IS DUE FOR ME!

ok here is the script for people who need it

Put this above main and name it Party_Change
Code:
#==============================================================================
# Scene_Switch class definition
#------------------------------------------------------------------------------
# This class represents the party switching sub-screen. It allows the player
# to switch in and out characters from the party. Characters that are not in
# the party but that are available are said 'in reserve'.
#
# Characters available are those that exist in Game_Actors::data and whose
# property unavailable is set to false. In the default script, an actor is
# loaded in Game_Actors::data when s/he is added for the very first time in the
# party and is never deleted, unless it's done explicitly with scripts.
#
# This script requires you to create 2 additional attributes for the Game_Actor
# class: mandatory and unavailable. Both are boolean values.
#
# Mandatory is a boolean variable that, when set to true, means that the actor
# can't be switched out of the party. This is useful for main characters, that
# are in many RPGs required most of the time, if not always. The switch screen
# will display the word "Mandatory" in red above an actor that can't be put out
# of the party.
#
# Unavailable is another boolean variable that, when set to true, means that
# although the actor is defined in Game_Actors::data, won't appear in the
# reserve window. This is useful when a character leaves the party in the
# story, but you don't want to reset his stats and name when s/he comes back.
#
# Usage of this script requires the 3 other files: Window_SwitchParty,
# Window_SwitchReserve and Window_SwitchStatus, as well as a few modifications
# of the default scripts:
#
# 1 - In Game_Actor, add in the class definition (under "class Game_Actor
#         [...]"):
#     attr_reader :actor_id
#     attr_accessor :mandatory
#     attr_accessor :unavailable
#
# 2 - Again, in Game_Actor, add in the setup method (under "def setup"):
#     mandatory = false
#     unavailable = false
#
# 3 - In Game_Actors (with an "s"!) add in the class definition:
#     attr_accessor :data
#
# 4 - In Game_Party, change:
#     attr_reader :actors
#     for
#     attr_accessor :actors
#
#   By exseiken, October 04, 2004
#==============================================================================

class Scene_Switch


#----------------------------------------------------------------------------
# Initialize the sub-screen. If it was called from the menu, it will return
#     to the main menu when closed, otherwise, it will return to the map.
#
# Parameters:
#     from_menu:          Determines whether or not the scene was called from
#                         the menu or not [true|false]
#     min_size:           The minimum amount of characters that the new party
#                         must have [1; 4]
#     max_size:           The maximum amount of characters that the new party
#                         must have [min_size; 4]
#----------------------------------------------------------------------------
def initialize(from_menu, min_size = 1, max_size = 4)
   # store the data telling whether or not the scene was called from the menu
   @from_menu = from_menu
  
   # store the array bounds for the max_size and min_size
   @min_size = [[min_size, 1].max, 4].min
   @max_size = [[max_size, @min_size].max, 4].min
  
end


#----------------------------------------------------------------------------
# The main routine, controlling the life of the object.
#----------------------------------------------------------------------------
def main    
   # create the window containing the current party members
   @party_window = Window_SwitchParty.new

   # create the window containing all available party members
   @reserve_window = Window_SwitchReserve.new(10)
  
   # create the window showing information about the selected character, be it
   # from the party window or from the reserve window
   @status_window = Window_SwitchStatus.new
      
   # if the party is empty, the active window is reserve_window, otherwise
   # it's the party window
   if $game_party.actors.size == 0
     @party_window.active = false
    
   else
     @reserve_window.active = false
    
   end
  
   # set this status window as the two other windows' help window
   @party_window.help_window = @status_window
   @reserve_window.help_window = @status_window
  
   # display the transition
   Graphics.transition
  
   # enter the main loop
   loop do
     # flip the screen
     Graphics.update
    
     # get the buttons pressed
     Input.update
    
     # update the sub-screen
     update
    
     # if the scene has changed, return
     if $scene != self
       break
      
     end
    
   end
  
   # stop drawing graphics
   Graphics.freeze
  
   # destroy the sub-windows
   @status_window.dispose
   @reserve_window.dispose
   @party_window.dispose
  
end


#----------------------------------------------------------------------------
# Method called on every frame: update the contents of the scene (the 3,
#     windows) and read on the keyboard.
#----------------------------------------------------------------------------
def update
   # update all sub-windows
   @party_window.update
   @reserve_window.update
   @status_window.update
  
   # if the active screen is party_window, update it, else update the reserve
   # window
   if @party_window.active
     update_party
     return
    
   else
     update_reserve
     return
    
   end

end


#----------------------------------------------------------------------------
# Called when the focus is on the party window. Read on the keyboard and
#     update the state of the scene according to the buttons pressed. If the
#     played pressed B while this mode is on, the new party will be set and
#     the scene will close.
#----------------------------------------------------------------------------
def update_party
   # if the B (back) button was pressed, return to the preceeding screen
   if Input.trigger?(Input::B)
     # remove all holes in the party
     new_party = @party_window.new_party.compact
    
     # get the number of party members
     n = new_party.size
    
     # if the party doesn't have an acceptable amount of party members, don't
     # allow quitting the sub-screen
     if n < @min_size or n > @max_size
       # play the buzzer and exit
       $game_system.se_play($data_system.buzzer_se)
       return
      
     end
    
     # play the confirm sound
     $game_system.se_play($data_system.decision_se)
    
     # set the new party
     $game_party.actors = new_party
    
     # return to the calling scene
     if @from_menu
       $scene = Scene_Menu.new(5)
      
     else
       $scene = Scene_Map.new
      
     end
    
     # refresh the player's sprite
     $game_player.refresh

     # skip (optimizing)
     return
  
   # if the C (confirm) button was pressed, switch the control to the reserve
   # window
   elsif Input.trigger?(Input::C)
     # if the selected character is not nil, and is unavailable, play the buzzer
     if(@party_window.actor != nil and @party_window.actor.mandatory)
       # play the buzzer
       $game_system.se_play($data_system.buzzer_se)
      
     else
       # play the decision sound
       $game_system.se_play($data_system.decision_se)
  
       # unactivate the party window
       @party_window.active = false
      
       # activate the reserve window
       @reserve_window.active = true
      
     end
    
   end
    
end


#----------------------------------------------------------------------------
# Called when the focus is on the reserve window. Read on the keyboard and
#     update the state of the scene according to the buttons pressed.
#----------------------------------------------------------------------------
def update_reserve
   # if the B (back) button was pressed, give back the focus to the party
   # window
   if Input.trigger?(Input::B)
     # play the cancel sound
     $game_system.se_play($data_system.decision_se)
    
     # unactivate the reserve window
     @reserve_window.active = false
    
     # activate the party window
     @party_window.active = true
    
     # skip
     return
    
   # if the C (confirm) button was pressed, switch the party member in reserve
   # with the one selected in the party
   elsif Input.trigger?(Input::C)
     # play the confirm sound
     $game_system.se_play($data_system.decision_se)
    
     # swap the 2 party members
     @party_window.change_selection(@reserve_window.swap_characters(@party_window.actor))
    
     # unactivate the reserve window
     @reserve_window.active = false
    
     # activate the party window
     @party_window.active = true
    
   end

end

end

#==============================================================================
# Window_SwitchParty class definition
#------------------------------------------------------------------------------
# A window that displays all 4 character slots in the party, and offers a
#   cursor to modify it.
#
#   By exseiken, October 04, 2004
#==============================================================================

class Window_SwitchParty < Window_Selectable


#----------------------------------------------------------------------------
# Create public access variables
#----------------------------------------------------------------------------
attr_reader   :new_party                # The party shown in the window [R-O]


#----------------------------------------------------------------------------
# Window's constructor. Create the window's contents, makes a copy of the
#     current party, then stocks it into member variable new_party, for later
#     use.
#----------------------------------------------------------------------------
def initialize()
   # create the window and its contents
   super(0, 0, 256, 480)
   self.contents = Bitmap.new(width - 32, height - 32)
  
   # copy the party
   @new_party = $game_party.actors.clone
  
   # always 4 party members
   @item_max = 4
  
   # select the first character
   if @new_party.size > 0
     @index = @new_party.index(@new_party.first )
    
   else
     @index = 0
    
   end
  
   # draw the window's contents
   refresh
  
   # update the cursor rectangle
   update_cursor_rect

end


#----------------------------------------------------------------------------
# Return the actor currently selected.
#----------------------------------------------------------------------------
def actor
   # return the selected actor, or nil if none
   @new_party[@index]
  
end


#----------------------------------------------------------------------------
# Update the contents of the window: clear the contents bitmap, then rebuild
#     it.
#----------------------------------------------------------------------------
def refresh
   # clear the contents of the bitmap
   self.contents.clear
  
   # draw each non-null party member
   for i in 0..@new_party.size - 1
     # get the actor
     actor = @new_party[i]
    
     # if the actor is valid, draw it on the screen
     if actor != nil
       # calculate the y coordinate
       y = 116 * i
      
       # draw the actor's graphic
       draw_actor_graphic(actor, 24, y + 80)
      
       # draw the actor's name
       draw_actor_name(actor, 64, y + 32)

       # if the actor is not available, write in red "can't select"
       if actor.mandatory
         self.contents.font.color = Color.new(255, 0, 0, 255)
         self.contents.draw_text(0, y, 224, 32, "Mandatory", 1)
        
       end
      
     end
    
   end

end


#----------------------------------------------------------------------------
# Update the position rectangle of the cursor.
#----------------------------------------------------------------------------
def update_cursor_rect
   # reset the cursor rectangle
   self.cursor_rect.set(0, 116 * @index, width - 32, 96)

end


#----------------------------------------------------------------------------
# Change the actor selected for another, then redraw the entire window.
#
# Parameters:
#     actors:             The actor that will replace the selected one
#----------------------------------------------------------------------------
def change_selection(actor)
   # change the actor (can be nil to remove it)
   @new_party[@index] = actor
  
   # redraw the window
   refresh

end


#----------------------------------------------------------------------------
# Update the help window. (Here, the help window is really the actor status
#     window.)
#----------------------------------------------------------------------------
def update_help
   # draw the selected actor's name, level, status conditions and stats
   @help_window.draw_actor_status(@new_party[@index])
  
end

end
#==============================================================================
# Window_SwitchReserve class definition
#------------------------------------------------------------------------------
# A window that displays all characters available to pick in the party. Offers
#   a cursor to select them
#
#   By exseiken, October 04, 2004
#==============================================================================

class Window_SwitchReserve < Window_Selectable


#----------------------------------------------------------------------------
# Window constructor. Create the contents bitmap and fill it with all
#     characters that are not into the party, but that are loaded in the data
#     member of the Game_Actors global object.
#
# Parameters:
#     max_size:           The maximum of characters that can fit into that
#                         window
#----------------------------------------------------------------------------
def initialize(max_size)
   # initialize the window and its contents
   super(256, 128, 384, 352)
   self.contents = Bitmap.new(width - 32, height - 32)
  
   # initialize the list for the first time
   @actor_list = $game_actors.data.clone
  
   # remove currently active party members
   $game_party.actors.each do |actor|
     @actor_list[actor.actor_id] = nil
    
   end
  
   # remove all actors that are unavailable
   $game_actors.data.each do |actor|
     if actor != nil and actor.unavailable
       @actor_list[actor.actor_id] = nil
      
     end
    
   end
  
   # remove all holes in the list
   @actor_list.compact!
  
   # set the maximum of characters the list can contain
   @item_max = max_size
  
   # 2 columns, 5 rows
   @column_max = 2
   @row_max = 5
  
   # select the first item
   @index = 0
  
   # default: unactive
   self.active = false
  
   # draw the window's contents
   refresh
  
   # draw the cursor rectangle
   update_cursor_rect

end


#----------------------------------------------------------------------------
# Update the contents of the window: clear the contents bitmap, then rebuild
#     it.
#----------------------------------------------------------------------------
def refresh
   # clear the contents of the bitmap
   self.contents.clear
  
   # display all actors
   for i in 0..@actor_list.size
     # get the concerned actor
     actor = @actor_list[i]
    
     # if the actor is non-nil, draw it
     if actor != nil
       # get the coordinates
       x = (i & 0x01) == 1 ? 176 : 0
       y = (i >> 0x01) * 64
      
       # draw the actor's sprite
       draw_actor_graphic(actor, x + 24, y + 48)
      
       # draw the actor's name
       draw_actor_name(actor, x + 64, y + 16)
      
     end
  
   end
    
end


#----------------------------------------------------------------------------
# Update the position rectangle of the cursor.
#----------------------------------------------------------------------------
def update_cursor_rect
   # if the screen is not active, don't display the cursor
   if not active
     self.cursor_rect.empty
    
   # otherwise, display it
   else
     self.cursor_rect.set((@index & 0x01) == 1 ? 176 : 0, (@index >> 0x01) * 64, 176, 64)
    
   end
  
end


#----------------------------------------------------------------------------
# Takes a character, put in into the list at the selected position, and
#     returns the character that was presently there. If there was no
#     character, returns nil.
#
# Parameters:
#     actor_to_switch:    The character to put at the selected position
#----------------------------------------------------------------------------
def swap_characters(actor_to_switch)
   # store the old actor (needed for swapping)
   old_actor = @actor_list[@index]
  
   # put the new actor at the place
   @actor_list[@index] = actor_to_switch
  
   # redraw the window
   refresh
  
   # return the old actor
   return old_actor

end


#----------------------------------------------------------------------------
# Update the help window. (Here, the help window is really the actor status
#     window.)
#----------------------------------------------------------------------------
def update_help
   # draw the selected actor's name, level, status conditions and stats
   @help_window.draw_actor_status(@actor_list[@index])
  
end

end
#==============================================================================
# Window_SwitchStatus class definition
#------------------------------------------------------------------------------
# A window that displays the status of a character being selected.
#
#   By exseiken, October 04, 2004
#==============================================================================

class Window_SwitchStatus < Window_Base


#----------------------------------------------------------------------------
# Construct the window: create the contents bitmap.
#----------------------------------------------------------------------------
def initialize
   # create the window and initialize its contents
   super(256, 0, 384, 128)
   self.contents = Bitmap.new(width - 32, height - 32)
  
end


#----------------------------------------------------------------------------
# Draw the status on an actor on the window's contents.
#
# Parameters:
#     actor:              The actor to put on the screen
#----------------------------------------------------------------------------
def draw_actor_status(actor)
   # clear the contents of the bitmap
   self.contents.clear
  
   # if the actor to draw is nil, leave the window empty
   if actor == nil
     return
    
   end
  
   # draw the actor's graphic
   draw_actor_graphic(actor, 24, 56)
  
   # draw the actor's name, level
   draw_actor_name(actor, 64, 0)
   draw_actor_level(actor, 288, 0)
   draw_actor_hp(actor, 64, 32)
   draw_actor_sp(actor, 64, 64)

end

end

then insert another above the party_change script called Window_Location and put this code in it

Code:
#==============================================================================
# ■ Window_Steps
#------------------------------------------------------------------------------
#  メニュー画面で歩数を表示するウィンドウです。
#==============================================================================

class Window_Location < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 160, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.draw_text(4, 0, 120, 32, "Location:")
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 32, 120, 32, $game_map.name)
  end
end
}


Possibly Related Threads…
Thread Author Replies Views Last Post
  Skill Screen Fugly 0 2,817 10-24-2006, 01:00 PM
Last Post: Fugly
  RX-Stats Screen Fugly 0 3,293 10-22-2006, 01:00 PM
Last Post: Fugly
  GameOver Menu V.2 xLeD 0 2,490 10-03-2006, 01:00 PM
Last Post: xLeD
  Change menu character sprites to Pictures like in rpg maker 2003 Abyssos 0 4,049 09-28-2006, 01:00 PM
Last Post: Abyssos
  Slipknot's adorable menu Ordaz 0 2,456 09-09-2006, 01:00 PM
Last Post: Ordaz
  Pre-Title menu Tony 0 2,544 08-04-2006, 01:00 PM
Last Post: Tony
  Addonscript for FFX2 Menu Akxiv 0 2,742 06-17-2006, 01:00 PM
Last Post: Akxiv
  SIBruno AES - Advanced Equip Screen sibruno 0 2,729 02-10-2006, 01:00 PM
Last Post: sibruno
  SIBruno Advanced Equip Screen v2 sibruno 0 2,349 01-30-2006, 01:00 PM
Last Post: sibruno
  Save menu edit Kairose 0 2,647 01-23-2006, 01:00 PM
Last Post: Kairose



Users browsing this thread: 1 Guest(s)