RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
Beran's iPod script v1.15-final

0 Members and 1 Guest are viewing this topic.

**
Rep: +0/-0Level 85
iPod script
Version: 1.15-final
Type: Music Player
Key Term: Misc Add-On


Introduction

I made this script as a response to a request on a different forum, and decided it was my first script decent enough to post up here.
It simply displays a nice "iPod" graphic, and lets you pick songs to play from a list.

Features

  • Relatively easy setup
  • IPod Graphic
  • Allows for as many songs as you wish
  • Allows for author and genre names
  • Allows unlockable songs
  • Currently selected song is remembered, and saved in your save game
  • Unlocked songs saved in save game
  • Entirely Lag-free
  • Map as background
  • Option to have the current BGM change with your selected song
  • iPod menu with some for-fun, customizable options
  • NEW: iPod menu now features a "sort-by" option (title, author or genre). Your selected option is saved with your game

Screenshots



If you do not want to download the demo, save the following 2 images to your computer, and import them into your game as outlined in the script
Spoiler for:




Demo

Latest Demo:
iPod Demo v1.00-beta

Note: This demo is severely outdated. Don't try to get the script from the demo, it won't work very well :P
The demo does, however, display the script's features nicely

Script

The script should be placed somewhere above main, and below Scene_Debug
Spoiler for:
Code: [Select]
#==============================================================================
#==============================================================================
#Berans' "iPod" script v1.15-final
#Last edited: 12 August 2008
#
#------------------------------------------------------------------------------
#What's new in v1.15
# -Script now automatically adds any songs you have in your project to the
#  PLAYBACK list. An array in the config module allows you to also add any songs
#  from the RTP
# -Minor bugfix regarding the mute function
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#What's new in v1.13
# -Major bugfixes and some code improvement
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#What's new in v1.12
# -Further code improvements
# -Changed iPod menu options to include "Sorting"
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#What's new in v1.01
# -Minor code cleanups
# -Debugging
# -Added "Back" option in the iPod menu
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#What's new in v1.00
# -Added a "menu" feature on the ipod with a few small options
# -Code cleaned up
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#What's new in v0.99
# -Fixed a few small glitches
# -The game now remembers whether or not you were playing a song upon exiting
#  the iPod, to accomodate BGM_CHANGER better.
# -The game now remembers and saves the BGM_CHANGER option, so it can be changed
#  ingame with a new, easy-to-use script command
#------------------------------------------------------------------------------
#
#will allow you to playback songs from a list using a simple window which looks
#like an ipod
#
#feel free to edit and change any names, provided you have changed them in your
#audio/bgm folder(this would let you have custom names drawn in the menu)
#see further instructions below
#
#Credits: Berans    - Making the script
#         Blizzard  - Lessons on scripting and scripting conventions
#         Sniper308 - Requesting the script
#------------------------------------------------------------------------------
#Features
#------------------------------------------------------------------------------
# -Allows for as many songs as you wish
# -Relatively easy setup
# -IPod Graphic
# -Allows for author and genre names
# -Allows unlockable songs
# -Currently selected song is remembered, and saved in your save game
# -Unlocked songs saved in save game
# -Entirely Lag-free
# -Map as background
# -Option to have the current BGM change with your selected song
# -NEW: BGM_CHANGER option now remembered and saved with new easy-to-use command
# -NEW: iPod menu with a few for-fun options
# -NEW: iPod menu now features a "sort" option, standard sorting now set to song
#  title(sort option is saved in save game)
# -NEW: Automatically sets up any custom songs you have to use in the script
#------------------------------------------------------------------------------
#Compatibility
#------------------------------------------------------------------------------
#Should be compatible with most scripts, including the SDK
#Since this is a beta test, please notify me if something's not working
#
#==============================================================================
#Instructions
#==============================================================================
#
#------------------------------------------------------------------------------
#Setup:
#------------------------------------------------------------------------------
#Songs in your project's "Audio/BGM" folder will automatically be setup to be
#used in the script. If you want to use songs from the RTP that aren't in your
#project's "Audio/BGM" folder, add them in the "PLAYBACK1" array in the Config
#section of the script.
#The names must be spelled exactly as in the RTP's "Audio/BGM" folder, enclosed
#in quotation marks, and separated by a comma.
#example:
#PLAYBACK = ["001-Battle01, "002-Battle02", "003-Battle03"]
#In playback initial, add the number of all the songs you want to have initially
#unlocked, separated by comma. The numbers correspond to a list of songs,
#consisting of your custom songs, arranged alphabetically followed by the RTP
#songs in the order you have specified.
#example:
#you have the custom songs "Song1", "Song2" and "Song3" in your "Audio/BGM" folder
#and have specified "001-Battle01" to be included in the list.
#song 1 will then be "Song1", 2 - "Song2" 3 - "Song3" and 4 "001-Battle01"
#The PLAYBACK_AUTHOR and PLAYBACK_GENRE "hashes" respectively hold information on
#the author and genre, of each song.
#To add an author or genre name, simply add "yoursongnumber => description"
#anywhere in the correct hash. The author's/genre's name must be enclosed in
#quotation marks, and the number and name together, separated by a comma
#If a song number is not in there, the author or
#genre are automatically set to "unkown" for that song
#example:
#PLAYBACK_AUTHOR = {20 => "the author of your 20th song",
#                   1 => "the author of your 1st song", 3 => "another author"}
#the same exact same format goes for genre
#If you want all the songs in your PLAYBACK array to be "unlocked" from the
#start, simply set "unlockables" to "false"
#If you want the "IPod" to change the currently playing BGM for a map when a
#song is selected and played, set bgm_changer to "true"
#
#------------------------------------------------------------------------------
#Required Graphics and instructions:
#------------------------------------------------------------------------------
#For this script to work properly, the following files are needed, and have to
#be placed in the "Graphics/Pictures" folder in your game:
#   -IPod.png
#   -IPod2.png
#you'll also need to import the files within your project and set the correct
#transparancies
#Transparancy for IPod.png must be set to white
#Transparancy for IPod2.png must be set to the darker shade of grey, with the
#semi-transparant color set to the lighter grey
#
#------------------------------------------------------------------------------
#Using the script
#------------------------------------------------------------------------------
#To call the script, within an event use the "script" command
#in the script write "$scene = Scene_Playback.new" (without quotation marks)
#If you want the "ipod" to return to menu upon exit, add (true) after
#Scene_Playback.new. This works well in combination with a common event with an
#item.
#
#To "unlock" a song, ensure its name is in the PLAYBACK array in the
#configuration below, then, use the "script" command in an event, and enter the
#following: "unlock_song(your_song_number)"
#The song number directly corresponds to the position in the PLAYBACK array
#example:
#Your PLAYBACK array is ["yoursong-01", "yoursong-02", "someothersong"]
#and you want to unlock "yoursong-02
#simply write "unlock_song(2)" within your script command
#
#To change the BGM_CHANGER option ingame, use the following code in an event,
#within a "script..." command: "bgm_changer(condition)" (without the quotes)
#replace the word condition with either true or false, depending on what you
#would like the option to be
#
#NOTE:
#Long song/author/genre names may look squashed. For optimal looks, try to keep
#names under 15 characters.
#==============================================================================
#==============================================================================


#==============================================================================
#Begin Configuration
#==============================================================================

module Playback
  UNLOCKABLES = true
  BGM_CHANGER = false
  PLAYBACK1 = [ "001-Battle01", "002-Battle02",   "003-Battle03",
               "004-Battle04",   "005-Boss01",     "006-Boss02",
                 "007-Boss03",   "008-Boss04", "009-LastBoss01",
              "035-Dungeon01",   "063-Slow06",]
  PLAYBACK_INITIAL = [3,8]
  
  PLAYBACK_AUTHOR = {1  => "DragonForce", 2  => "Enterbrain", 3 => "Enterbrain",
                     4  => "Enterbrain" , 5  => "Enterbrain", 6 => "Enterbrain",
                     7  => "Enterbrain" , 8  => "Enterbrain", 9 => "Enterbrain",
                     10 => "Enterbrain" , 12 => "Enterbrain", }
  
  PLAYBACK_GENRE = {1 => "Classic"}
  
#==============================================================================
#End Configuration
#==============================================================================
 
  PLAYBACK2 = Dir.entries("Audio/BGM")
  PLAYBACK2.delete("..")
  PLAYBACK2.delete(".")
  for i in 0...PLAYBACK2.size
    PLAYBACK2[i] = PLAYBACK2[i].gsub(/[.][A-Za-z0-9._,]+/) {nil}
  end
  PLAYBACK = PLAYBACK2.concat(PLAYBACK1)
  PLAYBACK_UNLOCKED = []
  for i in 0...PLAYBACK.size
    PLAYBACK_UNLOCKED.push nil
  end
  unless PLAYBACK_INITIAL.empty?
    for i in 0...PLAYBACK_INITIAL.size
      PLAYBACK_UNLOCKED[PLAYBACK_INITIAL[i] -1] = PLAYBACK[PLAYBACK_INITIAL[i] -1]
    end
  end
  if !UNLOCKABLES
    for i in 0...PLAYBACK.size
      PLAYBACK_UNLOCKED[i] = PLAYBACK[i]
    end
  end
  unless $game_system == nil
    unless $game_system.bgm_changer == nil
      if $game_system.bgm_changer
        BGM_CHANGER = true
      elsif !$game_system.bgm_changer
        BGM_CHANGER = false
      end
    end
  end
  $playback_list = []
  for i in 0...PLAYBACK_UNLOCKED.size
    if PLAYBACK_UNLOCKED[i] != nil
      $playback_list[i] = [Playback::PLAYBACK_UNLOCKED[i],
                           Playback::PLAYBACK_AUTHOR[i+1] == nil ? "Unkown" :
                           Playback::PLAYBACK_AUTHOR[i+1],
                           Playback::PLAYBACK_GENRE[i+1] == nil ? "Unkown" :
                           Playback::PLAYBACK_GENRE[i+1]]
    end
  end
  $playback_list = $playback_list.compact
end

#==============================================================================
#**Window_Playback

#------------------------------------------------------------------------------
#This window displays the playback screen
#==============================================================================

class Window_Playback < Window_Selectable
  
  attr_accessor  :playback_bgm
  
  def initialize
    super (212,66,216,170)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 4
    @column_max = 4
    self.z -= 100
    self.index = 0
    self.active = true
    #Get the playback bgm to draw the text right
    get_playback_bgm
    refresh
  end
  
  def refresh
    self.contents.clear
    unless $game_system.playback_list.empty?
      if $game_system.playback_list[@playback_bgm] != nil
        bgm = $game_system.playback_list[@playback_bgm][0]
      else
        @check = 0
        #check all possible songs for an unlocked entry
        loop do
          @check += 1
          @playback_bgm += 1
          @playback_bgm %= $game_system.playback_list.size
          if $game_system.playback_list[@playback_bgm] != nil
            bgm = $game_system.playback_list[@playback_bgm][0]
            break
          end
        end
      end
    else
      bgm = "No Songs Unlocked"
      $nosongs = true
    end
    if !$nosongs
      text = (@playback_bgm + 1).to_s + ": " + bgm
      if $game_system.playback_list[@playback_bgm] != nil
        text2 = "Author: " + $game_system.playback_list[@playback_bgm][1]
      else
        text2 = "Author: Unkown"
      end
      if $game_system.playback_list[@playback_bgm] != nil
        text3 = "Genre: " + $game_system.playback_list[@playback_bgm][2]
      else
        text3 = "Genre: Unkown"
      end
    else
      text = bgm
      text2 = ""
      text3 = ""
    end
    self.contents.draw_text(0,8,self.contents.width,32,text,1)
    self.contents.draw_text(0,40,self.contents.width,32,text2,1)
    self.contents.draw_text(0,72,self.contents.width,32,text3,1)
  end
  
  def update_cursor_rect
    self.cursor_rect.empty
  end
  
  def get_playback_bgm
    if $game_system.playback_bgm == nil
      @playback_bgm = 0
      $game_system.playback_bgm = @playback_bgm
    else
      @playback_bgm = $game_system.playback_bgm
    end
  end
end


#==============================================================================
#**Scene_Playback
#------------------------------------------------------------------------------
#This class handles processing for the playback window
#==============================================================================

class Scene_Playback
  
  #----------------------------------------------------------------------------
  # * Public Instance Variables
  #----------------------------------------------------------------------------
  attr_reader :mute
  
  def initialize(frommenu = false)
    @animation_flag = false
    @mute = false
    @temp_hash = {}
    @temp_hash2 = {}
    @temp_array = []
    if $game_system.playback_list.empty?
    $game_system.playback_list = $playback_list
    end
    if $game_system.sort_option == nil
      sort(0)
      $game_system.sort_option = 0
    else
      sort($game_system.sort_option)
    end
    for i in 0...$game_system.unlocked_songs.size
      unlock_song($game_system.unlocked_songs[i]+1)
    end
    if $game_temp.mute
      @mute = true
    end
    if $game_system.bgm_changer == nil
      $game_system.bgm_changer = Playback::BGM_CHANGER
    end
    if $game_temp.playing == nil
      @playing = false
    else
      @playing = $game_temp.playing
    end
    @frommenu = frommenu
  end
  
  def main
    #ensure map/menu bgm is kept
    $game_system.bgm_memorize
    @spriteset = Spriteset_Map.new
    @spriteset2 = Spriteset_Ipod.new
    @dummy_window = Ipod_Dummy.new
    @playback_window = Window_Playback.new
    @imenu_window = Window_iMenu.new
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @playback_window.dispose
    @spriteset.dispose
    @spriteset2.dispose
    $nosongs = false
    @dummy_window.dispose
    @imenu_window.dispose
  end
  
  def update
    if @playback_window.active
      update_playback
    end
    if @imenu_window.active
      update_imenu
    end
  end
  
  def update_playback
    if @playback_window.index != @playback_window_check
      @dummy_window.refresh(@playback_window.index)
    end
    if Input.repeat?(Input::RIGHT) && @playback_window.index == 3
      $game_system.se_play($data_system.cursor_se)
      @playback_window.index = 0
      return
    end
    if Input.repeat?(Input::LEFT) && @playback_window.index == 0
      $game_system.se_play($data_system.cursor_se)
      @playback_window.index = 3
      return
    end
    if Input.trigger?(Input::C)
      #Menu
      if @playback_window.index == 0
        $game_system.se_play($data_system.decision_se)
        @playback_window.active = false
        @playback_window.index = -1
        @imenu_window.visible = true
        @imenu_window.active = true
        @imenu_window.index = 0
        @imenu_wait = true
        return
      end
      unless $nosongs
        case @playback_window.index
        #Select next
        when 1
          $game_system.se_play($data_system.decision_se)
          #select the next BGM
          #the loop allows it to skip "nil" entries to aid in unlockables
          loop do
            @playback_window.playback_bgm += 1
            @playback_window.playback_bgm %= $game_system.playback_list.size
            $game_system.playback_bgm = @playback_window.playback_bgm
            if $game_system.playback_list[$game_system.playback_bgm] != nil
              break
            end
          end
          @playback_window.refresh
          #change the currently playing song if one was already playing
          if @playing
            bgm = RPG::AudioFile.new($game_system.playback_list[
                                     $game_system.playback_bgm][0],
                                     100, 100)
            $game_system.bgm_play(bgm)
            if @mute != false
              @mute = false
              @imenu_window.refresh
            end
          end
        #Play/Stop
        when 2
          if @init
            @init = false
          end
          if $game_system.playback_bgm != nil
            if !@playing
              $game_system.se_play($data_system.decision_se)
              #create BGM for playing
              bgm = RPG::AudioFile.new($game_system.playback_list[
                                       $game_system.playback_bgm][0],
                                       100,100)
              $game_system.bgm_play(bgm)
              if $game_system.bgm_changer
                $game_system.bgm_memorize
              end
            else
              $game_system.se_play($data_system.cancel_se)
              $game_system.bgm_play(nil)
            end
            if @mute != false
              @mute = false
              @imenu_window.refresh
            end
          end
          case @playing
          when true
            @playing = false
          when false
            @playing = true
          end
        #Select Previous
        when 3
          $game_system.se_play($data_system.decision_se)
          #select the previous BGM
          #the loop allows it to skip "nil" entries to aid in unlockables
          loop do
            @playback_window.playback_bgm += $game_system.playback_list.size - 1
            @playback_window.playback_bgm %= $game_system.playback_list.size
            $game_system.playback_bgm = @playback_window.playback_bgm
            if $game_system.playback_list[$game_system.playback_bgm] != nil
              break
            end
          end
          @playback_window.refresh
          #change the currently playing song if one was already playing
          if @playing
            bgm = RPG::AudioFile.new($game_system.playback_list[
                                     $game_system.playback_bgm][0],
                                     100, 100)
            $game_system.bgm_play(bgm)
            if @mute != false
              @mute = false
              @imenu_window.refresh
            end
          end
        end
      else
        $game_system.se_play($data_system.buzzer_se)
      end
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      #get the correct @playing setting for when the iPod is restarted
      if $game_system.bgm_changer
        $game_temp.playing = @playing
      else
        @playing = false
      end
      if !@frommenu
        #restore the map/menu bgm
        if !$game_system.bgm_changer
          if @mute
            $game_map.map.bgm.volume = 0
          else
            $game_map.map.bgm.volume = 100
          end
          $game_system.bgm_play($game_map.map.bgm)
        end
        $scene = Scene_Map.new
        if !@playing && $game_system.bgm_changer
          if $game_system.playing_bgm == $game_map.map.bgm
            return
          end
          $game_system.bgm_play(nil)
        end
      else
        #restore the map/menu bgm
        if !$game_system.bgm_changer
          if @mute
            $game_map.map.bgm.volume = 0
          else
            $game_map.map.bgm.volume = 100
          end
          $game_system.bgm_play($game_map.map.bgm)
        end
        #change this to go to a different menu upon exit
        $scene = Scene_Menu.new
        if !@playing && $game_system.bgm_changer
          if $game_system.playing_bgm == $game_map.map.bgm
            return
          end
          $game_system.bgm_play(nil)
        end
      end
    end
    $game_temp.playing = @playing
    @playback_window_check = @playback_window.index
    @playback_window.update
  end
  
  def update_imenu
    if @imenu_wait
      @imenu_wait = false
      return
    end
    if @imenu_window.index != @imenu_window_check
      @dummy_window.refresh(@imenu_window.index)
    end
    if Input.repeat?(Input::RIGHT)
      if @imenu_window.index == 3
        $game_system.se_play($data_system.cursor_se)
        @imenu_window.index = 0
        return
      end
    end
    if Input.repeat?(Input::LEFT)
      if @imenu_window.index == 0
        $game_system.se_play($data_system.cursor_se)
        @imenu_window.index = 3
        return
      end
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      @imenu_window.active = false
      @imenu_window.visible = false
      @playback_window.index = @imenu_window.index
      @imenu_window.index = -1
      @playback_window.active = true
    end
    if Input.trigger?(Input::C)
      case @imenu_window.index
      when 0
        $game_system.se_play($data_system.decision_se)
        if !@mute
          unless $game_system.playing_bgm == nil
            $game_system.playing_bgm.volume = 0
            $game_system.bgm_play($game_system.playing_bgm)
          end
          @mute = true
        elsif @mute
          unless $game_system.playing_bgm == nil
            $game_system.playing_bgm.volume = 100
            $game_system.bgm_play($game_system.playing_bgm)
          end
          @mute = false
        end
        @imenu_window.refresh
        $game_temp.mute = @mute
      when 1
        $game_system.se_play($data_system.cancel_se)
        if $game_system.bgm_changer
            $game_temp.playing = @playing
          else
            @playing = false
          end
          #restore the map/menu bgm
          if !$game_system.bgm_changer
              $game_system.bgm_play($game_map.map.bgm)
            end
          #change menu option 2 here
          $scene = Scene_Map.new
          if !@playing && $game_system.bgm_changer
            if $game_system.playing_bgm == $game_map.map.bgm
              return
            end
            $game_system.bgm_play(nil)
          end
      when 2
        if $nosongs
          $game_system.se_play($data_system.buzzer_se)
          return
        else
          $game_system.se_play($data_system.decision_se)
          $game_system.sort_option += 1
          $game_system.sort_option %= 3
          sort($game_system.sort_option)
          @imenu_window.refresh
          @playback_window.refresh
        end
      when 3

        $game_system.se_play($data_system.cancel_se)
        @imenu_window.active = false
        @imenu_window.visible = false
        @playback_window.index = @imenu_window.index
        @imenu_window.index = -1
        @playback_window.active = true
      end
    end
    @imenu_window.update
  end
end


#==============================================================================
#*unlock_song
#------------------------------------------------------------------------------
#Allows you to unlock songs for the playback window
#==============================================================================
def unlock_song(number)
  if $game_system.playback_list.empty?
    $game_system.playback_list = $playback_list
  end
  unless $game_system.playback_list.include?([
    Playback::PLAYBACK[number - 1], Playback::PLAYBACK_AUTHOR[number] || "Unkown",
    Playback::PLAYBACK_GENRE[number] || "Unkown"])
    for i in 0...Playback::PLAYBACK.size
      if $game_system.playback_list[i] == nil
        $game_system.playback_list[i] = [nil,nil,nil]
        $game_system.playback_list[i][0] = Playback::PLAYBACK[number - 1]
        $game_system.playback_list[i][1] =
        (Playback::PLAYBACK_AUTHOR[number] == nil ?
        "Unkown" : Playback::PLAYBACK_AUTHOR[number])
        $game_system.playback_list[i][2] =
        (Playback::PLAYBACK_GENRE[number] == nil ?
        "Unkown" : Playback::PLAYBACK_GENRE[number])
        $game_system.unlocked_songs.push(number - 1)
        return
      end
    end
  end
end


#==============================================================================
#*bgm_changer
#------------------------------------------------------------------------------
#Changes the BGM_CHANGER option for ingame use
#==============================================================================
def bgm_changer(condition)
  if !condition
    if $game_system.bgm_changer
      $game_system.bgm_changer = condition
    end
  else
    $game_system.bgm_changer = condition
  end
end


#==============================================================================
#**Spriteset_Ipod
#------------------------------------------------------------------------------
#Creates an "Ipod" Image at the centre of the screen
#==============================================================================
class Spriteset_Ipod
  def initialize
    @viewport = Viewport.new(208,53,224,374)
    @viewport.z = 5000
    @sprite = Sprite.new(@viewport)
    @sprite2 = Sprite.new
    @sprite2.bitmap = Bitmap.new(224,374)
    @ipod = RPG::Cache.picture('IPod.png')
    @sprite.bitmap = @ipod
  end

  def dispose
    @viewport.dispose
    @sprite.dispose
    @sprite2.dispose
  end
end


#==============================================================================
#**Ipod_Dummy
#------------------------------------------------------------------------------
#Creates the selection effect over the ipod image
#==============================================================================
class Ipod_Dummy < Window_Base
  
  def initialize
    super(208,53,224,374)
    self.contents = Bitmap.new(width - 32,height - 32)
    self.opacity = 0
    self.z = 9999
    refresh
  end
  
  def refresh(index = 0)
    self.contents.clear
    case index
    when 0
      rect = Rect.new(0,52,98,52)
      @bitmap = RPG::Cache.picture('IPod2.png')
      self.contents.blt(47,179,@bitmap,rect)
    when 1
      rect = Rect.new(52,104,52,98)
      @bitmap = RPG::Cache.picture('IPod2.png')
      self.contents.blt(113,199,@bitmap,rect)
    when 2
      rect = Rect.new(0,0,98,52)
      @bitmap = RPG::Cache.picture('IPod2.png')
      self.contents.blt(47,266,@bitmap,rect)
    when 3
      rect = Rect.new(0,104,52,98)
      @bitmap = RPG::Cache.picture('IPod2.png')
      self.contents.blt(26,199,@bitmap,rect)
    end
  end
end


#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of
#  this class.
#==============================================================================
class Game_System
  
  #----------------------------------------------------------------------------
  # * Public Instance Variables
  #----------------------------------------------------------------------------
  attr_accessor :playback_bgm
  attr_accessor :unlocked_songs
  attr_accessor :bgm_changer
  attr_accessor :sort_option
  attr_accessor :playback_list
  
  alias initialize_ipod_later initialize
  def initialize
    initialize_ipod_later
    @unlocked_songs = []
    @playback_list = []
  end

end

#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================
class Game_Temp
  
  #----------------------------------------------------------------------------
  # * Public Instance Variables
  #----------------------------------------------------------------------------
  attr_accessor :playing
  attr_accessor :mute
  
end


#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles the map. It includes scrolling and passable determining
#  functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
  
  #----------------------------------------------------------------------------
  # * Public Instance Variables
  #----------------------------------------------------------------------------
  attr_reader :map
  
end


#==============================================================================
# ** Window_iMenu
#------------------------------------------------------------------------------
#  This class creates a dummy selectable menu to use with the iPod script
#==============================================================================
class Window_iMenu < Window_Selectable
  def initialize
    super(212,66,216,170)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.index = -1
    self.visible = false
    self.active = false
    self.z += 10
    @item_max = 4
    @column_max = 4
    refresh
  end
  
  def refresh
    self.contents.clear
    if $scene.mute
      self.contents.draw_text(0,-5,self.contents.width,32,"Unmute",1)
    else
      self.contents.draw_text(0,-5,self.contents.width,32,"Mute",1)
    end
    #change the bit in quotes below to reflect where your iPod menu's 2nd option
    #exits to i.e. "Exit to Main Menu" or "Exit to Equipment Screen"
    #be wary of long names, as they may look squashed
    self.contents.draw_text(0,27,self.contents.width,32,"Exit to Map",1)
    case $game_system.sort_option
    when 0
      sort = "Title"
    when 1
      sort = "Author"
    when 2
      sort = "Genre"
    end
    self.contents.draw_text(0,59,self.contents.width,32,"Sorted by: " + sort,1)
    self.contents.draw_text(0,91,self.contents.width,32,"Back",1)
  end
  
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      y = -5 + 32*@index
      cursor_rect.set(5,y,self.contents.width - 10,32)
    end
  end
  
end


#==============================================================================
#*Sort
#------------------------------------------------------------------------------
#Method to sort the unlocked songs array for the iPod script
#==============================================================================

def sort(choice)
  $game_system.playback_list =
  $game_system.playback_list.sort {|a, b| a[choice] <=> b[choice]}
  return $game_system.playback_list
end

Instructions

Instructions in the script

Compatibility

Warning, WILL corrupt old savegames.
Otherwise, should be compatible with just about anything, including the SDK

Credits and Thanks

  • Berans - Creating the script
  • Blizzard - Learnt a lot from his scripts in terms of general knowledge and scripting conventions
  • Sniper308 - For requesting the script and suggesting many of the great features
  • LandOfShadows - Use of one of his windowskins in the demo

Author's Notes

Feel free to ask me any questions and PLEASE tell me if you find a bug.
I'm also quite willing to make customizations and such for this, provided they are within reason, and I have the time.

Have fun with it people ^_^

Don't forget to credit me if you use this in your game :P