#============================================================================== # ★ 说明部分 ★ #==============================================================================
=begin
脚本:【解压数据包以及运行】 功能:对生成的数据包进行解压以及运行。 说明: 程序中的$resource_list和$data_package的名字可以更改, 但要和Main中的名字相同。
作者:灼眼的夏娜 补充: 1、用此脚本替换原来的Main脚本即可。 2、$resource_list 和 $data_package 这两个变量最好在脚本的最上面就载入。
=end
#============================================================================== # ★ 脚本部分 ★ #==============================================================================
#============================================================================== # ■ File #------------------------------------------------------------------------------ # 处理文件的类。 #==============================================================================
class File < IO #-------------------------------------------------------------------------- # ● 解码代码 #-------------------------------------------------------------------------- def self.inflate(filename) pos = $resource_list[filename] $data_package.pos = pos[0] code = $data_package.read(pos[1] - pos[0]) code = Zlib::Inflate.inflate(code) return code end end
#============================================================================== # ■ Bitmap #------------------------------------------------------------------------------ # 处理位图的类。 #==============================================================================
class Bitmap < Object #-------------------------------------------------------------------------- # ● 类变量 #-------------------------------------------------------------------------- @@resource_type = [nil,"bmp","jpg","png","wav","mp3","ogg","wma","mid"] #-------------------------------------------------------------------------- # ● 重定义new方法 #-------------------------------------------------------------------------- def self.new(*str) @p = *str filetype = @p.split(/\./)[1] if @p.is_a?(String) if @p.is_a?(String) and @@resource_type.include? filetype filename = @p.split(/\./)[0] @fe_code = File.inflate(filename) filename = filename.split(/\//)[-1] f = File.open(filename+".tem","wb") f.write @fe_code f.close return Bitmap_W17.new(filename+".tem") end super end
end
#============================================================================== # ■ Bitmap_W17 #------------------------------------------------------------------------------ # Bitmap的子类。 #==============================================================================
class Bitmap_W17 < Bitmap #-------------------------------------------------------------------------- # ● 重定义initialize方法 #-------------------------------------------------------------------------- def initialize(*str) @p = *str super(*str) File.delete(@p) if @p.is_a?(String) and File.exist?(@p) end end
#============================================================================== # ■ Audio #------------------------------------------------------------------------------ # 处理声音相关的模块。 #==============================================================================
module Audio
#-------------------------------------------------------------------------- # ● 重载 #-------------------------------------------------------------------------- @w17_bgm = method("bgm_play") if @w17_bgm.nil? @w17_bgs = method("bgs_play") if @w17_bgs.nil? @w17_me = method("me_play") if @w17_me.nil? @w17_se = method("se_play") if @w17_se.nil?
#-------------------------------------------------------------------------- # ● 重载 bgm_play #-------------------------------------------------------------------------- def self.bgm_play(filename, volume = 100, pitch = 100) self.decode(filename, volume, pitch, "@w17_bgm") end #-------------------------------------------------------------------------- # ● 重载 bgs_play #-------------------------------------------------------------------------- def self.bgs_play(filename, volume = 80, pitch = 100) self.decode(filename, volume, pitch, "@w17_bgs") end #-------------------------------------------------------------------------- # ● 重载 me_play #-------------------------------------------------------------------------- def self.me_play(filename, volume = 100, pitch = 100) self.decode(filename, volume, pitch, "@w17_me") end #-------------------------------------------------------------------------- # ● 重载 se_play #-------------------------------------------------------------------------- def self.se_play(filename, volume = 80, pitch = 100) self.decode(filename, volume, pitch, "@w17_se") end #-------------------------------------------------------------------------- # ● 解码 #-------------------------------------------------------------------------- def self.decode(filename,volume,pitch,w17_str) filename = filename.split(/\./)[0] code = File.inflate(filename) filename = filename.split(/\//)[-1] fw = File.open(filename+".tem","wb") fw.write code fw.close eval("#{w17_str}.call(filename+\".tem\", volume, pitch)") File.delete(filename+".tem") end
end
#============================================================================== # ■ Main #------------------------------------------------------------------------------ # 各定义结束后、从这里开始实际处理。 #==============================================================================
begin #-------------------------------------------------------------------------- # ● 载入数据包和资源列表 #-------------------------------------------------------------------------- $data_package = File.open("data_package.dat","rb") $resource_list = load_data("resource_list.inf") # 准备过渡 # 设置系统默认字体 Font.default_name = (["黑体"]) Graphics.freeze # 生成场景对像 (标题画面) $scene = Scene_Title.new # $scene 为有效的情况下调用 main 过程 while $scene != nil $scene.main end # 淡入淡出 Graphics.transition(20) rescue Errno::ENOENT # 补充 Errno::ENOENT 以外错误 # 无法打开文件的情况下、显示信息后结束 filename = $!.message.sub("No such file or directory - ", "") print("找不到文件 #{filename}。 ") ensure $data_package.close end
#============================================================================== # ★ 结束 ★ #============================================================================== |