Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # Zer0 Advanced Title
- # Author: ForeverZer0
- # Version: 2.0
- # Date: 10.03.2010
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # Version History
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # Version 1.0 (3.14.2010)
- # - Original write
- #
- # Version 1.1 (3.18.2010)
- # - Fixed a bug that would crash the game if you tried to return to the Title
- # Screen from the load screen when using the Load Transition.
- #
- # Version 1.2 (3.21.2010)
- # - Added a part to pre-cache all the bitmaps before the animation begins,
- # which should drastically reduce the possibility of lagging.
- #
- # Version 2.0 (10.03.2010)
- # - Totally re-written from scratch.
- # - Eliminated the unprofessional 'flicker' that would occur if the database
- # had an image defined for the title graphic.
- # - Improved performance, compatibility, overview, and configurability.
- # - Added Features:
- # - More options to how animations operate, with easier configuration.
- # - Added scene linker to easily add new commands to the title window.
- # - Added config to work with custom save systems.
- # - Add option to display text on the background.
- # - Window appearance can now be easily changed.
- #
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- #
- # Compatibility:
- # - Should be compatible with just about anything other than scripts that
- # add animation, etc. to the Title screen
- # - Compatible with SDK
- #
- # Explanation:
- # This system will allow you alter the title screen and add some different
- # effects that are not normally available.
- #
- # Features:
- # - Animated Title
- # - Easy display of picture on screen and/or over animation
- # - Random Title Screen each load
- # - Transition Effect on loading saved games
- # - Weather/Fog Effects
- # - BGS and SFX
- # - Window configuration.
- #
- # Instructions:
- # - All the below configurable values can be set to nil to disable the feature
- # with the exception of SAVE_DATA. It is already configured to the default
- # system so leave it alone if you are not using a custom save system.
- # - If using the animated title, all pictures need to be named exactly the
- # the same, but have a different number at the end. The numbers should be
- # consecutive and in the order that the animation should follow. The first
- # image should be 0. (Ex. pic0, pic1, pic2, pic3, etc.)
- # - Configuration is below. Individual explanation for the settings is in
- # their respective sections. All Graphics, Fogs, SFX, BGS, etc. that you use
- # need to be in their normal folders.
- #
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- $zer0_adv_title = 2.0
- #===============================================================================
- # ** Scene_Title
- #===============================================================================
- class Scene_Title
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- # BEGIN CONFIGURATION
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- ANIMATED = ['Globe ', 40, 4]
- # ['FILENAME', NUMBER_IMAGES, SPEED]
- ANIMATION_TYPE = 0
- # 0 = Do not loop. Run through images and stop on last one.
- # 1 = Changes back to first image after running course, then repeats.
- # 2 = Cycles backwards to the first image after running course, then repeats.
- # 3 = Continually shift through all the files in "Titles" folder randomly.
- CHANGE_SE = nil
- # ['FILENAME', VOLUME, PITCH]
- # Sound effect played when the image changes.
- RANDOM_BACKGROUNDS = true
- # Uses a random image for the title each load if ANIMATED is nil. There is no
- # need to configure the graphics. Any/all images from the "Titles" folder will
- # be used.
- WEATHER = nil # [1, 20]
- # [TYPE, POWER]
- # Weather effect to be used on title screen.
- FOG = nil # ['001-Fog01', 0, 2, -2, 3, 60]
- # ['FILENAME', HUE, X-SPEED, Y-SPEED, ZOOM, OPACITY]
- # Fog to be displayed on the title screen.
- BGS = nil # ['032-Switch01', 100, 100]
- # ['FILENAME', VOLUME, PITCH]
- # Background sound to be played during title.
- PIC = ['Title Pic', 0, 0, 3001, 0, true, 2]
- # ['NAME', X, Y, Z, OPACITY, FADE-IN?, FADE-IN SPEED]
- # Picture to be displayed on title screen.
- SAVE_DATA = ['Save', '.rxdata', 4, '']
- # ['SAVENAMES', 'SAVE_EXTENSION', SAVE_NUMBER, SAVE_DIRECTORY]
- # If you are using a custom save system that alters the name of the save files,
- # extension, or number of possible save files, configure this to match.
- # DO NOT SET THIS VALUE TO NIL!
- LOAD_OUT = ['010-Random02', 60, 40]
- LOAD_IN = ['012-Random04', 60, 40]
- # ['TRANSITION NAME', DURATION, VAGUE]
- # Transitions used from the load screen, and when game starts. Can use both or
- # only one.
- TEXT = ["Zer0 Advanced Title v.#$zer0_adv_title", 8, 460, 'Arial Black', 18]
- # ['STRING', X, Y, FONTNAME, FONTSIZE]
- # Have text be displayed on the images such as the version number, etc.
- TEXT_COLOR = Color.new(255, 113, 12, 255)
- # [RED, GREEN, BLUE, ALPHA]
- # Color used for the text if being used. White is default.
- WINDOW_DATA = [512, 352, 255, 128, false]
- # [X, Y, OPACITY, WIDTH, SHOW_WINDOWSKIN?]
- # Coordinates used for the main window. Default settings will be used if nil.
- COMMANDS = ['New Game', 'Continue', 'Options']
- # Strings used for the commands on the title screen. Omitting the third item
- # in the array will also effectively get rid of the "Shutdown" option that
- # many do not like for its uselessness.
- def _SCENE_LINK(command_index)
- # Configure here any scenes you would like to link to the Title screen. You
- # must first configure the name of the command in COMMANDS. After that, just
- # fill in the name of the scene for the proper index. Any command index left
- # undefined will be assumed to be a 'Shutdown' option.
- # ex. when 2 then Scene_MyOptions
- # Will make the third command (index starts at 0) start the defined scene.
- # Do not configue anything for index 0 or 1. It will not work. They are
- # reserved for 'New Game' and 'Continue'.
- return case command_index
- when 2 then Scene_End
- end
- end
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- # END CONFIGURATION
- #=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
- 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')
- # Create an instance of Game_System and a few other instance variables
- $game_system, @sprites, @bitmaps = Game_System.new, [], []
- # Create list of filenames of images found in Titles directory.
- @files = Dir.entries('Graphics/Titles').find_all {|file|
- ['.png', '.jpg'].include?(File.extname(file)) }
- # Play BGS if defined.
- # Stop playing ME and BGS (for when returning to title from game)
- Audio.me_stop
- if BGS != nil
- $game_system.bgs_play(RPG::AudioFile.new(BGS[0], BGS[1], BGS[2]))
- end
- # Play title BGM
- $game_system.bgm_play($data_system.title_bgm)
- # Prepare bitmap(s) for the backgound graphic.
- if ANIMATED != nil
- if ANIMATION_TYPE != 3
- (0...ANIMATED[1]).each {|i|
- # Pre-cache the graphics now to prevent lag during animation.
- @bitmaps[i] = RPG::Cache.title("#{ANIMATED[0]}#{i}") }
- else
- @files.each {|file| @bitmaps.push(RPG::Cache.title(file)) }
- end
- @count, @index, @reverse = 0, 0, false
- # Create the audio file for later use if needed.
- if CHANGE_SE != nil
- @se = RPG::AudioFile.new(CHANGE_SE[0], CHANGE_SE[1], CHANGE_SE[2])
- end
- elsif RANDOM_BACKGROUNDS
- # Cache a random image from the array.
- @bitmaps.push(RPG::Cache.title(@files[rand(@files.size)]))
- else
- # Else use the bitmap defined in the database.
- @bitmaps.push(RPG::Cache.title($data_system.title_name))
- end
- # Create weather sprite if needed.
- if WEATHER != nil
- @weather = RPG::Weather.new
- @weather.type, @weather.max = WEATHER[0], WEATHER[1]
- @sprites.push(@weather)
- end
- # Create Fog sprite if needed.
- if FOG != nil
- @fog = Plane.new
- @fog.bitmap = RPG::Cache.fog(FOG[0], FOG[1])
- @fog.z, @fog.opacity = 3000, FOG[5]
- @fog.zoom_x = @fog.zoom_y = FOG[4]
- end
- # Create picture graphic if needed.
- if PIC != nil
- @picture = Sprite.new
- @picture.bitmap = RPG::Cache.picture(PIC[0])
- @picture.x, @picture.y, @picture.z = PIC[1], PIC[2], PIC[3]
- @picture.opacity = PIC[4]
- @sprites.push(@picture)
- end
- # Draw text on background image(s) if configured.
- if TEXT != nil
- @bitmaps.each {|bitmap|
- bitmap.font.name, bitmap.font.size = TEXT[3], TEXT[4]
- if TEXT_COLOR.is_a?(Color)
- bitmap.font.color = TEXT_COLOR
- end
- bitmap.draw_text(TEXT[1], TEXT[2], 640, TEXT[4]+8, TEXT[0])
- }
- end
- # Set graphic to background.
- @background = Sprite.new
- @background.bitmap = @bitmaps[0]
- # Create command window.
- commands = COMMANDS == nil ? ['New Game', 'Continue', 'Shutdown'] : COMMANDS
- if WINDOW_DATA != nil
- @command_window = Window_Command.new(WINDOW_DATA[3], commands)
- @command_window.back_opacity = WINDOW_DATA[2]
- @command_window.x, @command_window.y = WINDOW_DATA[0], WINDOW_DATA[1]
- unless WINDOW_DATA[4]
- @command_window.opacity = 0
- end
- else
- @command_window = Window_Command.new(192, commands)
- @command_window.y, @command_window.back_opacity = 288, 160
- @command_window.x = 320 - @command_window.width / 2
- end
- # Determine if any save files exist.
- filenames = []
- (1..SAVE_DATA[2]).each {|i|
- filenames.push("#{SAVE_DATA[3]}#{SAVE_DATA[0]}#{i}#{SAVE_DATA[1]}") }
- @continue_enabled = filenames.any? {|filename| File.exist?(filename) }
- # Disable 'Continue' if no save files are found.
- if @continue_enabled
- @command_window.index = 1
- else
- @command_window.disable_item(1)
- end
- @sprites.push(@command_window, @background)
- # Transition the graphics.
- Graphics.transition
- # Main loop
- loop { Graphics.update; Input.update; update; break if $scene != self }
- # Prepare for transition.
- Graphics.freeze
- Audio.bgs_stop
- # Dispose the bitmaps, sprites, etc.
- (@sprites + @bitmaps).each {|object| object.dispose }
- @fog.dispose if @fog != nil
- # Clear Cache to free the graphics from the memory.
- RPG::Cache.clear
- end
- #-----------------------------------------------------------------------------
- def update
- # Update the sprites.
- @sprites.each {|sprite| sprite.update }
- # Scroll fog if needed.
- if @fog != nil
- @fog.ox += FOG[2]
- @fog.oy += FOG[3]
- end
- # Update picture if needed.
- if @picture != nil && @picture.opacity != 255 && PIC[5]
- @picture.opacity += PIC[6]
- end
- # Update animation if needed.
- if ANIMATED != nil
- @count += 1
- if @count == ANIMATED[2]
- case ANIMATION_TYPE
- when 0 # No looping
- @index += 1
- when 1 # Re-Start
- @index = (@index + 1) % ANIMATED[1]
- when 2 # Reverse Cycle
- @index += @reverse ? -1 : 1
- # Change reverse flag when needed.
- if @index == 0
- @reverse = false
- elsif @index == ANIMATED[1]
- @reverse = true
- end
- when 3 # Random Image
- old = @index
- @index = rand(@bitmaps.size)
- # Ensure images don't repeat consecutively.
- @index += 1 if old == @index
- end
- # Make sure bitmap index stays within permissible range.
- @index = [[@index, 0].max, ANIMATED[1]-1].min
- # Alter the image to the new bitmap.
- @background.bitmap = @bitmaps[@index]
- # Play the change SE if needed.
- if @se != nil
- $game_system.se_play(@se)
- end
- # Reset count.
- @count = 0
- end
- end
- # If C button was pressed
- if Input.trigger?(Input::C)
- # Branch by command window cursor position
- case @command_window.index
- when 0 then command_new_game
- when 1 then command_continue
- else
- scene = _SCENE_LINK(@command_window.index)
- scene == nil ? command_shutdown : $scene = scene.new
- end
- end
- end
- end
- #===============================================================================
- # ** Scene_Load
- #===============================================================================
- class Scene_Load < Scene_File
- alias zer0_adv_title_main main
- def main
- zer0_adv_title_main
- # Only if next scene is Scene_Map.
- if $scene.is_a?(Scene_Map)
- # Set data in local variables.
- tran_out, tran_in = Scene_Title::LOAD_OUT, Scene_Title::LOAD_IN
- folder = 'Graphics/Transitions/'
- # Play "out" transition if so configured.
- if tran_out != nil
- Graphics.transition(tran_out[1], folder + tran_out[0], tran_out[2])
- Graphics.freeze
- end
- # Play "in" transition if so configured.
- if tran_in != nil
- # Create an instance of the map sprite.
- map = Spriteset_Map.new
- Graphics.transition(tran_in[1], folder + tran_in[0], tran_in[2])
- Graphics.freeze
- # Dispose sprite.
- map.dispose
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement