#==============================================================================
#==============================================================================
#Berans' "Interactive drumkit" script v1.00
#Last edited: 21 August 2008
#
#------------------------------------------------------------------------------
#
#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
#------------------------------------------------------------------------------
#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
# -Insert this script above Main and under the standard scripts
#
#------------------------------------------------------------------------------
#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
#==============================================================================
#==============================================================================
#==============================================================================
#**Scene_Drums
#------------------------------------------------------------------------------
#This class handles processing for the drums screen
#==============================================================================
class Scene_Drums
#----------------------------------------------------------------------------
#*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)
@animation[0] = 0
@drumdummy.refresh(0)
end
if Input.trigger?(Input::F6)
Audio.se_play("Audio/SE/Tom-2",100,100)
@animation[1] = 0
@drumdummy.refresh(1)
end
if Input.trigger?(Input::F7)
Audio.se_play("Audio/SE/Tom-3",100,100)
@animation[2] = 0
@drumdummy.refresh(2)
end
if Input.trigger?(Input::F8)
Audio.se_play("Audio/SE/Hi-Hat",100,100)
@animation[3] = 0
@drumdummy.refresh(3)
end
if Input.trigger?(Input::C)
Audio.se_play("Audio/SE/Bassdrum",100,100)
@animation[4] = 0
@drumdummy.refresh(4)
end
#update lighting effects
animation
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