#============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 # 作者:chaochao+66rpg的66 #============================================================================== #============================================================================== #■ Scene_Title #------------------------------------------------------------------------------ # 处理标题画面的类。 #============================================================================== class Scene_Title WEATHER = 4 # 使用自定义效果(0:无,1:雨,2:暴风雨,3:雪,4:自定义) MAXNUMBER = 18 # 天气图片数量 WEATHER_FILE = "Graphics/Pictures/Title_starlong.png" # 自定义图片路径,这个文件可以从黑暗圣剑DEMO获得,是流星雨 BLEND_TYPE = 0 # 合成方式(0:普通,1:加法,2:减法) WEATHER_X = 5 # X方向每回合减少象素 WEATHER_Y = 5 # Y方向每回合减少象素 WEATHER_OPACITY = 2 #每回合减低透明度 START_OPACITY = 200 #出现时的透明度 RAND_X = 1200 # 随机X范围 RAND_Y = 600 # 随机Y范围 HEIGHT = -600 # 出现时候的屏幕Y WIDTH = 100 # 出现时候的屏幕X #-------------------------------------------------------------------------- # ● 主处理 #-------------------------------------------------------------------------- def main if $BTEST battle_test return end $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") $game_system = Game_System.new # 生成标题图形 @sprite = Sprite.new @sprite.bitmap = RPG::Cache.title($data_system.title_name) @ox = 0 @oy = 0 color1 = Color.new(255,255,255, 255) color2 = Color.new(255, 255, 255, 128) @rain_bitmap = Bitmap.new(7, 56) for i in 0..6 @rain_bitmap.fill_rect(6-i, i*8, 1, 8, color1) end @storm_bitmap = Bitmap.new(34, 64) for i in 0..31 @storm_bitmap.fill_rect(33-i, i*2, 1, 2, color2) @storm_bitmap.fill_rect(32-i, i*2, 1, 2, color1) @storm_bitmap.fill_rect(31-i, i*2, 1, 2, color2) end @snow_bitmap = Bitmap.new(6, 6) @snow_bitmap.fill_rect(0, 1, 6, 4, color2) @snow_bitmap.fill_rect(1, 0, 4, 6, color2) @snow_bitmap.fill_rect(1, 2, 4, 2, color1) @snow_bitmap.fill_rect(2, 1, 2, 4, color1) @sprites = [] for i in 1..40 sprite = Sprite.new case WEATHER when 1 sprite.bitmap = @rain_bitmap when 2 sprite.bitmap = @storm_bitmap when 3 sprite.bitmap = @snow_bitmap when 4 sprite.bitmap = Bitmap.new(WEATHER_FILE) end sprite.z = 1000 sprite.x = -1000 sprite.y = -1000 sprite.visible = (i <= MAXNUMBER) sprite.blend_type = BLEND_TYPE sprite.opacity = START_OPACITY @sprites.push(sprite) end weather_update # 生成标题图形 @sprite = [Sprite.new] for i in 0..6 @sprite[i] = Sprite.new @sprite[i].opacity = 0 end @sprite[0].bitmap = RPG::Cache.title($data_system.title_name) @sprite[0].opacity = 0 #开始游戏的图片 @sprite[1].bitmap = Bitmap.new("Graphics/Pictures/1.png") @sprite[2].bitmap = Bitmap.new("Graphics/Pictures/2.png") #继续游戏的图片 @sprite[3].bitmap = Bitmap.new("Graphics/Pictures/3.png") @sprite[4].bitmap = Bitmap.new("Graphics/Pictures/4.png") #结束游戏的图片 @sprite[5].bitmap = Bitmap.new("Graphics/Pictures/5.png") @sprite[6].bitmap = Bitmap.new("Graphics/Pictures/6.png") #图片位置 for i in 1..6 x=465 y=(i+1)/2*35+313 @sprite[i].x =x @sprite[i].y =y end @continue_enabled = false for i in 0..3 if FileTest.exist?("Save#{i+1}.rxdata") @continue_enabled = true end end if @continue_enabled @command_index = 1 else @command_index = 0 @sprite[4].bitmap = Bitmap.new("Graphics/Pictures/3.png") end $game_system.bgm_play($data_system.title_bgm) Audio.me_stop Audio.bgs_stop Graphics.transition loop do Graphics.update #淡出背景圖形 if @sprite[0].opacity <= 255 @sprite[0].opacity += 15 end Input.update update if $scene != self break end end Graphics.freeze # 釋放圖形 for i in 0..6 @sprite[i].bitmap.dispose @sprite[i].dispose end for sprite in @sprites sprite.dispose end @rain_bitmap.dispose @storm_bitmap.dispose @snow_bitmap.dispose end #-------------------------------------------------------------------------- # ● 刷新天气 #-------------------------------------------------------------------------- def weather_update return if WEATHER == 0 for i in 1..MAXNUMBER sprite = @sprites[i] if sprite == nil break end if WEATHER == 1 sprite.x -= 2 sprite.y += 16 sprite.opacity -= 8 end if WEATHER == 2 sprite.x -= 8 sprite.y += 16 sprite.opacity -= 12 end if WEATHER == 3 sprite.x -= 2 sprite.y += 8 sprite.opacity -= 8 end if WEATHER == 4 sprite.x -= WEATHER_X sprite.y += WEATHER_Y sprite.opacity -= WEATHER_OPACITY end x = sprite.x - @ox y = sprite.y - @oy if sprite.opacity < 32 or x < -100 or x > 750 or y < -1000 or y > 500 sprite.x = rand(RAND_X) + WIDTH + @ox sprite.y = rand(RAND_Y) + HEIGHT + @oy sprite.opacity = START_OPACITY end end end def update chaochaocommandchaochao if Input.trigger?(Input::C) case @command_index when 0 command_new_game when 1 command_continue when 2 command_shutdown end end weather_update end def chaochaocommandchaochao if Input.trigger?(Input::UP) @command_index -= 1 if @command_index < 0 @command_index = 2 end $game_system.se_play($data_system.cursor_se) end if Input.trigger?(Input::DOWN) @command_index += 1 if @command_index > 2 @command_index = 0 end $game_system.se_play($data_system.cursor_se) end case @command_index when 0 if @sprite[1].opacity >= 0 @sprite[1].opacity -= 30 end if @sprite[2].opacity <= 240 @sprite[2].opacity += 30 end if @sprite[3].opacity <= 210 @sprite[3].opacity += 30 end if @sprite[4].opacity >= 0 @sprite[4].opacity -= 30 end if @sprite[5].opacity <= 210 @sprite[5].opacity += 30 end if @sprite[6].opacity >= 0 @sprite[6].opacity -= 30 end when 1 if @sprite[1].opacity <= 210 @sprite[1].opacity += 30 end if @sprite[2].opacity >= 0 @sprite[2].opacity -= 30 end if @sprite[3].opacity >= 0 @sprite[3].opacity -= 30 end if @sprite[4].opacity <= 240 @sprite[4].opacity += 30 end if @sprite[5].opacity <= 210 @sprite[5].opacity += 30 end if @sprite[6].opacity >= 0 @sprite[6].opacity -= 30 end when 2 if @sprite[1].opacity <= 210 @sprite[1].opacity += 30 end if @sprite[2].opacity >= 0 @sprite[2].opacity -= 30 end if @sprite[3].opacity <= 210 @sprite[3].opacity += 30 end if @sprite[4].opacity >= 0 @sprite[4].opacity -= 30 end if @sprite[5].opacity >= 0 @sprite[5].opacity -= 30 end if @sprite[6].opacity <= 240 @sprite[6].opacity += 30 end end end end # ———————————————————————————————————— # 本脚本来自www.66rpg.com,转载请保留此信息 # ———————————————————————————————————— class Interpreter BOOK_READING = 50 # 默认打开50开关后进入读书系统 #-------------------------------------------------------------------------- # ● 显示文章 #-------------------------------------------------------------------------- def command_101 # 另外的文章已经设置过 message_text 的情况下 if $game_temp.message_text != nil # 结束 return false end # 设置信息结束后待机和返回调用标志 @message_waiting = true $game_temp.message_proc = Proc.new { @message_waiting = false } # message_text 设置为 1 行 $game_temp.message_text = @list[@index].parameters[0] + "\n" line_count = 1 # 循环 loop do # 下一个事件指令为文章两行以上的情况 if $game_switches[BOOK_READING] and @list[@index+1].code == 101#阅读书刊报纸 unless $game_temp.in_battle $scene.message_window.height = 320 $scene.message_window.contents = Bitmap.new($scene.message_window.width - 32, $scene.message_window.height - 32) $scene.message_window.contents.font.size = 20 $game_temp.message_text += @list[@index+1].parameters[0] +"\n" line_count+=1 @index+=1 end end if $game_switches[BOOK_READING]==false unless $game_temp.in_battle if $scene.message_window.height == 320 $scene.message_window.height = 160 $scene.message_window.contents = Bitmap.new($scene.message_window.width - 32, $scene.message_window.height - 32) $scene.message_window.contents.font.size = 22 end end end if @list[@index+1].code == 401 # message_text 添加到第 2 行以下 $game_temp.message_text += @list[@index+1].parameters[0] + "\n" line_count += 1 # 事件指令不在文章两行以下的情况 else # 下一个事件指令为显示选择项的情况下 if @list[@index+1].code == 102 # 如果选择项能收纳在画面里 if @list[@index+1].parameters[0].size <= 4 - line_count # 推进索引 @index += 1 # 设置选择项 $game_temp.choice_start = line_count setup_choices(@list[@index].parameters) end # 下一个事件指令为处理输入数值的情况下 elsif @list[@index+1].code == 103 # 如果数值输入窗口能收纳在画面里 if line_count < 4 # 推进索引 @index += 1 # 设置输入数值 $game_temp.num_input_start = line_count $game_temp.num_input_variable_id = @list[@index].parameters[0] $game_temp.num_input_digits_max = @list[@index].parameters[1] end end # 继续 return true end # 推进索引 @index += 1 end end end class Scene_Map attr_accessor :message_window end #============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 #============================================================================== |