PAC Main Menu (1.7d)

0 Members and 1 Guest are viewing this topic.

*****
my name is Timothy what's yours
Rep:
Level 79
Hello
2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    PAC Main Menu
    Version: 1.7d
    Author: Pacman
    Date: 9/7/2012

    Version History


    • <Version 1.7d> 2012.7.9 - Bugfix.
    • <Version 1.5/1.7c> 2011.10.27 - Added ring mode and fixed bug
    • <Version 1.3/1.7b> 2011.9.01 - Added graphical feature and redid actor selection processing
    • <Version 1.2/1.7a> 2011.8.22 - Revamp: Redid configuration and added graphical feature
    • <Version 1.0/1.7> 2011.7.28 - Original Release

    Planned Future Versions

    • <Version anything> - More exotic and comprehensive displays.

    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

    • Easy configuration
    • Menu Icons
    • Auto-remembering command index
    • Simple support for other custom scripts
    • REALLY easy configuration.
    • Customizable, comprehensive display.
    • Revamped actor selection processing (test to see it!)
    • Bloody amazing ring menu (credit to Cozziekuns)

    Screenshots

    Spoiler for:

    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

    Credit


    • Pacman
    • Cozziekuns, if you use the ring menu

    Thanks

    • Twb6543 for helping me deal with the command index issue.
    • Modern Algebra for inspiring a display
    • LoganForrests, Cozziekuns and the almighty Zeriab for generally helping out and showing me how I can improve in Ruby.
    • Yanfly for inspiring PAC by creating YERD, YEZ and YEM.
    • Cozzy for the beautiful ring menu.
    • D&P3 for a bug report.

    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.

    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]
    « Last Edit: July 08, 2012, 05:12:28 PM by Pacman »
    it's like a metaphor or something i don't know

    ***
    Rep:
    Level 69
    RESIDENT ADONKADONK
    So amazing! I love it!

    I'm back.

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    :3
    Such good motivation to hear that, you have no idea. I really hope I can bust out some good designs for later versions.
    it's like a metaphor or something i don't know

    ***
    Rep:
    Level 69
    RESIDENT ADONKADONK
    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.
    « Last Edit: July 28, 2011, 01:34:47 PM by Adon »

    I'm back.

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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
    #
    #===============================================================================
    it's like a metaphor or something i don't know

    *****
    Rep:
    Level 84
    This text is way too personal.
    Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
    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.
     

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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.
    it's like a metaphor or something i don't know

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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.
    « Last Edit: July 30, 2011, 02:08:52 AM by Pacman »
    it's like a metaphor or something i don't know

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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.
    it's like a metaphor or something i don't know

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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.
    « Last Edit: September 01, 2011, 10:45:15 AM by Pacman »
    it's like a metaphor or something i don't know

    ***
    Rep:
    Level 69
    RESIDENT ADONKADONK
    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.

    I'm back.

    *****
    Rep:
    Level 84
    This text is way too personal.
    Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
    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).



    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.

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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...).
    it's like a metaphor or something i don't know

    ***
    Rep:
    Level 69
    RESIDENT ADONKADONK
    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.

    I'm back.

    *****
    Rep:
    Level 84
    This text is way too personal.
    Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
    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)'


    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    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
    « Last Edit: September 10, 2011, 01:47:59 AM by Pacman »
    it's like a metaphor or something i don't know

    *****
    Rep:
    Level 84
    This text is way too personal.
    Bronze - GIAW 11 (Hard)Silver - GIAW Halloween
    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

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    Updated to 1.7c to include Cozzie's menu and a wee little bug fix.
    it's like a metaphor or something i don't know

    **
    Rep:
    Level 64
    Do the evolution baby
    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

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    1. You're looking for the PAC Build 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.
    it's like a metaphor or something i don't know

    **
    Rep:
    Level 64
    Do the evolution baby
    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

    *
    *crack*
    Rep:
    Level 63
    2012 Best Newbie2012 Most Unsung MemberFor frequently finding and reporting spam and spam bots
    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:

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    :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.
    it's like a metaphor or something i don't know

    *
    *crack*
    Rep:
    Level 63
    2012 Best Newbie2012 Most Unsung MemberFor frequently finding and reporting spam and spam bots
    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 :)

    *****
    my name is Timothy what's yours
    Rep:
    Level 79
    Hello
    2014 Zero to Hero2014 Best IRC Quote2014 Most Missed Member2012 Zero To HeroSecret Santa 2012 ParticipantContestant - GIAW 9For frequently finding and reporting spam and spam bots2011 Zero to Hero
    Motivated to PORT THE SCRIPT TO ACE?!?!?!

    YES.
    it's like a metaphor or something i don't know