Version: v1.11
Type: Interactive music player
Introduction
Another unique script by me, inspired, and with graphics, by Sniper308. It's a little Drumkit which lets you pump out some beats ingame.
Features
- Easy to set up
- Can customize drum-sounds however you like
- Graphics included
- Fully lagfree
Screenshots
http://img396.imageshack.us/img396/7174 ... hotbb5.png[/img]
Demo
Berans' Interactive Drumkit demo v1.00
Script
Code:
#==============================================================================
#==============================================================================
#Berans' "Interactive drumkit" script v1.11
#Last edited: 24 August 2008
#
#------------------------------------------------------------------------------
#What's new in v1.11
# - Script now features support for "input codes"
# - Added instructions to customize controls
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#
#This script creates an "interactive drumkit" allowing you to play some nice
#beats within your game. It's easy to adapt to your own liking to create
#many different sounds
#
#Credits: Berans - Making the script
# Sniper308 - Providing the graphics and idea for the script
#
#------------------------------------------------------------------------------
#Features
#------------------------------------------------------------------------------
# -Easy set-up
# -Can change drum sounds to anything you like
# -comes with nice graphics
# -Fully lagfree
# -NEW: You can now use the drums to input codes
#------------------------------------------------------------------------------
#Compatibility
#------------------------------------------------------------------------------
#This script does not rewrite any standard methods and does not use any global
#variables. Should be compatible with anything, including the SDK
#
#==============================================================================
#Instructions
#==============================================================================
#
#------------------------------------------------------------------------------
#Setup
#------------------------------------------------------------------------------
# -Download the demo if the script was obtained separately
# -Copy the Audio files in Audio/SE to your own project, and make sure the names
# stay the same. You can provide your own Audio files, but they must be called
# "Tom-1","Tom-2","Tom-3","Hi-Hat" and "Bassdrum" respectively
# -Copy the picture files in Graphics/Pictures to your own project, making sure
# the names stay the same. You can easily change the color of the "lighting"
# effect by changing the color of the objects in "DrumsLights"
# -Import the picture files into your game, making white transparant in both
# files, clearing the semi-transparant color for "Rock Band Drums" and making
# the color of the main objects in "DrumsLights" semi-transparant
#
#------------------------------------------------------------------------------
#Optional
#------------------------------------------------------------------------------
#To change the drum's controls find the lines in the script below with the
#comment "Control" above them and change what's after "Input::"
#The lines correspond to the drums from left to right, followed by the bass drum
#With the standard engine's input module, possibilities to follow Input:: are:
#A,B,C,X,Y,Z,L,R,CTRL,ALT,SHIFT,F5,F6,F7,F8,DOWN,LEFT,UP and RIGHT
#Check the helpfile for what each of these corresponds to on your keyboard.
#This will also help the script functioning with a custom Input module as you
#can customize the controls to take the module into account.
#
#------------------------------------------------------------------------------
#Using the script
#------------------------------------------------------------------------------
# - To call the script, use the "script" command within any event.
# In the script write "$scene = Scene_Drums.new", without the quotes
# - You can change the script call as follows to create a "Ryhtm code" that
# turns on a game switch when entered correctly
# $scene = Scene_Drums.new(switch,code,mode)
# - To use this feature, replace switch with a switch number in the game that
# you want to affect
# Replace code with an "input code" in the following format:
# '14232B23B1' (include the single quotes)
# Where 1-4 correspond to each of the drums from left to right, and B
# corresponds to the pedal
# Finally, you can replace mode by either 0, 1 or 2 to have a different style
# of inputting the code
# mode 0 means that, if you get the code wrong, nothing happens
# mode 1 means that, if you get the code wrong, a sound plays notifying you
# of the wrong input, and the input starts over
# mode 2 means that, if you get the code wrong, a sound plays and the scene
# is quit to map
# leaving mode out automatically uses mode 0
#==============================================================================
#==============================================================================
#==============================================================================
#**Scene_Drums
#------------------------------------------------------------------------------
#This class handles processing for the drums screen
#==============================================================================
class Scene_Drums
#----------------------------------------------------------------------------
#*Object initialization
#----------------------------------------------------------------------------
def initialize(switch = nil,string = nil,mode = 0)
@switch = switch
@string = ''
unless string == nil
@required = string.gsub("\n"){nil}
end
@mode = mode
end
#----------------------------------------------------------------------------
#*Main processing
#----------------------------------------------------------------------------
def main
#Memorize Map/Menu BGM
$game_system.bgm_memorize
#Fade out BGM
$game_system.bgm_fade(2)
#Memorize Map/Menu BGS
$game_system.bgs_memorize
#Fade out BGS
$game_system.bgs_fade(2)
#This keeps track of the animation frames for the drum's lighting effects
@animation = []
#create a value for @animation for each drum
for i in 0...5
@animation.push(-1)
end
#Create spritesets
@spriteset = Spriteset_Map.new
@drums = Spriteset_Drums.new
#Create windows
@help_window = Window_Drumshelp.new
@drumdummy = Drum_Dummy.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@spriteset.dispose
@drums.dispose
@drumdummy.dispose
#Restore Map/Menu BGM
$game_system.bgm_restore
#Restore Map/Menu BGS
$game_system.bgs_restore
end
#----------------------------------------------------------------------------
#*Frame update
#----------------------------------------------------------------------------
def update
if Input.trigger?(Input::B)
$scene = Scene_Map.new
end
if Input.trigger?(Input::F5)
Audio.se_play("Audio/SE/Tom-1",100,100)
@string += '1'
@animation[0] = 0
@drumdummy.refresh(0)
end
if Input.trigger?(Input::F6)
Audio.se_play("Audio/SE/Tom-2",100,100)
@string += '2'
@animation[1] = 0
@drumdummy.refresh(1)
end
if Input.trigger?(Input::F7)
Audio.se_play("Audio/SE/Tom-3",100,100)
@string += '3'
@animation[2] = 0
@drumdummy.refresh(2)
end
if Input.trigger?(Input::F8)
Audio.se_play("Audio/SE/Hi-Hat",100,100)
@string += '4'
@animation[3] = 0
@drumdummy.refresh(3)
end
if Input.trigger?(Input::C)
Audio.se_play("Audio/SE/Bassdrum",100,100)
@string += 'B'
@animation[4] = 0
@drumdummy.refresh(4)
end
#update lighting effects
animation
#Check for code input
if @required != nil
#If mode is free input
if @mode == 0
#If correct code was input
if @string == @required
Audio.se_play('Audio/SE/055-Right01',100,100)
$game_switches[@switch] = true
$scene = Scene_Map.new
end
#If mode is specific input length
elsif @mode == 1
#When string length is correct
if @string.length == @required.length
if @string == @required
Audio.se_play('Audio/SE/055-Right01',100,100)
$game_switches[@switch] = true
$scene = Scene_Map.new
else
Audio.se_play('Audio/SE/057-Wrong01',100,100)
$game_switches[@switch] = false
@string = ''
end
end
#If mode is quit after input length
elsif @mode == 2
#When string length is correct
if @string.length == @required.length
if @string == @required
Audio.se_play('Audio/SE/055-Right01',100,100)
$game_switches[@switch] = true
$scene = Scene_Map.new
else
Audio.se_play('Audio/SE/057-Wrong01',100,100)
$game_switches[@switch] = false
$scene = Scene_Map.new
end
end
end
end
end
#----------------------------------------------------------------------------
#*animation
#----------------------------------------------------------------------------
#Takes care of animating the drum's lighting effects
#----------------------------------------------------------------------------
def animation
for i in 0...@animation.size
if @animation[i] == 0
#Create lighting effect for the drum
@drumdummy.refresh(i)
end
unless @animation[i] == -1
#Progress a frame
@animation[i] += 1
if @animation[i] == 10
#Remove lighting effect
@drumdummy.clear(i)
@animation[i] = -1
end
end
end
end
end
#==============================================================================
#**Window_Drumshelp
#------------------------------------------------------------------------------
#Help window displaying the different input possibilities
#==============================================================================
class Window_Drumshelp < Window_Base
#----------------------------------------------------------------------------
#*Object initialization
#----------------------------------------------------------------------------
def initialize
super(0,0,640,64)
self.contents = Bitmap.new(width - 32, height - 32)
text = ["F5: Drum 1", "F6: Drum 2", "F7: Drum 3", "F8: Hi-Hat", "Enter: Bass"]
w = self.contents.width/text.size
for i in 0...text.size
self.contents.draw_text(i * w,0,w,32,text[i],1)
end
end
end
#==============================================================================
#**Spriteset_Drums
#------------------------------------------------------------------------------
#This class takes care of drawing the drum's graphics onscreen
#==============================================================================
class Spriteset_Drums
#----------------------------------------------------------------------------
#*Object initialization
#----------------------------------------------------------------------------
def initialize
@viewport = Viewport.new(35,95,640,480)
@viewport.z = 5000
@sprite = Sprite.new(@viewport)
@drums = RPG::Cache.picture('Rock Band Drums.png')
@sprite.bitmap = @drums
end
#----------------------------------------------------------------------------
#*Dispose
#----------------------------------------------------------------------------
def dispose
@viewport.dispose
@sprite.dispose
end
end
#==============================================================================
#**Drum_Dummy
#------------------------------------------------------------------------------
#This class draws the drum's lighting effects
#==============================================================================
class Drum_Dummy
#----------------------------------------------------------------------------
#*Object initialization
#----------------------------------------------------------------------------
def initialize
@sprite = []
@lights = RPG::Cache.picture('DrumsLights')
#Create a rect for the drums and pedal
@rect = Rect.new(1,1,130,130)
@rect2 = Rect.new(1,134,130,130)
#create a new bitmap for each drum's lighting effect
for i in 0...5
@sprite[i] = Sprite.new
@sprite[i].bitmap = Bitmap.new(640,480)
@sprite[i].z = 9999
@sprite[i].visible = false
end
end
#----------------------------------------------------------------------------
#*Refresh
#----------------------------------------------------------------------------
def refresh(drum)
#Clear lighting effect to avoid overlap
@sprite[drum].bitmap.clear
case drum
#Get coordinates based on drum
when 0
x = 43
y = 198
when 1
x = 170
y = 99
when 2
x = 335
y = 99
when 3
x = 462
y = 198
when 4
x = 255
y = 371
end
#Create correct effect in the given bitmap
if drum == 4 ? @sprite[drum].bitmap.blt(x,y,@lights,@rect2) :
@sprite[drum].bitmap.blt(x,y,@lights,@rect)
end
#Make lighting effect visible
@sprite[drum].visible = true
end
#----------------------------------------------------------------------------
#*Dispose
#----------------------------------------------------------------------------
def dispose
for i in 0...@sprite.size
@sprite[i].dispose
end
end
#----------------------------------------------------------------------------
#*clear
#----------------------------------------------------------------------------
#Removes the specified drum's lighting effect when called
#----------------------------------------------------------------------------
def clear(drum)
@sprite[drum].bitmap.clear
end
end
Instructions
Instructions in script.
NOTE: Audiofiles and images can be obtained in the demo, this script won't function properly without them
Compatibility
This script does not rewrite any standard methods and does not make use of its own global variables. It should be compatible with anything out there, including the SDK
Credits and Thanks
- Berans - Making the script
- Sniper308 - Inspiring the script and providing the graphics
Author's Notes
Please credit me and sniper308 if you use this in your game. Other than that, have fun with it!
I'm always open for feedback.
Also, there are two ways to access the scene in the demo, both of which are hidden
you'll be able to see them easily in the editor though :p