The RPG Maker Resource Kit

RMRK RPG Maker Creation => VX => VX Scripts Database => Topic started by: pacdiggity on July 28, 2011, 01:18:46 PM

Title: PAC Main Menu (1.7d)
Post by: pacdiggity on July 28, 2011, 01:18:46 PM
PAC Main Menu
Version: 1.7d
Author: Pacman
Date: 9/7/2012

Version History



Planned Future Versions


Description


My first CMS. Finally. The PAC Main Menu is focused around simple customization. Only a little has been done in terms of display to the menu, the focus of the first version, 1.7, was to get the core code out of the way so I could focus more on exotic displays in later versions. Now that's been redone and finalized, I've begun focus on display work. So far, I've made two graphical 'modes' and integrated one that Cozziekuns made.

Features


Screenshots

Spoiler for:
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg15.imageshack.us%2Fimg15%2F5346%2Fpacmm.png&hash=f0d8c91fe3fc5f0355e93e63da816b46040dc3fa)
From top to bottom:
1. Compact display
2. Compact actor selection
3. Comprehensive display
4. Cozzie's Ring display

Instructions

I'll be directing you to the instructions included in the script, conveniently situated next to the applicable configuration options.

Script


Too long to post, get it at PasteBin (http://pastebin.com/f8cz6fDx)

Credit



Thanks


Support


Post here no matter how old the topic is, I live on these forums. I'll probably respond to PMs as well.
If you want the compact display, but not the data of the menu (for whatever insane reason :V), find it at this thread (http://rmrk.net/index.php/topic,43617.msg496006/topicseen.html#msg496006).

Known Compatibility Issues

Of course, it won't work with any other menu systems. Custom scenes will probably return to the wrong index: I will post a tutorial for the new version eventually. It can get a bit problematic, so don't hesitate to ask for help. Note that this is for the old version of the script, but the same principals still apply.

Restrictions

Free for use in non-commercial games provided I receive credit. For commercial games, contact me via PM and I'll decide.

:ccbysa: :rmvx:
[/list]
Title: Re: PAC Main Menu
Post by: Adon on July 28, 2011, 01:22:17 PM
So amazing! I love it!
Title: Re: PAC Main Menu
Post by: pacdiggity on July 28, 2011, 01:25:13 PM
:3
Such good motivation to hear that, you have no idea. I really hope I can bust out some good designs for later versions.
Title: Re: PAC Main Menu
Post by: Adon on July 28, 2011, 01:29:08 PM
This might replace Main Menu Melody for me, Pacman.
Oops, I came upon an error in the script:
NoMethodError occurred while running the script
undefined method party_menu_disabled for #<Game_Party:0x19432d8>
Also, I am sure that you need your party script for one of these. But I love the customization power of this script.
I might modify it to suit my needs though.
Title: Re: PAC Main Menu
Post by: pacdiggity on July 29, 2011, 07:16:02 AM
Oh, that's because the Party menu option is included in the menu. I should post that script. Yeah. The most recent version is this:
Code: [Select]
#===============================================================================
#
# Pacman Advanced Creative (PAC) Engine - Party Management System
# 19/6/2011
# Type: Scene
# Installation: Script calls.
# Level: Average
#
#===============================================================================
#
# Description:
# VX limits your party to having 4 members. Isn't that terrible? This script
# won't give you more members in your party, rather be able to change them
# throughout the game at the player's call. Read the instructions to find out
# more.
#
#===============================================================================
#
# Instructions:
# INSTALLATION
# Paste above main, below materials, in the script editor (F11). Make sure you
# save upon exiting.
# SCRIPT CALLS
# $data_actors[ID].found = true/false
# Where ID is the ID of an actor in the database. This places an actor in the
# reserves party, ready for selection by the player if true, and takes them
# out if false.
# $data_actors[ID].unavailable = true/false
# Makes actor with the specified ID unavailable to the player in the reserves
# party if true. If false, makes them available.
# $data_actors[ID].required = true/false
# Locks actor with specified ID to the actual party, ergo mandatory to the
# player, if true. Unlocks the character if false.
# For each of these calls you can use, instead of $data_actors[ID],
# $game_party.members[position].actor.found/unavailable/required to perform
# the action for the actor in that position in the party, starting with 0 as
# the party leader.
# $game_party.party_menu_disabled = true/false
# This will change the access of the command if PAC Main Menu is being used.
# $scene = Scene_Party.new
# Simply calls the Party Management scene. By default, there is no menu option
# for the party scene, but it is simple to add if you are using PAC Main Menu,
# and still quite easy if you are using the default menu system.
#
#===============================================================================
#
# This script requires no editing. Do not edit anything in this script
# unless you are a compenent scripter. Should you edit without any scripting
# education, it may result in me tutting at you for getting it wrong.
#
#===============================================================================

$imported = {} if $imported == nil
$imported["PAC_Party"] = true

module PAC::MENU
  PARTY_SWITCH = Input::X # Button which will switch between equip and status
  # display in the party scene.
end

#==============================================================================
# ** RPG::Actor
#------------------------------------------------------------------------------
#  Data class for actors.
#==============================================================================

class RPG::Actor 
  #--------------------------------------------------------------------------
  # Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :found
  attr_accessor :unavailable
  attr_accessor :required
  #--------------------------------------------------------------------------
  # * Setup
  #--------------------------------------------------------------------------
  def setup
    @found = false
    @unavailable = false
    @required = false
  end
end

#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
#  This class handles the party. It includes information on amount of gold
# and items. The instance of this class is referenced by $game_party.
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :party_menu_disabled
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_party_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    pac_party_initialize
    @party_menu_disabled = false
  end
end

#==============================================================================
# ** Game_Actors
#------------------------------------------------------------------------------
#  This class handles the actor array. The instance of this class is
# referenced by $game_actors.
#==============================================================================

class Game_Actors
  #--------------------------------------------------------------------------
  # Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :data
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_pms_act_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    pac_pms_act_initialize
    $data_actors.each do |actor|
      actor.setup if actor
      @data[actor.id] = Game_Actor.new(actor.id) if actor
    end
  end
end

#==============================================================================
# ** Window_CurrentMember
#------------------------------------------------------------------------------
#  This window displays the current party member in the party scene.
#==============================================================================

class Window_CurrentMember < Window_Base
  #--------------------------------------------------------------------------
  # Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader :mode
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(member = nil, mode = 0)
    super(304, 80, 192, 256)
    create_contents
    @member = member
    @mode = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get member
  #--------------------------------------------------------------------------
  def member
    return @member
  end
  #--------------------------------------------------------------------------
  # * Set Member
  #--------------------------------------------------------------------------
  def set_member(member)
    old_member = @member
    @member = member
    refresh if old_member != @member
  end
  #--------------------------------------------------------------------------
  # * Set modes
  #--------------------------------------------------------------------------
  def set_mode(mode)
    @mode = mode if [0, 1].include?(mode)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    return unless @member
    x, y = 0, 0
    self.draw_actor_face(@member, x, y, 48)
    self.draw_actor_name(@member, x + 52, y)
    self.draw_actor_class(@member, x + 52, y + WLH)
    self.draw_actor_level(@member, x, y + WLH*2)
    case @mode
    when 0
      self.draw_icon(142, self.contents.width - 24, y + WLH*2)
      self.contents.draw_text(x, y + WLH*2, self.contents.width - 12, WLH,
       'Equip', 2)
      self.draw_actor_hp(@member, x, y + WLH*3, 160)
      self.draw_actor_mp(@member, x, y + WLH*4, 160)
      self.draw_actor_parameter(@member, x, y + WLH*5, 0)
      self.draw_actor_parameter(@member, x, y + WLH*6, 1)
      self.draw_actor_parameter(@member, x, y + WLH*7, 2)
      self.draw_actor_parameter(@member, x, y + WLH*8, 3)
    when 1
      self.draw_icon(143, self.contents.width - 24, y + WLH*2)
      self.contents.draw_text(x, y + WLH*2, self.contents.width - 12, WLH,
       'Stat', 2)
      for i in 0...@member.equips.size
        item = @member.equips[i]
        self.draw_item_name(item, x, y + WLH*(3+i), true)
      end
    end
  end
end

#==============================================================================
# ** Window_CurrentParty
#------------------------------------------------------------------------------
#  This window displays the current party selected in the party scene.
#==============================================================================

class Window_CurrentParty < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(48, 80, 256, 64)
    @item_max = 4
    @column_max = @item_max
    create_contents
    self.index = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Get member
  #--------------------------------------------------------------------------
  def member
    return $game_party.members[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh window
  #--------------------------------------------------------------------------
  def refresh
    for i in 0...@item_max
      rect = item_rect(i)
      self.contents.clear_rect(rect)
    end
    for i in 0...$game_party.members.size
      rect = item_rect(i)
      bitmap = Cache.character($game_party.members[i].character_name)
      sign = $game_party.members[i].character_name[/^[\!\$]./]
      if sign != nil and sign.include?('$')
        cw = bitmap.width / 3
        ch = bitmap.height / 4
      else
        cw = bitmap.width / 12
        ch = bitmap.height / 8
      end
      n = $game_party.members[i].character_index
      src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
      if $game_party.members[i].actor.unavailable
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 128)
      else
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 255)
      end
      if $game_party.members[i].actor.required
        lock_bitmap = Cache.system("Locked")
        self.contents.blt(rect.x + rect.width - lock_bitmap.width,
        rect.y + rect.height - lock_bitmap.height,lock_bitmap,lock_bitmap.rect)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Get rectangle for displaying items
  #     index : item number
  #--------------------------------------------------------------------------
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = 32
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * 32
    return rect
  end
end

#==============================================================================
# ** Window_SelectMember
#------------------------------------------------------------------------------
#  This window displays the currently selected member in the party scene.
#==============================================================================

class Window_SelectMember < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(48, 144, 256, 192)
    calculate_actors
    @item_max = @actors.size + 1
    @column_max = 4
    self.index = -1
    self.active = false
    refresh
  end
  #--------------------------------------------------------------------------
  # * Calculate Actors
  #--------------------------------------------------------------------------
  def calculate_actors
    @actors = []
    for a in $game_actors.data
      if a != nil and a.actor.found and !$game_party.members.include?(a)
        @actors << a
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Get member
  #--------------------------------------------------------------------------
  def member
    return @actors[self.index]
  end
  #--------------------------------------------------------------------------
  # * Refresh Window
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    calculate_actors
    @item_max = @actors.size + 1
    for i in 0...@actors.size
      rect = item_rect(i)
      bitmap = Cache.character(@actors[i].character_name)
      sign = @actors[i].character_name[/^[\!\$]./]
      if sign != nil and sign.include?('$')
        cw = bitmap.width / 3
        ch = bitmap.height / 4
      else
        cw = bitmap.width / 12
        ch = bitmap.height / 8
      end
      n = @actors[i].character_index
      src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
      if @actors[i].actor.unavailable
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 128)
      else
        self.contents.blt(rect.x, rect.y, bitmap, src_rect, 255)
      end
      if @actors[i].actor.required
        lock_bitmap = Cache.system("Locked")
        self.contents.blt(rect.x + rect.width - lock_bitmap.width,
        rect.y + rect.height - lock_bitmap.height,lock_bitmap,lock_bitmap.rect)
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Get rectangle for displaying items
  #     index : item number
  #-------------------------------------------------------------------------- 
  def item_rect(index)
    rect = Rect.new(0, 0, 0, 0)
    rect.width = (contents.width + @spacing) / @column_max - @spacing
    rect.height = 32
    rect.x = index % @column_max * (rect.width + @spacing)
    rect.y = index / @column_max * 32
    return rect
  end
end

#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This class performs the save and load screen processing.
#==============================================================================

class Scene_File < Scene_Base
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_pms_file_write_save_data write_save_data
  alias pac_pms_file_read_save_data read_save_data
  #--------------------------------------------------------------------------
  # * Write Save Data
  #     file : write file object (opened)
  #--------------------------------------------------------------------------
  def write_save_data(file)
    pac_pms_file_write_save_data(file)
    Marshal.dump($data_actors, file)
  end
  #--------------------------------------------------------------------------
  # * Read Save Data
  #     file : file object for reading (opened)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    pac_pms_file_read_save_data(file)
    $data_actors = Marshal.load(file)
  end
end

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs the title screen processing.
#==============================================================================

class Scene_Title < Scene_Base
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_pms_ttl_command_new_game command_new_game
  #--------------------------------------------------------------------------
  # * Command: New Game
  #--------------------------------------------------------------------------
  def command_new_game
    pac_pms_ttl_command_new_game
    $game_party.members.each {|s| s.actor.found = true if s}
  end
end

#==============================================================================
# ** Scene_Party
#------------------------------------------------------------------------------
#  This class performs the party screen processing.
#==============================================================================

class Scene_Party < Scene_Base
  include PAC::MENU
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(from_map = true, from_menu = false)
    @from_map = from_map
    @from_menu = from_menu
  end
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    create_windows
  end
  #--------------------------------------------------------------------------
  # * Create windows
  #--------------------------------------------------------------------------
  def create_windows
    @member_window = Window_CurrentMember.new
    @party_window = Window_CurrentParty.new
    @party_window.active = true
    @selectable_window = Window_SelectMember.new
  end
  #--------------------------------------------------------------------------
  # * Window update
  #--------------------------------------------------------------------------
  def update_windows
    @member_window.update
    @party_window.update
    @selectable_window.update
    if @party_window.active
      @member_window.set_member(@party_window.member)
    elsif @selectable_window.active
      @member_window.set_member(@selectable_window.member)
    end
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    @member_window.dispose
    @party_window.dispose
    @selectable_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_windows
    update_input
  end
  #--------------------------------------------------------------------------
  # * Update Command Input
  #--------------------------------------------------------------------------
  def update_input
    if Input.trigger?(PARTY_SWITCH) # If the button is being pressed...
      if @member_window.mode == 1 # If equip mode is on,
        @member_window.set_mode(0)  # Activate stats mode.
      elsif @member_window.mode == 0  # If stats mode is on,
        @member_window.set_mode(1)  # Activate equip mode.
      end
    end
    if @party_window.active # If the party member is active
      if Input.trigger?(Input::B) # If you want to leave,
        if $game_party.members.size == 0  # If party is empty,
          Sound.play_buzzer # Bee-bow.
          return  # No soup for you
        else
          Sound.play_cancel # Bloop.
          if @from_map
            $scene = Scene_Map.new
          elsif @from_menu
            if $imported["PAC_Menu 1.7"]             
              $scene = Scene_Menu.new
            else
              $scene = Scene_Menu.new(4)
            end
          end
        end
      elsif Input.trigger?(Input::C)  # If you want to do something,
        member = @party_window.member # do stuff.
        if member != nil
          if member.actor.unavailable or member.actor.required
            Sound.play_buzzer
            return
          end
        end
        Sound.play_decision
        @party_window.active = false
        @selectable_window.active = true
        @selectable_window.index = 0
      end
    elsif @selectable_window.active
      if Input.trigger?(Input::B)
        Sound.play_cancel
        @selectable_window.index = -1
        @selectable_window.active = false
        @party_window.active = true
      elsif Input.trigger?(Input::C)
        member = @selectable_window.member
        if member != nil
          if member.actor.unavailable
            Sound.play_buzzer
            return
          end
        end
        Sound.play_decision
        if @party_window.member != nil
          $game_party.remove_actor(@party_window.member.id)
        end
        if @selectable_window.member != nil
          $game_party.add_actor(@selectable_window.member.id)
        end
        @selectable_window.refresh
        @party_window.refresh
        @selectable_window.index = -1
        @selectable_window.active = false
        @party_window.active = true
      end
    end
  end
end

#===============================================================================
#
# END OF SCRIPT
#
#===============================================================================
Title: Re: PAC Main Menu
Post by: cozziekuns on July 30, 2011, 01:13:56 AM
Cool script, Pacman!

Bit of critique on the script. You could probably fit in the commands, disables and items in just one hash with an array. Kinda like:

Code: [Select]
COMMANDS ={
  item => [command, disable],
}

Also, you should probably add or link to a reference of basic RGSS2 scripting commands like, $game_temp.common_event_id = x, $game_switches[y], $game_variables[z] == value, etc.
 
Title: Re: PAC Main Menu
Post by: pacdiggity on July 30, 2011, 01:58:10 AM
As promised, here's the tutorial for making scenes return to the correct index in the window. This only applies to scripts that return to the menu.
Go in to the custom script. As an example, I'll be using Modern Algebra's quest journal. Because PAC Main Menu offers support for custom scene scripts, I'm disabling the built-in menu option for the journal to save the risk of incompatibility.
At some point in the script, there should either be a line in the instructions telling you what the class of the scene is, or you'll have to look in the script. The line will be:
Code: [Select]
$scene = Class Name.new(arguments)
If that doesn't exist, look for a class in the script that inherits from Scene_Base, by typing
Code: [Select]
< Scene_Base
in the search box.
Once you've found the class name (it's case sensitive!), put that in your commands hash and the name you want in the Items array of PAC Main Menu. This is what I've done.
Code: [Select]
    ITEMS = [
      'Item',
      'Skill',
      'Equip',
      'Status',
      'Quests',
      'Save',
      'End Game',
    ]
    COMMAND = {
      'Item'       => '$scene = Scene_Item.new',
      'Skill'      => '$scene = Scene_Skill.new(@status_window.index)',
      'Equip'      => '$scene = Scene_Equip.new(@status_window.index)',
      'Status'     => '$scene = Scene_Status.new(@status_window.index)',
      'Quests'      => '$scene = Scene_Quest.new',
      'Save'       => '$scene = Scene_File.new(true, false, false)',
      'End Game'   => '$scene = Scene_End.new',
    }
How did I know what to put as the Quest command? I looked through the quest journal and found that Scene_Quest is the scene used to display the quests data. Now, looking through the Quest Journal again reveals that to disable menu access, we can use the call $game_system.quest_menuaccess = false. To implement that in PAC MM, go to the disables hash and add that condition to the 'Quests' command.
Code: [Select]
    DISABLES = {
      # Disables the save menu if needed.
      'Save'     => '$game_system.save_disabled',
      # Disables the quest menu if needed.
      'Quests'  => '$game_system.quest_menuaccess',
    }
So we can use that call to change access to the quest journal from the menu in-game. Yay.
Adding an icon is simple enough; you just need to get the right ID. I shouldn't have to give you a tutorial on it. I'll be using ID 178, as that is the recommended one by default in the journal.
That's all the tweaking you need to do to PAC MM, the rest is in the journal. This part's a little trickier, so don't stress if you can't do it. Post here if you need help.
Using the search function, find a line that is called 'def return_scene'. Make sure that you're in the right class. I can see this method in the journal starting at line 1872:
Code: [Select]
  def return_scene
    unless @list_window.quest.nil? # Save Position
      $game_system.last_quest_id = @list_window.quest.id
      $game_system.last_quest_cat = @category_index
    end
    # Exit Quest Scene
    $scene = @from_menu ? Scene_Menu.new (QuestData::MENU_INDEX) : Scene_Map.new
  end
Brilliant. Now, there's only one thing I have to change. This line:
Code: [Select]
$scene = @from_menu ? Scene_Menu.new (QuestData::MENU_INDEX) : Scene_Map.new
Now, if you try to return to the menu from the quest journal without changing this, it won't necessarily return to the correct index. To fix this, remove the argument from the Scene_Menu.new, so that it reads:
Code: [Select]
$scene = @from_menu ? Scene_Menu.new : Scene_Map.new
What did that do? PAC MM automatically remembers which command index to return to unless specified not to. So, by removing that specification we've made absolutely sure it will return to the correct index. We must keep the rest of the line there or else a syntax error will be thrown.
I hope you understand how to add a custom scene to the menu. It can get difficult, so if you have any trouble, don't hesitate to ask for help here.
Title: Re: PAC Main Menu
Post by: pacdiggity on July 30, 2011, 02:01:01 AM
Double-posting to separate the tutorial from my response to Cozzie's post.
Now that I do think about it, that would be easier from the user's point of view. I'll take a look at it in the next version.
And I forgot not everyone knows about those commands. I'll add instructions for that.

Or, for those of you who want to know NOW, in the disable hash you can even use switches and variables to determine if a command works or not. For example:
Code: [Select]
DISABLES = {
  'Equip' => '$game_switches[1]'
}
Will disable the equip option when switch 1 is on. You can use things like $game_variables[1] == 4, $game_variables[1] < 9, $game_variables[1] >= 3 to use variables in a disable command.
Title: Re: PAC Main Menu (1.7a)
Post by: pacdiggity on August 22, 2011, 12:47:38 PM
Updated to 1.7a - Revamp.
Configuration has been massively overhauled, and the display option has been added. I think that's where the configuration's going to stay. Any complaints about that?
While we're at it, I'm looking for ideas of menu design. I'll probably take some inspiration from other CMSes, but I'd like to have original designs, and I'm too lazy to do that. So I'm at a point where I'd so just about any CMS that isn't outrageously ridiculous, and could be implemented into PAC MM.
Anyway, enjoy.
Title: Re: PAC Main Menu (1.7b)
Post by: pacdiggity on September 01, 2011, 10:42:20 AM
Updated to 1.7b. This includes one new window setting (:comprehensive) and overhauls the way actor selection is handled. If you come out of a scene that required actor selection, back into the menu, it will automatically begin actor selection for that command.
Yay.
Title: Re: PAC Main Menu (1.7b)
Post by: Adon on September 07, 2011, 11:24:55 PM
Pacman, I switched to this wondering if there was support for common events. I want to call a common event through my menu. I am desperate not to use Melody.
Title: Re: PAC Main Menu (1.7b)
Post by: cozziekuns on September 08, 2011, 03:09:20 AM
Cool stuff Pacman. Some more parts that could be fixed and optimised, but overall the menu's coming along pretty well.

Anyways, I was in the process making a Ring Menu, and I couldn't be bothered programming in the actual menu (I just wanted to make it look prettiful), so I decided to use your framework as a shell and made an addon (yay creative commons).

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi56.tinypic.com%2Fegtzdf.png&hash=29fb3268476fa69a31d24154a80da2b5cc87af48)

Anyways, if you were in the progress of making one I can discontinue this script or something. I just want to know if it was cool with you if I published the script.
Title: Re: PAC Main Menu (1.7b)
Post by: pacdiggity on September 08, 2011, 06:40:14 AM
It would be absolutely fine if you used PAC MM as framework (as it was originally intended) for your own menu, as long as you credit me (which I know you would).
Go for it.

@Adon, I'll look into it. I wouldn't want you to have to use Melody (even though it's better...).
Title: Re: PAC Main Menu (1.7b)
Post by: Adon on September 08, 2011, 07:32:46 PM
No, Melody does not work to well with me, and my scripts. (Not just the ones I copy/pasted, the ones I made myself.) So in this case, PAC MM is better.
Title: Re: PAC Main Menu (1.7b)
Post by: cozziekuns on September 09, 2011, 10:57:48 PM
Ring Menu:

Code: [Select]
#===============================================================================
# ** PAC Main Menu - Addon (Cozziekuns Ring Menu)
#-------------------------------------------------------------------------------
# Version: 1.0
# Author: cozziekuns (rmrk)
# Last Date Updated: 9/5/2011
#===============================================================================
# Description:
#-------------------------------------------------------------------------------
# An addon to Pacman's lovely Main Menu script, that transforms the script into
# a ring menu.
#===============================================================================
# Updates
# ------------------------------------------------------------------------------
# o 9/7/2011 - Started Script.
#===============================================================================
# To-do List
#-------------------------------------------------------------------------------
# o Nothing. Post some ideas.
#===============================================================================
# Instructions
#-------------------------------------------------------------------------------
# Copy and paste this script above Main Process but below Materials. Edit the
# modules to your liking.
#===============================================================================

if PAC::MM::WINDOW_MODE == :ring
 
  $pac["Ring Menu"] = true
 
  module PAC::MM
   
    RING_MENU_RADIUS = 128 # Size of the Ring Menu (radius)
    RING_MENU_SPEED = 16 # How many frames you want the ring menu to take
                         # while spinning. Put simply, the higher the number,
                         # the slower it spins.

  end
 
  #=============================================================================
  # ** Math
  #=============================================================================

  module Math
   
    def self.sind(value); return Math.sin(value * Math::PI / 180); end
   
    def self.cosd(value); return Math.cos(value * Math::PI / 180); end
     
    def self.tand(value); return Math.tan(value * Math::PI / 180); end
     
  end
 
  #=============================================================================
  # ** Window_MenuStatus
  #=============================================================================

  class Window_MenuStatus < Window_Selectable
   
    alias coz_pac_mm_wms_initialize initialize
    def initialize(*args)
      coz_pac_mm_wms_initialize(*args)
      self.visible = self.active
    end
   
    def refresh
      self.contents.clear
      @item_max = $game_party.members.size
      for actor in $game_party.members
        draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
        x = 104; y = actor.index * 96 + WLH / 2
        draw_actor_name(actor, x, y)
        draw_menu_actor_class(actor, x + 120, y)
        draw_menu_actor_level(actor, x + 200, y)
        draw_actor_state(actor, x, y + WLH * 2)
        draw_actor_hp(actor, x + 120, y + WLH * 1)
        draw_actor_mp(actor, x + 120, y + WLH * 2)
        draw_exp_meter(actor, x, y + WLH * 1)
      end
    end
   
    alias coz_pac_mm_wms_update update
    def update(*args)
      coz_pac_mm_wms_update(*args)
      self.visible = self.active
    end
   
  end

  #=============================================================================
  # ** Window_MenuCommand
  #=============================================================================

  class Window_MenuCommand < Window_Base
   
    attr_reader   :index                   

    def initialize(commands)
      super(0, 0, Graphics.width, Graphics.height)
      @commands = commands
      @item_max = commands.size
      self.opacity = 0
      self.index = 0
      @angle = 0
      @radius = PAC::MM::RING_MENU_RADIUS
      refresh
    end
   
    def index=(index)
      @index = index
    end

    def refresh
      self.contents.clear
      for i in 0...@item_max
        draw_item(i)
      end
    end
   
    def angle_size; return 360 / @item_max; end

    def draw_item(index, enabled = true)
      radius = @radius
      n = (index - @index) * angle_size + @angle
      cx = radius * Math.sind(n) + Graphics.width / 2
      cy = - radius * Math.cosd(n) + Graphics.height / 2
      if PAC::MM::COMMANDS[index][2] != nil and PAC::MM::USE_ICONS
        draw_icon(PAC::MM::COMMANDS[index][2], cx - 12, cy - 12, (n == 0 and enabled))
      end
      if n == 0
        self.contents.font.color.alpha = enabled ? 255 : 128
        self.contents.draw_text(cx - 80, cy - 48, 160, WLH, PAC::MM::COMMANDS[index][0], 1)
      end
    end
   
    def update_spin(reverse = false)
      speed = PAC::MM::RING_MENU_SPEED
      @angle += (reverse ? -angle_size : angle_size) / speed.to_f
      Graphics.update
      refresh
    end
     
    def update
      super
      update_index
    end
   
    def update_index
      if Input.trigger?(Input::LEFT)
        Sound.play_cursor
        while @angle.round < angle_size
          update_spin
        end
        @index -= 1
        @index %= @item_max
        @angle = 0
        refresh
      elsif Input.trigger?(Input::RIGHT)
        Sound.play_cursor
        while @angle.round > -angle_size
          update_spin(true)
        end
        @index += 1
        @index %= @item_max
        @angle = 0
        refresh
      end
    end
   
  end

  #=============================================================================
  # ** Scene_Menu
  #=============================================================================

  class Scene_Menu < Scene_Base

    def create_command_window
      commands = PAC::MM::COMMANDS
      @command_window = Window_MenuCommand.new(commands)
      @command_window.index = @menu_index
      @command_window.refresh
      pac_menu_disable_commands
    end

  end
 
end

@Adon, just use the script call:

Code: [Select]
'$game_temp.common_event_id = common_event_id; $scene = Scene_Party.new(false, true)'

Title: Re: PAC Main Menu (1.7b)
Post by: pacdiggity on September 10, 2011, 01:41:49 AM
That is absolutely gorgeous, Cozzie. I thought about putting the command text in the middle of the ring, but that's just my preference.
I've always hated gold windows in ring menus, they look out of place. Perhaps one of us could implement a button to toggle its openness, like the compact add-on.

Would you mind if I implement this into the core version of the script like the other add-ons? You know I'll credit :3
Title: Re: PAC Main Menu (1.7b)
Post by: cozziekuns on September 10, 2011, 02:55:55 AM
Yeah, that's cool with me. Anyways, added the features that you suggested, which will probably be the last update I'll do for this script. It's now in your hands :V

Code: [Select]
#===============================================================================
# ** PAC Main Menu - Addon (Cozziekuns Ring Menu)
#-------------------------------------------------------------------------------
# Version: 1.1
# Author: cozziekuns (rmrk)
# Last Date Updated: 9/5/2011
#===============================================================================
# Description:
#-------------------------------------------------------------------------------
# An addon to Pacman's lovely Main Menu script, that transforms the script into
# a ring menu.
#===============================================================================
# Updates
# ------------------------------------------------------------------------------
# o 9/9/2011 - Updated to version 1.1. Now includes toggling gold window
#              visibility and text origin.
# o 9/7/2011 - Started Script.
#===============================================================================
# To-do List
#-------------------------------------------------------------------------------
# o Nothing. Post some ideas.
#===============================================================================
# Instructions
#-------------------------------------------------------------------------------
# Copy and paste this script above Main Process but below Materials. Edit the
# modules to your liking.
#===============================================================================

if PAC::MM::WINDOW_MODE == :ring
 
  $pac["Ring Menu"] = true
 
  module PAC::MM
   
    RING_MENU_RADIUS = 128 # Size of the Ring Menu (radius)
    RING_MENU_SPEED = 16 # How many frames you want the ring menu to take
                         # while spinning. Put simply, the higher the number,
                         # the slower it spins.
                         
    RING_MENU_TEXT_ORIGIN = :center # Toggles the origin of the text in the ring
                                    # menu. :top refers to the top of the icon,
                                    # while :center refers to the center of the
                                    # ring menu.
                                   
    RING_MENU_GOLD_BUTTON = Input::L # Button to toggle gold window visibility
                                     # (Input::Button)

    RING_MENU_GOLD_WINDOW = true     # Start scene with gold window visible?
                                     # (true / false)

  end
 
  #=============================================================================
  # ** Math
  #=============================================================================

  module Math
   
    def self.sind(value); return Math.sin(value * Math::PI / 180); end
   
    def self.cosd(value); return Math.cos(value * Math::PI / 180); end
     
    def self.tand(value); return Math.tan(value * Math::PI / 180); end
     
  end
 
  #=============================================================================
  # ** Window_MenuStatus
  #=============================================================================

  class Window_MenuStatus < Window_Selectable
   
    alias coz_pac_mm_wms_initialize initialize
    def initialize(*args)
      coz_pac_mm_wms_initialize(*args)
      self.visible = self.active
    end
   
    def refresh
      self.contents.clear
      @item_max = $game_party.members.size
      for actor in $game_party.members
        draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
        x = 104; y = actor.index * 96 + WLH / 2
        draw_actor_name(actor, x, y)
        draw_menu_actor_class(actor, x + 120, y)
        draw_menu_actor_level(actor, x + 200, y)
        draw_actor_state(actor, x, y + WLH * 2)
        draw_actor_hp(actor, x + 120, y + WLH * 1)
        draw_actor_mp(actor, x + 120, y + WLH * 2)
        draw_exp_meter(actor, x, y + WLH * 1)
      end
    end
   
    alias coz_pac_mm_wms_update update
    def update(*args)
      coz_pac_mm_wms_update(*args)
      self.visible = self.active
    end
   
  end

  #=============================================================================
  # ** Window_MenuCommand
  #=============================================================================

  class Window_MenuCommand < Window_Base
   
    attr_reader   :index                   

    def initialize(commands)
      super(0, 0, Graphics.width, Graphics.height)
      @commands = commands
      @item_max = commands.size
      self.opacity = 0
      self.index = 0
      @angle = 0
      @radius = PAC::MM::RING_MENU_RADIUS
      refresh
    end
   
    def index=(index)
      @index = index
    end

    def refresh
      self.contents.clear
      for i in 0...@item_max
        draw_item(i)
      end
    end
   
    def angle_size; return 360 / @item_max; end

    def draw_item(index, enabled = true)
      radius = @radius
      n = (index - @index) * angle_size + @angle
      cx = radius * Math.sind(n) + Graphics.width / 2
      cy = - radius * Math.cosd(n) + Graphics.height / 2
      if PAC::MM::COMMANDS[index][2] != nil and PAC::MM::USE_ICONS
        draw_icon(PAC::MM::COMMANDS[index][2], cx - 12, cy - 12, (n == 0 and enabled))
      end
      if n == 0
        self.contents.font.color.alpha = enabled ? 255 : 128
        case PAC::MM::RING_MENU_TEXT_ORIGIN
        when :top
          self.contents.draw_text(cx - 80, cy - 48, 160, WLH, PAC::MM::COMMANDS[index][0], 1)
        when :center
          self.contents.draw_text(Graphics.width / 2 - 80, Graphics.height / 2 - WLH, 160, WLH, PAC::MM::COMMANDS[index][0], 1)
        end
      end
    end
   
    def update_spin(reverse = false)
      speed = PAC::MM::RING_MENU_SPEED
      @angle += (reverse ? -angle_size : angle_size) / speed.to_f
      Graphics.update
      refresh
    end
     
    def update
      super
      update_index
    end
   
    def update_index
      if Input.trigger?(Input::LEFT)
        Sound.play_cursor
        while @angle.round < angle_size
          update_spin
        end
        @index -= 1
        @index %= @item_max
        @angle = 0
        refresh
      elsif Input.trigger?(Input::RIGHT)
        Sound.play_cursor
        while @angle.round > -angle_size
          update_spin(true)
        end
        @index += 1
        @index %= @item_max
        @angle = 0
        refresh
      end
    end
   
  end

  #=============================================================================
  # ** Scene_Menu
  #=============================================================================

  class Scene_Menu < Scene_Base
   
    alias coz_pac_mm_sm_start start
    def start(*args)
      coz_pac_mm_sm_start(*args)
      @gold_window.visible = PAC::MM::RING_MENU_GOLD_WINDOW
      @gold_window.openness = PAC::MM::RING_MENU_GOLD_WINDOW ? 255 : 0
    end

    def create_command_window
      commands = PAC::MM::COMMANDS
      @command_window = Window_MenuCommand.new(commands)
      @command_window.index = @menu_index
      @command_window.refresh
      pac_menu_disable_commands
    end
   
    alias coz_pac_mm_sm_update update
    def update(*args)
      coz_pac_mm_sm_update(*args)
      update_gold_visible
    end
   
    def update_gold_visible
      if Input.trigger?(PAC::MM::RING_MENU_GOLD_BUTTON)
        Sound.play_decision
        if @gold_window.visible
          @gold_window.close
          while @gold_window.openness != 0
            @gold_window.update
            Graphics.update
          end
          @gold_window.visible = false
        else
          @gold_window.visible = true
          @gold_window.open
          while @gold_window.openness != 255
            @gold_window.update
            Graphics.update
          end
        end
      end
    end

  end
 
end
Title: Re: PAC Main Menu (1.7c)
Post by: pacdiggity on October 27, 2011, 07:25:41 AM
Updated to 1.7c to include Cozzie's menu and a wee little bug fix.
Title: Re: PAC Main Menu (1.7c)
Post by: oriceles on November 07, 2011, 03:42:19 PM
Don't know why but the demo won't start for me.
I copypasted the scripts from the demo but when i'm goin gto start a battle this is shown:
Script 'PAC utility 1.6' line 160: NoMethodOcurred
Undefined method `size' for 'nil' nil:NilClass
Title: Re: PAC Main Menu (1.7c)
Post by: pacdiggity on November 07, 2011, 04:45:28 PM
1. You're looking for the PAC Build (http://rmrk.net/index.php/topic,42523.0/all.html) topic. You should post there next time you have a problem with any PAC script.
2. Try basing your script off of this. I changed one line slightly.
Code: [Select]
#===============================================================================
#
# Pacman Advanced Creative (PAC) Engine - Utility Engine v1.7
# Updated 15/6/2011
# Type: Utility
# Installation: Configuration, script calls, tags.
# Level: Simple, Average
#
#===============================================================================
#
# Hi! This is the PAC Utility Engine, designed to give the user more control
# over menial things in their game. You'll find quite a few features in here,
# but not nearly as many as PAC Battle Addons. The reason the engine is in
# bulk now is simply for organization's sake, and to give you, the user, all
# the instructions and configurables of the features in one place. So, with
# the administrative side out of the way, I'll give you some instructions on
# what to do with this script.
#
#===============================================================================
#
# INSTALLATION
# Paste this script anywhere below materials and above main in the script editor
# (F11) of your game. Read the instructions below on how to use the Utility
# Engine.
#
#===============================================================================
#
# INSTRUCTIONS AND CONFIGURATION
# Follow the instructions beside each configurable to alter the engine to your
# liking. Make sure you read through everything to use the engine to the
# maximum capacity.
#
#===============================================================================

$pac = {} unless $pac
$pac["Utility"] = [1.7]

module PAC
  module UTILITY

#===============================================================================
# BEGIN EDITING
#===============================================================================

SKIP_TITLE = false      # Skip title scene? (Script must be first on list)
RECOVER_HEALTH = true   # Recover health on level up?
RECOVER_MAGIC = true    # Recover MP on level up?
RECOVER_STATES = true   # Recover states on level up?
GOLD_VARIANCE = 24      # Variance (+/-) the gold can change for all enemies.
BATTLE_HEAL_HP = 10     # Heal x% health after each battle.
BATTLE_HEAL_MP = 10     # Heal x% MP after each battle.
BATTLE_HEAL_STATES = false    # Heal all states after each battle?
USE_FIX = true  # If you must, set this to false to not use the system.
# Prefixes used for enemies of which there are more than one of. Syntax:
# LETTER_TABLE = [' Prefix', ' Prefix2', ' Prefix3']
LETTER_TABLE = [' 1', ' 2', ' 3', ' 4', ' 5', ' 6', ' 7', ' 8', ' 9', ' 10',
                ' 11', ' 12', ' 13', ' 14', ' 15', ' 16', ' 17', ' 18',
                ' 19', ' 20', ' 21', ' 22', ' 23', ' 24', ' 25', '26']
BB_TYPE = 2   # Type of battleback feature used. 1 or 2, 0 for none.
   
#===============================================================================
# This section of config is only used if BB_TYPE is set to 1.
#===============================================================================

BB_DIRECTORY = "Graphics/Battlebacks/"# Directory of the battlebacks.
BB_MAPS = {                           # Hash to change battleback for maps:
1 => "Grassland",                     # BB_MAPS = {
}   # Don't touch this.               # MAPID => "Battleback Name",
BB_TEST = "Grassland"                 # Battleback used in battle test.
CREATE_FLOOR = true                   # Create battle floor?
   
#===============================================================================
# This section of config is only used if BB_TYPE is set to 2.
#===============================================================================
   
WIDTH  = 640          # Width of the battleback.
HEIGHT = 480          # Height of the battleback.
BLUR_INTENSITY = 1    # Intensity of blur (higher = possible lag)
FLOOR_X = 0           # X-coordinate of floor.
FLOOR_Y = 192         # Y-coordinate of floor.
FLOOR_O = 128         # Opacity of floor.
CREATE_FLOOR = true   # Create battle floor?

#===============================================================================
# END EDITING
#===============================================================================

  end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles actors. It's used within the Game_Actors class
# ($game_actors) and referenced by the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_level_up level_up
  #--------------------------------------------------------------------------
  # * Level Up
  #--------------------------------------------------------------------------
  def level_up
    pac_level_up
    @hp = maxhp if PAC::UTILITY::RECOVER_HEALTH
    @mp = maxmp if PAC::UTILITY::RECOVER_MAGIC
    if PAC::UTILITY::RECOVER_STATES
      @states.clone.each {|i| remove_state(i) }
    end
  end
  #--------------------------------------------------------------------------
  # * After battle heal
  #--------------------------------------------------------------------------
  def battle_heal
    if PAC::UTILITY::BATTLE_HEAL_STATES
      for state in states do remove_state(state.id) end
    end
    return if dead?
    self.hp += maxhp * PAC::UTILITY::BATTLE_HEAL_HP / 100
    self.mp += maxmp * PAC::UTILITY::BATTLE_HEAL_MP / 100
  end
end

#==============================================================================
# ** Game_Enemy
#------------------------------------------------------------------------------
#  This class handles enemy characters. It's used within the Game_Troop class
# ($game_troop).
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias initialize_ae initialize unless $@
  alias gold_variance gold unless $@
  #--------------------------------------------------------------------------
  # * Get Gold
  #--------------------------------------------------------------------------
  def gold
    default_gold = gold_variance
    lower = Integer(default_gold * (100 - PAC::UTILITY::GOLD_VARIANCE) / 100)
    upper = Integer(default_gold * (100 + PAC::UTILITY::GOLD_VARIANCE) / 100)
    value = lower + rand(upper - lower + 1)
    return value
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(index, enemy_id)
    if $data_enemies[enemy_id].swaps != [] and
     !$data_enemies[enemy_id].swaps.nil?
      swaps = $data_enemies[enemy_id].swaps
      enemy_id = swaps[rand(swaps.size)]
    end
    initialize_ae(index, enemy_id)
  end
end

#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle < Scene_Base
 
  alias pac_hab_battle_end battle_end unless $@
  def battle_end(result)
    pac_hab_battle_end(result)
    if result != 2
      for member in $game_party.members
        member.battle_heal
      end
    end
  end
end

#==============================================================================
# ** Game_Troop
#------------------------------------------------------------------------------
#  This class handles enemy groups and battle-related data. Also performs
# battle events. The instance of this class is referenced by $game_troop.
#==============================================================================

class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # Letter Table
  #--------------------------------------------------------------------------
  if PAC::UTILITY::USE_FIX == true  # If use table system...
    LETTER_TABLE = PAC::UTILITY::LETTER_TABLE
  else  # If no system...
    LETTER_TABLE = ['']
  end
end

#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles system-related data. Also manages vehicles and BGM, etc.
# The instance of this class is referenced by $game_system.
#==============================================================================

class Game_System
  #-----------------------------------------------------------------------------
  # public instance variables
  #-----------------------------------------------------------------------------
  attr_accessor :battleback if PAC::UTILITY::BB_TYPE == 1
  #-----------------------------------------------------------------------------
  # alias listing
  #-----------------------------------------------------------------------------
  alias pac_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    pac_initialize
    @battle_back = nil if PAC::UTILITY::BB_TYPE == 1
  end
end

#===============================================================================
#
# PAC BATTLEBACK SYSTEM
#
#===============================================================================

if PAC::UTILITY::BB_TYPE == 1 # Run ABB.
 
#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
#  This module loads each of graphics, creates a Bitmap object, and retains it.
# To speed up load times and conserve memory, this module holds the created
# Bitmap object in the internal hash, allowing the program to return
# preexisting objects when the same bitmap is requested again.
#==============================================================================

module Cache
  #--------------------------------------------------------------------------
  # * Get Battleback Graphic
  #     filename : Filename
  #--------------------------------------------------------------------------
  def self.battleback(filename)
    load_bitmap(PAC::UTILITY::BB_DIRECTORY, filename)
  end
end

#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # alias listing
  #--------------------------------------------------------------------------
  alias pac_abb_create_battleback create_battleback
  alias pac_abb_create_battlefloor create_battlefloor
  #--------------------------------------------------------------------------
  # * Create Battleback Sprite
  #--------------------------------------------------------------------------
  def create_battleback
    if $BTEST # If Battletest
      if PAC::UTILITY::BB_TEST != nil # If BB_TEST is set
        @battleback_sprite = Sprite.new(@viewport1)
        @battleback_sprite.bitmap = Cache.battleback(PAC::UTILITY::BB_TEST)
        return
      else
        pac_abb_create_battleback # The usual.
      end
    end
    if $game_system.battleback != nil # If battleback is set...
      @battleback_sprite = Sprite.new(@viewport1)
      @battleback_sprite.bitmap = Cache.battleback($game_system.battleback)   
    elsif PAC::UTILITY::BB_MAPS.key?($game_map.map_id)
      @battleback_sprite = Sprite.new(@viewport1)
      id = $game_map.map_id
      @battleback_sprite.bitmap = Cache.battleback(PAC::UTILITY::BB_MAPS[id])
    else
      pac_abb_create_battleback # The. Usual. Method.
    end
  end
  #--------------------------------------------------------------------------
  # * Create Battlefloor Sprite
  #--------------------------------------------------------------------------
  unless PAC::UTILITY::CREATE_FLOOR == true # Check if rewrite is needed...
    def create_battlefloor
      if PAC::UTILITY::BB_MAPS.key?($game_map.map_id) or
       $game_system.battleback != nil
        @battlefloor_sprite = Sprite.new(@viewport1)
        return
      end
      if $BTEST
        if PAC::UTILITY::BB_TEST != nil
          @battlefloor_sprite = Sprite.new(@viewport1)
          return
        end
      end
      pac_abb_create_battlefloor  # The usual.
    end
    def update_battlefloor
    end # Do not rewrite battlefloor sprite.
  end
end

elsif PAC::UTILITY::BB_TYPE == 2  # Run SBB.
 
#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within the
# Scene_Battle class.
#==============================================================================

class Spriteset_Battle
  #-----------------------------------------------------------------------------
  # * Create Battleback Sprite
  #-----------------------------------------------------------------------------
  def create_battleback
    source = $game_temp.background_bitmap
    width = PAC::UTILITY::WIDTH
    height = PAC::UTILITY::HEIGHT
    bitmap = Bitmap.new(width, height)
    bitmap.stretch_blt(bitmap.rect, source, source.rect)
    PAC::UTILITY::BLUR_INTENSITY.times do bitmap.blur end
    @battleback_sprite = Sprite.new(@viewport1)
    @battleback_sprite.bitmap = bitmap
    @battleback_sprite.ox = width / 2
    @battleback_sprite.oy = height / 2
    @battleback_sprite.x = Graphics.width / 2
    @battleback_sprite.y = (Graphics.height - 128) / 2 + 64
  end
  #-----------------------------------------------------------------------------
  # * Create Battlefloor Sprite
  #-----------------------------------------------------------------------------
  if PAC::UTILITY::CREATE_FLOOR == true # Rewrite method?
    def create_battlefloor
      @battlefloor_sprite = Sprite.new(@viewport1)
      @battlefloor_sprite.bitmap = Cache.system("BattleFloor")
      @battlefloor_sprite.x = PAC::UTILITY::FLOOR_X
      @battlefloor_sprite.y = PAC::UTILITY::FLOOR_Y
      @battlefloor_sprite.z = 1
      @battlefloor_sprite.opacity = PAC::UTILITY::FLOOR_O
    end
  end
end
elsif PAC::UTILITY::BB_TYPE == 0
else  # If you fucked it up...
  raise "The PAC says: BB_TYPE not set to 0, 1 or 2. Check your Utility script."
end

#===============================================================================
#
# PAC Skip Title
#
#===============================================================================

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs the title screen processing.
#==============================================================================

if PAC::UTILITY::SKIP_TITLE           # Check if script is used
class Scene_Title < Scene_Base
  #----------------------------------------------------------------------------
  # rewrite method: main
  #----------------------------------------------------------------------------
  def main
    if $BTEST                         # If battle test
      battle_test                     # Start battle test
    else                              # If normal play
      load_database                   # Load database
      create_game_objects             # Create game objects
      load_first_map                  # Loads first map
    end
  end
  #----------------------------------------------------------------------------
  # new method: load_first_map
  #----------------------------------------------------------------------------
  def load_first_map
    confirm_player_location
    $game_party.setup_starting_members            # Initial party
    $game_map.setup($data_system.start_map_id)    # Initial map position
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    $game_player.refresh
    $scene = Scene_Map.new
    Graphics.frame_count = 0
    $game_map.autoplay
  end
end
end

#===============================================================================
#
# END OF SCRIPT
#
#===============================================================================
3. If that doesn't work, you'll have to post your copy of the script here so I can better find the error.
Title: Re: PAC Main Menu (1.7c)
Post by: oriceles on November 08, 2011, 03:03:50 AM
Oh! sorry it just happened that i have many tabs opened at the same time checking for your scripts. Anyway I'll test and post with the results
Title: Re: PAC Main Menu (1.7c)
Post by: D&P3 on July 08, 2012, 03:26:11 PM
Bug: ;9
I have found that if I choose to disable access to the save option, I get an error in the default script; which actually complains about skills having no method error occur :o

Trying it out in a new project, discovering that disabling save works fine with the default menu, but causes an error with the PAC main menu ;9
Also no other custom script was present.

Tried having a look through it myself, but ultimately I think it's better for the original scripter to get a handle on the problem (you would definitely know your code better than I ever could) and because you could also update the post with a fix ^-^
Spoiler for:
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg4host.net%2Fupload%2F081725184ff9a65e16e39.png&hash=2868204513dea3a96d7396988fdcd99bdeaa39fa)
Title: Re: PAC Main Menu (1.7c)
Post by: pacdiggity on July 08, 2012, 05:12:39 PM
:O

That is odd. But I tried it out myself, and was completely astonished by the error. Thanks for picking it up. Thinking for a while, I was able to figure out that the error was coming from the Window_MenuCommand#draw_item method in PAC MM lines 505-517. What it was doing was passing the array specified for a command instead of its' assigned index, for some reason. I checked this by inserting a line "print index" at the start of the method, and I got "1, 2, 3, 4, 5, 6, ["Skills", "$scene = Scene_Skill.new(@status_window.index)", 137]". This meant that at some point I was calling the draw_item method and sending an array instead of a number ;9
Skip forward to the Scene_Menu#pac_menu_disable_commands method (around 680 in PAC MM) and see that I was foolishly passed the array instead of simply its number. So I just changed those 2 lines ._.

Fix is up. Thanks.
Title: Re: PAC Main Menu (1.7d)
Post by: D&P3 on July 08, 2012, 05:37:38 PM
Awesome, works fine now ;8
(despite the fact that I have done a few scripts, I barely know anything about the default scripts and couldn't pick up on what the problem was ;9)

By the way Pacman, your scripts are pretty innovative and definitely useful.
Seeing as there are fuck all thank you posts on this thread (considering the viewcount), here's another one:
Pacman is super special awesome :lol: and this script kicks ass (especially compact mode (my personal favourite)).

Also I just discovered Pacmans weather effects a couple hours ago; can definitely say that some of my towns look a lot more pretty now ;D


I hope that stems your motivation :)
Title: Re: PAC Main Menu (1.7d)
Post by: pacdiggity on July 11, 2012, 04:13:59 PM
Motivated to PORT THE SCRIPT TO ACE?!?!?!

YES. (http://rmrk.net/index.php/topic,46355.msg527597/topicseen.html#msg527597)