08-09-2008, 01:00 PM
Beran's iPod script
Sniper308
Aug 9 2008
Hello! I am releasing a script that is pretty new and is easy to use! THIS IS NOT MY SCRIPT! READ THE "CREDIT AND THANKS".
If you have trouble with the link somehow, look below!
Link: Beran's iPod Script
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
Version: v1.00
Instructions: In the script.
Compatibility:Warning, MIGHT corrupt old save games. It did the first time to me in the earlier versions but didn't the other times. Otherwise, should be compatible with just about anything, including the SDK.
Credits and Thanks:
* Berans - Creating the script
* Blizzard - Learned a lot from his scripts in terms of general knowledge and scripting conventions
* Sniper308 - For requesting the script
Script:
All Beran requires is some feedback! So post your feedback and give credit here when using! :) Enjoy!
Sniper308
Aug 9 2008
This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given. If you are the owner of the thread, please contact administration.
No support is given. If you are the owner of the thread, please contact administration.
Hello! I am releasing a script that is pretty new and is easy to use! THIS IS NOT MY SCRIPT! READ THE "CREDIT AND THANKS".
If you have trouble with the link somehow, look below!
Link: Beran's iPod Script
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
Version: v1.00
Instructions: In the script.
Compatibility:Warning, MIGHT corrupt old save games. It did the first time to me in the earlier versions but didn't the other times. Otherwise, should be compatible with just about anything, including the SDK.
Credits and Thanks:
* Berans - Creating the script
* Blizzard - Learned a lot from his scripts in terms of general knowledge and scripting conventions
* Sniper308 - For requesting the script
Script:
Here
Code:
#==============================================================================
#==============================================================================
#Berans' "iPod" script v1.00-beta
#Last edited: 10 August 2008
#
#------------------------------------------------------------------------------
#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
#------------------------------------------------------------------------------
#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:
#------------------------------------------------------------------------------
#In the Configuration section below, add the names of all songs you want to be
#"unlockable". The names must be spelled exactly as in your "Audio/BGM" folder,
#enclosed in quotation marks, and separated by a comma
#example:
#PLAYBACK = ["yoursong-01", "yoursong-02", "someothersong"]
#In playback initial, add the number of all the songs you want to have initially
#unlocked, separated by comma. The numbers directly correspond to the position
#of the names in the PLAYBACK array.
#The PLAYBACK_AUTHOR and PLAYBACK_GENRE "hashes" respectively hold information on
#the author and genre, respectively, 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
PLAYBACK = [ "001-Battle01", "002-Battle02", "003-Battle03",
"004-Battle04", "005-Boss01", "006-Boss02",
"007-Boss03", "008-Boss04", "009-LastBoss01",
"035-Dungeon01", "063-Slow06"]
PLAYBACK_INITIAL = []
PLAYBACK_AUTHOR = {1 => "Enterbrain", 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
#==============================================================================
PLAYBACK_UNLOCKED = []
for i in 0...PLAYBACK.size
PLAYBACK_UNLOCKED.push nil
end
for i in 0...PLAYBACK_INITIAL.size
PLAYBACK_UNLOCKED[PLAYBACK_INITIAL[i] - 1] = PLAYBACK[PLAYBACK_INITIAL[i]-1]
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
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
if Playback::PLAYBACK_UNLOCKED[@playback_bgm] != nil
bgm = Playback::PLAYBACK_UNLOCKED[@playback_bgm]
else
@check = 0
#check all possible songs for an unlocked entry
loop do
@check += 1
@playback_bgm += 1
@playback_bgm %= Playback::PLAYBACK_UNLOCKED.size
if Playback::PLAYBACK_UNLOCKED[@playback_bgm] != nil
bgm = Playback::PLAYBACK_UNLOCKED[@playback_bgm]
break
end
if @check == Playback::PLAYBACK_UNLOCKED.size
bgm = "No Songs Unlocked"
$nosongs = true
break
end
end
end
if !$nosongs
text = (@playback_bgm + 1).to_s + ": " + bgm
if Playback::PLAYBACK_AUTHOR[@playback_bgm + 1] != nil
text2 = "Author: " + Playback::PLAYBACK_AUTHOR[@playback_bgm + 1]
else
text2 = "Author: Unkown"
end
if Playback::PLAYBACK_GENRE[@playback_bgm + 1] != nil
text3 = "Genre: " + Playback::PLAYBACK_GENRE[@playback_bgm + 1]
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
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
for i in 0...$game_system.unlocked_songs.size
if $game_system.unlocked_songs[i] != nil
Playback::PLAYBACK_UNLOCKED[$game_system.unlocked_songs[i]] =
Playback::PLAYBACK[$game_system.unlocked_songs[i]]
end
end
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_window_count = 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 %= Playback::PLAYBACK_UNLOCKED.size
$game_system.playback_bgm = @playback_window.playback_bgm
if Playback::PLAYBACK_UNLOCKED[$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(Playback::PLAYBACK_UNLOCKED[
$game_system.playback_bgm],
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(Playback::PLAYBACK_UNLOCKED[
$game_system.playback_bgm],
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 += Playback::PLAYBACK_UNLOCKED.size - 1
@playback_window.playback_bgm %= Playback::PLAYBACK_UNLOCKED.size
$game_system.playback_bgm = @playback_window.playback_bgm
if Playback::PLAYBACK_UNLOCKED[$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(Playback::PLAYBACK_UNLOCKED[
$game_system.playback_bgm],
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
$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
$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_count)
end
if Input.repeat?(Input::RIGHT)
if @imenu_window_count == nil
@imenu_window_count = -1
end
@imenu_window_count += 1
@imenu_window_count %= 4
if @imenu_window.index == 2
$game_system.se_play($data_system.cursor_se)
@imenu_window.index = 0
return
end
end
if Input.repeat?(Input::LEFT)
if @imenu_window_count == nil
@imenu_window_count = 0
end
@imenu_window_count += 3
@imenu_window_count %= 4
if @imenu_window.index == 0
$game_system.se_play($data_system.cursor_se)
@imenu_window.index = 2
return
end
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@imenu_window.active = false
@imenu_window.visible = false
@imenu_window.index = -1
@playback_window.index = @imenu_window_count
@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
$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
$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 options 3 here
$scene = Scene_Item.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
@imenu_window.update
end
end
#==============================================================================
#*unlock_song
#------------------------------------------------------------------------------
#Allows you to unlock songs for the playback window
#==============================================================================
def unlock_song(number)
Playback::PLAYBACK_UNLOCKED[number - 1] = (Playback::PLAYBACK[number - 1])
$game_system.unlocked_songs.push(number - 1)
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
alias initialize_ipod_later initialize
def initialize
initialize_ipod_later
@unlocked_songs = []
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 = 3
@column_max = 3
refresh
end
def refresh
self.contents.clear
if $scene.mute
self.contents.draw_text(0,8,self.contents.width,32,"Unmute",1)
else
self.contents.draw_text(0,8,self.contents.width,32,"Mute",1)
end
self.contents.draw_text(0,40,self.contents.width,32,"Exit to Map",1)
#change the bit in quotes below to reflect where your iPod menu's 3rd 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,72,self.contents.width,32,"Exit to Inventory",1)
end
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
y = 8 + 32*@index
cursor_rect.set(5,y,self.contents.width - 10,32)
end
end
end
All Beran requires is some feedback! So post your feedback and give credit here when using! :) Enjoy!