Ryugo Administrador
Mensagens : 285 Data de inscrição : 30/07/2011 Idade : 25 Localização : São José dos Campos
| Assunto: Scene File V1.0 MogHunter Seg Ago 15, 2011 10:49 am | |
| Scene File V1.0Introdução:Tela de salvar e carregar animado. Possibilidade de definir quantos slots de saves desejar. Instruções:1 - Crie uma pasta com o nome MENUS. (GRAPHICS/MENUS) 2 - Deverão conter as seguintes imagens nesta pasta. Imagens Necessárias3 - Será necessário ter a seguinte imagem na pasta System.ScreenShot- ScreenShot:
Demo:VX_Scene_File.rar Script:- Spoiler:
- Código:
-
#============================================================================== # MOG VX - Scene File V1.0 #============================================================================== # By Moghunter # http://www.atelier-rgss.com/ #============================================================================== # Tela de salvar e carregar animado. #============================================================================== # 1 - Crie uma pasta com o nome de Graphics/Mennus e coloque as seguintes # imagens dentro desta pasta. # # Background.png # Save_Character_Floor.png # Save_Layout01.png # Save_Layout02.png # Save_Window01.png # Save_Window02.png # # 2 - Será necessário ter a seguinte imagem na pasta Graphics/System # # Number_01.png # #============================================================================== module MOG_VX08 #Quantidade de slots de saves. FILES_MAX = 9 end
#============================================================================== # ** Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● draw_picture_number(x,y,value,file_name,align, space, frame_max ,frame_index) #-------------------------------------------------------------------------- # X - Posição na horizontal # Y - Posição na vertical # VALUE - Valor Numérico # FILE_NAME - Nome do arquivo # ALIGN - Centralizar 0 - Esquerda 1- Centro 2 - Direita # SPACE - Espaço entre os números. # FRAME_MAX - Quantidade de quadros(Linhas) que a imagem vai ter. # FRAME_INDEX - Definição do quadro a ser utilizado. #-------------------------------------------------------------------------- def draw_picture_number(x,y,value, file_name,align = 0, space = 0, frame_max = 1,frame_index = 0) number_image = Cache.system(file_name) frame_max = 1 if frame_max < 1 frame_index = frame_max -1 if frame_index > frame_max -1 align = 2 if align > 2 cw = number_image.width / 10 ch = number_image.height / frame_max h = ch * frame_index number = value.abs.to_s.split(//) case align when 0 plus_x = (-cw + space) * number.size when 1 plus_x = (-cw + space) * number.size plus_x /= 2 when 2 plus_x = 0 end for r in 0..number.size - 1 number_abs = number[r].to_i number_rect = Rect.new(cw * number_abs, h, cw, ch) self.contents.blt(plus_x + x + ((cw - space) * r), y , number_image, number_rect) end number_image.dispose end #-------------------------------------------------------------------------- # ● Draw Help Layout #-------------------------------------------------------------------------- def draw_face_save(name,x,y,type) if type == 0 image_name = name + "_0" elsif type == 1 image_name = name + "_1" else image_name = name + "_2" end image = Cache.face(image_name) cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) image.dispose end #-------------------------------------------------------------------------- # draw_parameter_layout #-------------------------------------------------------------------------- def draw_parameter_layout(x,y) image = Cache.menu("Save_Window01") cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) image.dispose end #-------------------------------------------------------------------------- # draw_parameter_layout2 #-------------------------------------------------------------------------- def draw_parameter_layout2(x,y,type) if type == 0 image = Cache.menu("Save_Window02") else image = Cache.menu("Save_Window03") end cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) image.dispose end #-------------------------------------------------------------------------- # draw_character_floor #-------------------------------------------------------------------------- def draw_character_floor(x,y) image = Cache.menu("Save_Character_Floor") cw = image.width ch = image.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x , y , image, src_rect) image.dispose end end #============================================================================== # ** Window_SaveFile #============================================================================== class Window_SaveFile < Window_Base attr_reader :filename attr_reader :file_exist attr_reader :time_stamp attr_reader :selected attr_reader :file_index #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(file_index, filename) super(0, 0,720, 140) self.opacity = 0 @file_index = file_index @filename = filename load_gamedata refresh @selected = false end #-------------------------------------------------------------------------- # * load_gamedata #-------------------------------------------------------------------------- def load_gamedata @time_stamp = Time.at(0) @file_exist = FileTest.exist?(@filename) if @file_exist file = File.open(@filename, "r") @time_stamp = file.mtime begin @characters = Marshal.load(file) @map_name = Marshal.load(file) @frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) @game_system = Marshal.load(file) @game_message = Marshal.load(file) @game_switches = Marshal.load(file) @game_variables = Marshal.load(file) @total_sec = @frame_count / Graphics.frame_rate rescue @file_exist = false ensure file.close end end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh self.contents.clear self.contents.font.color = normal_color xp = 96 ex = 60 if @file_exist draw_parameter_layout2(0,50,0) draw_parameter_layout(-10 + xp,0) value = @file_index + 1 draw_picture_number(13 + xp, 32,value, "Number_01",1,0,3,0) draw_party_characters(180 + xp, 75,ex) draw_playtime(495, 20, contents.width - 4, 2) draw_map_location( 400 + xp,64) draw_level(185 + xp,85,ex) draw_face_save(40 + xp,0) else draw_parameter_layout2(0,50,1) draw_parameter_layout(-10 + xp,0) value = @file_index + 1 draw_picture_number(13 + xp, 32,value, "Number_01",1,0,3,0) self.contents.draw_text(260, 50, 120, 32, "No Data", 1) end end #-------------------------------------------------------------------------- # * draw_face #-------------------------------------------------------------------------- def draw_face_save(x,y) face_name = @characters[0][3] face_index = @characters[0][4] draw_face(face_name, face_index , x, y, 96) end #-------------------------------------------------------------------------- # * draw_level #-------------------------------------------------------------------------- def draw_level(x,y,ex) self.contents.font.color = normal_color for i in 0...@characters.size level = @characters[i][2] draw_picture_number(x + (ex * i) , y ,level, "Number_01",1,0,3,1) end end #-------------------------------------------------------------------------- # * draw_map_location #-------------------------------------------------------------------------- def draw_map_location(x,y) self.contents.font.bold = true self.contents.font.name = "Georgia" self.contents.font.size = 20 self.contents.font.italic = true self.contents.draw_text(x, y, 125, 32, @map_name.to_s, 0) end #-------------------------------------------------------------------------- # * draw_party_characters #-------------------------------------------------------------------------- def draw_party_characters(x, y,ex) for i in 0...@characters.size name = @characters[i][0] index = @characters[i][1] draw_character_floor(- 35 + x + i * ex,y - 20) draw_character(name, index, x + i * ex, y) end end #-------------------------------------------------------------------------- # * draw_playtime #-------------------------------------------------------------------------- def draw_playtime(x, y, width, align) hour = @total_sec / 60 / 60 min = @total_sec / 60 % 60 sec = @total_sec % 60 time_string = sprintf("%02d:%02d:%02d", hour, min, sec) draw_picture_number(x + 18 * 0, y ,0, "Number_01",0,0,3,0) if hour < 10 draw_picture_number(x + 18 * 1, y ,hour, "Number_01",0,0,3,0) draw_picture_number(x + 18 * 3, y ,0, "Number_01",0,0,3,0) if min < 10 draw_picture_number(x + 18 * 4, y ,min, "Number_01",0,0,3,0) draw_picture_number(x + 18 * 6, y ,0, "Number_01",0,0,3,0) if sec < 10 draw_picture_number(x + 18 * 7, y ,sec , "Number_01",0,0,3,0) end #-------------------------------------------------------------------------- # * selected #-------------------------------------------------------------------------- def selected=(selected) @selected = selected end end
#============================================================================== # ** Cache #============================================================================== module Cache #-------------------------------------------------------------------------- # Menu #-------------------------------------------------------------------------- def self.menu(filename) load_bitmap("Graphics/Menus/", filename) end end #============================================================================== # ** Game_Map #============================================================================== class Game_Map attr_reader :name #-------------------------------------------------------------------------- # * setup #-------------------------------------------------------------------------- alias mog_vx06_setup setup def setup(map_id) mog_vx06_setup(map_id) data = load_data("Data/MapInfos.rvdata") @name = data[@map_id].name end end
#============================================================================== # ** Scene_File #==============================================================================
class Scene_File < Scene_Base include MOG_VX08 #-------------------------------------------------------------------------- # * initialize #-------------------------------------------------------------------------- def initialize(saving, from_title, from_event) @saving = saving @from_title = from_title @from_event = from_event @file_max = FILES_MAX @file_max = 1 if FILES_MAX < 1 end #-------------------------------------------------------------------------- # * Start #-------------------------------------------------------------------------- def start super create_layout create_savefile_windows if @saving @index = $game_temp.last_file_index else @index = self.latest_file_index end @check_prev_index = true @savefile_windows[@index].selected = true end #-------------------------------------------------------------------------- # * Create_background #-------------------------------------------------------------------------- def create_layout @background = Plane.new @background.bitmap = Cache.menu("Background") @background.z = 0 @layout_01 = Sprite.new @layout_01.bitmap = Cache.menu("Save_Layout01") @layout_01.z = 1 @layout_01.blend_type = 1 image = Cache.menu("Save_Layout02") @bitmap = Bitmap.new(image.width,image.height) cw = image.width ch = image.height / 2 if @saving h = 0 else h = ch end src_rect = Rect.new(0, h, cw, ch) @bitmap.blt(0,0, image, src_rect) @layout_02 = Sprite.new @layout_02.bitmap = @bitmap @layout_02.z = 3 @layout_02.y = 370 end #-------------------------------------------------------------------------- # * Termination Processing #-------------------------------------------------------------------------- def terminate @background.bitmap.dispose @background.dispose @layout_01.bitmap.dispose @layout_01.dispose @layout_02.bitmap.dispose @layout_02.dispose @bitmap.dispose super dispose_item_windows end #-------------------------------------------------------------------------- # * Return to Original Screen #-------------------------------------------------------------------------- def return_scene if @from_title $scene = Scene_Title.new elsif @from_event $scene = Scene_Map.new else $scene = Scene_Menu.new(4) end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update super update_menu_background update_savefile_windows update_savefile_selection check_start_index end #-------------------------------------------------------------------------- # * check_start_index #-------------------------------------------------------------------------- def check_start_index return if @check_prev_index == false @check_prev_index = false check_active_window end #-------------------------------------------------------------------------- # * check_active_window #-------------------------------------------------------------------------- def check_active_window @index = 0 if @index == nil for i in 0...@file_max @pw = @index - 1 @pw = 0 if @pw > @file_max - 1 @pw = @file_max- 1 if @pw < 0 @aw = @index @nw = @index + 1 @nw = 0 if @nw > @file_max - 1 @nw = @file_max - 1 if @nw < 0 case @savefile_windows[i].file_index when @pw,@nw @savefile_windows[i].visible = true @savefile_windows[i].contents_opacity = 100 when @aw @savefile_windows[i].visible = true @savefile_windows[i].contents_opacity = 255 else @savefile_windows[i].visible = false end end end #-------------------------------------------------------------------------- # * Create Save File Window #-------------------------------------------------------------------------- def create_savefile_windows @pw_pos = [-160,32] @aw_pos = [-96,160] @nw_pos = [-32,288] @savefile_windows = [] for i in 0...@file_max @savefile_windows[i] = Window_SaveFile.new(i, make_filename(i)) @savefile_windows[i].z = 2 @savefile_windows[i].visible = false @savefile_windows[i].x = 400 end check_active_window @item_max = @file_max end #-------------------------------------------------------------------------- # * Dispose of Save File Window #-------------------------------------------------------------------------- def dispose_item_windows for window in @savefile_windows window.dispose end end #-------------------------------------------------------------------------- # * Update Save File Window #-------------------------------------------------------------------------- def update_savefile_windows update_slide_window for window in @savefile_windows window.update end end #-------------------------------------------------------------------------- # * update_slide_window #-------------------------------------------------------------------------- def update_slide_window @background.ox += 1 slide_window_x(@pw,@pw_pos[0]) slide_window_x(@aw,@aw_pos[0]) slide_window_x(@nw,@nw_pos[0]) slide_window_y(@pw,@pw_pos[1]) slide_window_y(@aw,@aw_pos[1]) slide_window_y(@nw,@nw_pos[1]) end #-------------------------------------------------------------------------- # * slide_window_x #-------------------------------------------------------------------------- def slide_window_x(i,x_pos) if @savefile_windows[i].x < x_pos @savefile_windows[i].x += 15 @savefile_windows[i].x = x_pos if @savefile_windows[i].x > x_pos end if @savefile_windows[i].x > x_pos @savefile_windows[i].x -= 15 @savefile_windows[i].x = x_pos if @savefile_windows[i].x < x_pos end end #-------------------------------------------------------------------------- # * slide_window_y #-------------------------------------------------------------------------- def slide_window_y(i,y_pos) if @savefile_windows[i].y < y_pos @savefile_windows[i].y += 15 @savefile_windows[i].y = y_pos if @savefile_windows[i].y > y_pos end if @savefile_windows[i].y > y_pos @savefile_windows[i].y -= 15 @savefile_windows[i].y = y_pos if @savefile_windows[i].y < y_pos end end #-------------------------------------------------------------------------- # * reset_position #-------------------------------------------------------------------------- def reset_position(diretion) check_active_window case diretion when 0 @savefile_windows[@pw].y = -64 @savefile_windows[@pw].x = 0 when 1 @savefile_windows[@nw].y = 440 @savefile_windows[@nw].x = 0 end end #-------------------------------------------------------------------------- # * Update Save File Selection #-------------------------------------------------------------------------- def update_savefile_selection if Input.trigger?(Input::C) determine_savefile elsif Input.trigger?(Input::B) Sound.play_cancel return_scene else last_index = @index if Input.trigger?(Input::DOWN) cursor_down(Input.trigger?(Input::DOWN)) if @file_max > 2 reset_position(1) else reset_position(0) end end if Input.trigger?(Input::UP) cursor_up(Input.trigger?(Input::UP)) reset_position(0) end if @index != last_index Sound.play_cursor @savefile_windows[last_index].selected = false @savefile_windows[@index].selected = true end end end #-------------------------------------------------------------------------- # * Confirm Save File #-------------------------------------------------------------------------- def determine_savefile if @saving Sound.play_save do_save else if @savefile_windows[@index].file_exist Sound.play_load do_load else Sound.play_buzzer return end end $game_temp.last_file_index = @index end #-------------------------------------------------------------------------- # * Move cursor down #-------------------------------------------------------------------------- def cursor_down(wrap) if @index < @item_max - 1 or wrap @index = (@index + 1) % @item_max end end #-------------------------------------------------------------------------- # * Move cursor up #-------------------------------------------------------------------------- def cursor_up(wrap) if @index > 0 or wrap @index = (@index - 1 + @item_max) % @item_max end end #-------------------------------------------------------------------------- # * Create Filename #-------------------------------------------------------------------------- def make_filename(file_index) return "Save#{file_index + 1}.rvdata" end #-------------------------------------------------------------------------- # * Select File With Newest Timestamp #-------------------------------------------------------------------------- def latest_file_index index = 0 latest_time = Time.at(0) for i in 0...@file_max if @savefile_windows[i].time_stamp > latest_time latest_time = @savefile_windows[i].time_stamp index = i end end return index end #-------------------------------------------------------------------------- # * Execute Save #-------------------------------------------------------------------------- def do_save file = File.open(@savefile_windows[@index].filename, "wb") write_save_data(file) file.close return_scene end #-------------------------------------------------------------------------- # * Execute Load #-------------------------------------------------------------------------- def do_load file = File.open(@savefile_windows[@index].filename, "rb") read_save_data(file) file.close $scene = Scene_Map.new RPG::BGM.fade(1500) Graphics.fadeout(60) Graphics.wait(40) @last_bgm.play @last_bgs.play end #-------------------------------------------------------------------------- # * write_save_data #-------------------------------------------------------------------------- def write_save_data(file) characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index, actor.level,actor.face_name, actor.face_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id map_name = $game_map.name @last_bgm = RPG::BGM::last @last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(map_name, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(@last_bgm, file) Marshal.dump(@last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) end #-------------------------------------------------------------------------- # * read_save_data #-------------------------------------------------------------------------- def read_save_data(file) characters = Marshal.load(file) map_name = Marshal.load(file) Graphics.frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) $game_system = Marshal.load(file) $game_message = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end end end
$mog_rgssvx_scene_file = true Créditos:MogHunter por criar o script. Eu: por disponibilizar aqui. | |
|