#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
# This class performs title screen processing.
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# If battle test
if $BTEST
battle_test
return
end
# Load database
$data_actors = load_data("Data/Actors.rxdata")
$data_classes = load_data("Data/Classes.rxdata")
$data_skills = load_data("Data/Skills.rxdata")
$data_items = load_data("Data/Items.rxdata")
$data_weapons = load_data("Data/Weapons.rxdata")
$data_armors = load_data("Data/Armors.rxdata")
$data_enemies = load_data("Data/Enemies.rxdata")
$data_troops = load_data("Data/Troops.rxdata")
$data_states = load_data("Data/States.rxdata")
$data_animations = load_data("Data/Animations.rxdata")
$data_tilesets = load_data("Data/Tilesets.rxdata")
$data_common_events = load_data("Data/CommonEvents.rxdata")
$data_system = load_data("Data/System.rxdata")
# Make system object
$game_system = Game_System.new
# Make title graphic
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
# Make command window
s1 = "New Game"
s2 = "Continue"
s3 = "Shutdown"
@command_window = Window_Command.new(192, [s1, s2, s3])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 288
# Continue enabled determinant
# Check if at least one save file exists
# If enabled, make @continue_enabled true; if disabled, make it false
@continue_enabled = false
for i in 0..3
if FileTest.exist?("Save#{i+1}.rxdata")
@continue_enabled = true
end
end
# If continue is enabled, move cursor to "Continue"
# If disabled, display "Continue" text in gray
if @continue_enabled
@command_window.index = 1
else
@command_window.disable_item(1)
end
# Play title BGM
$game_system.bgm_play($data_system.title_bgm)
# Stop playing ME and BGS
Audio.me_stop
Audio.bgs_stop
# Execute transition
Graphics.transition
# Main loop
loop do
# Update game screen
Graphics.update
# Update input information
Input.update
# Frame update
update
# Abort loop if screen is changed
if $scene != self
break
end
end
# Prepare for transition
Graphics.freeze
# Dispose of command window
@command_window.dispose
# Dispose of title graphic
@sprite.bitmap.dispose
@sprite.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update command window
@command_window.update
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 0 # New game
command_new_game
when 1 # Continue
command_continue
when 2 # Shutdown
command_shutdown
end
end
end
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Stop BGM
Audio.bgm_stop
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each type of game object
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# Set up initial party
$game_party.setup_starting_members
# Set up initial map position
$game_map.setup($data_system.start_map_id)
# Move player to initial position
$game_player.moveto($data_system.start_x, $data_system.start_y)
# Refresh player
$game_player.refresh
# Run automatic change for BGM and BGS set with map
$game_map.autoplay
# Update map (run parallel process event)
$game_map.update
# Switch to map screen
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Command: Continue
#--------------------------------------------------------------------------
def command_continue
# If continue is disabled
unless @continue_enabled
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to load screen
$scene = Scene_Load.new
end
#--------------------------------------------------------------------------
# * Command: Shutdown
#--------------------------------------------------------------------------
def command_shutdown
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Fade out BGM, BGS, and ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# Shutdown
$scene = nil
end
#--------------------------------------------------------------------------
# * Battle Test
#--------------------------------------------------------------------------
def battle_test
# Load database (for battle test)
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each game object
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# Set up party for battle test
$game_party.setup_battle_test_members
# Set troop ID, can escape flag, and battleback
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Switch to battle screen
$scene = Scene_Battle.new
end
end
#==============================================================================
# Dynamic Sound Emissions
# Version: 1.0
# Author: Modern Algebra
# Date: August 27, 2007
#------------------------------------------------------------------------------
# Description:
# This script allows you to set an object in the map which emits a sound. What
# this script does is set the volume of that sound according to how close you
# are to the object. If you are far away, the sound will be faint, if you are
# close the sound will be loud. Sorry, in this version there can be only one
# object per map.
#------------------------------------------------------------------------------
# Instructions:
# To set the objects which emit sound for each map, see below.
#------------------------------------------------------------------------------
# ** Data_Sound_Emission
# This class holds all of the objects which emit any sound, for all maps
#==============================================================================
class Data_Sound_Emission
#-------------------------------------------------------------------------
# * Public Instance Variables
#-------------------------------------------------------------------------
attr_reader :emissions
#-------------------------------------------------------------------------
# * Object Initialization
#-------------------------------------------------------------------------
def initialize
@emissions = []
#----------------------------------------------------------------------
# * Editable Region
#----------------------------------------------------------------------
# Place all sound emitting objects here. Write it like this:
#
# @emissions[map_id] = Sound_Emission.new
# @emissions[map_id].setup (x,y,width,height,radius,bgs,pitch)
#
# Where map_id is the ID of the map you want the object to appear on,
# x and y are the x and y positions of the upper-left corner of the object,
# width is the amount of squares in the x direction that the object covers,
# height is the amount of squares in the y direction that the object
# covers, radius is the number of squares away you want the sound to be
# hears, bgs is the bgs you want to play, and pitch is the pitch value
#-----------------------------------------------------------------------
@emissions[5] = Sound_Emission.new
@emissions[5].setup (29,1,6,50,10,'010-River01',100)
#-----------------------------------------------------------------------
# * END Editable Region
#-----------------------------------------------------------------------
end
end
#==============================================================================
# ** Sound Emitting Object
#------------------------------------------------------------------------------
# This class holds all the relevant data for the object which is emitting the
# sound. It is accessed through $game_dynamic_sound_emission
#==============================================================================
class Sound_Emission
#-------------------------------------------------------------------------
# * Public Instance Variables
#-------------------------------------------------------------------------
attr_reader :bgs
attr_reader :radius
attr_reader :pitch
#-------------------------------------------------------------------------
# * Object Initialization
#-------------------------------------------------------------------------
def setup (x, y, width, height, radius, bgs, pitch)
@rect = Rect.new (x*128, y*128, (width-1)*128, (height-1)*128)
@radius = radius*128
@bgs = bgs
@pitch = pitch
end
#-------------------------------------------------------------------------
# * Volume
# Checks position to determine the appropriate volume.
#-------------------------------------------------------------------------
def volume (x, y)
# Determine distance between position and the sound emitting object
distance = [x - @rect.x, y - @rect.y]
testers = [@rect.width, @rect.height]
for i in 0...2 # For both the x distance and the y distance
# Determine total distance in that direction from the object
if distance[i] > 0 # IF you are to the right of the object
# Take into account the width of the object
if distance[i] <= testers[i] # If you are above or beside the object
# Neglect the distance in that direction
distance[i] = 0
else
# Subtract the width to determine the closest row or column
distance[i] -= testers[i]
end
else
# Make the value positive
distance[i] *= -1
end
end
# Calculate the total distance
total_distance = distance[0] + distance[1]
ratio = (total_distance.to_f / @radius.to_f)*100 # Get the percentage
ratio = [ratio,100].min
ratio = 100 - ratio
return ratio
end
end
#==============================================================================
# ** Scene Title
#==============================================================================
class Scene_Title
#-------------------------------------------------------------------------
# * Alias Main to initialize the data class upon startup
#-------------------------------------------------------------------------
alias add_data_emissions main
def main
# Initialize $data_sound_objects
$data_sound_objects = Data_Sound_Emission.new
add_data_emissions
end
end
#==============================================================================
# ** Game Player
#==============================================================================
class Game_Player
#-------------------------------------------------------------------------
# * Alias update to play the BGS
#-------------------------------------------------------------------------
alias update_volume update
def update
update_volume
if $data_sound_objects.emissions[$game_map.map_id] != nil
emitter = $data_sound_objects.emissions[$game_map.map_id]
volume = emitter.volume (@real_x, @real_y)
bgs = RPG::AudioFile.new (emitter.bgs,volume,emitter.pitch)
if volume != 0
$game_system.bgs_play (bgs)
else
Audio.bgs_stop
end
end
end
end