module DataManager @getimagered = [0] @getimagegreen = [0] @getimageblue = [0] REDUCE_COLOR_DEG = 16 @getcompred =[0] @getcompred =[0] @getcompred =[0] @save_bmp=[] def self.load_normal_databasetako445imgsave $save_div_num = 4 end #-------------------------------------------------------------------------- # ● セーブヘッダの作成 #-------------------------------------------------------------------------- def self.make_save_header header = {} header[:characters] = $game_party.characters_for_savefile header[:playtime_s] = $game_system.playtime_s header[:chapter] = $game_system.chapter header end #-------------------------------------------------------------------------- # ● 保存用画像の作成 #-------------------------------------------------------------------------- def self.make_save_bmpimage get_bmp_data bmpimage = {} bmpimage[:imagered] = @getcompred bmpimage[:imagegreen] = @getcompgreen bmpimage[:imageblue] = @getcompblue bmpimage end #-------------------------------------------------------------------------- # ● ゲームbmpデータの取得 #------------------------------------------------------------------------ def self.get_bmp_data for i in 0..(Graphics.width / img_div) for j in 0..(Graphics.height / img_div) imax = Graphics.width / img_div + 1 temp_color = SceneManager.background_bitmap.get_pixel(i * img_div, j * img_div) @getimagered[imax * j + i] = temp_color.red.truncate / REDUCE_COLOR_DEG @getimagegreen[imax * j + i] = temp_color.green.truncate / REDUCE_COLOR_DEG @getimageblue[imax * j + i] = temp_color.blue.truncate / REDUCE_COLOR_DEG end end @getcompred = compression_save_bmp(@getimagered) @getcompgreen = compression_save_bmp(@getimagegreen) @getcompblue = compression_save_bmp(@getimageblue) end def self.img_div $save_div_num * 3 / 2 end #-------------------------------------------------------------------------- # ● bmpデータの読み込み #------------------------------------------------------------------------ def self.read_bmp_data(fileindex) temp_red = 0 temp_green = 0 temp_blue = 0 temp_alpha = 0 bmpimage = load_bmpimage(fileindex) @getimagered = bmpimage[:imagered] @getimagegreen = bmpimage[:imagegreen] @getimageblue = bmpimage[:imageblue] @getexpred = expand_save_bmp(@getimagered) @getexpgreen = expand_save_bmp(@getimagegreen) @getexpblue = expand_save_bmp(@getimageblue) @save_bmp[fileindex].dispose if @save_bmp[fileindex] @save_bmp[fileindex] = Bitmap.new(Graphics.width / img_div, Graphics.height / img_div) for i in 0..(Graphics.width / img_div) for j in 0..(Graphics.height / img_div) imax = Graphics.width / img_div + 1 temp_red = get_color_data(@getexpred , imax * j + i) * REDUCE_COLOR_DEG temp_green = get_color_data(@getexpgreen , imax * j + i) * REDUCE_COLOR_DEG temp_blue = get_color_data(@getexpblue , imax * j + i) * REDUCE_COLOR_DEG temp_color = Color.new(temp_red, temp_green, temp_blue) @save_bmp[fileindex].set_pixel(i,j,temp_color) end end end def self.get_color_data(array , i) array[i] || 0 end #-------------------------------------------------------------------------- # ● セーブbmpimageのロード #-------------------------------------------------------------------------- def self.load_bmpimage(index) load_bmpimage_without_rescue(index) rescue nil end #-------------------------------------------------------------------------- # ● セーブの実行(例外処理なし) #-------------------------------------------------------------------------- def self.save_game_without_rescue(index) File.open(make_filename(index), "wb") do |file| $game_system.on_before_save Marshal.dump(make_save_header, file) Marshal.dump(make_save_contents, file) @last_savefile_index = index if index > 0 end File.open(make_gfilename(index), "wb") do |file| Marshal.dump(make_save_bmpimage, file) end Cache.update_save_bitmap(index) #キャッシュの変更 return true end def self.save_bmp(fileindex) read_bmp_data(fileindex) return @save_bmp[fileindex] end #-------------------------------------------------------------------------- # ● セーブbmpimageのロード(例外処理なし) #-------------------------------------------------------------------------- def self.load_bmpimage_without_rescue(index) File.open(make_gfilename(index), "rb") do |file| return Marshal.load(file) end return nil end #-------------------------------------------------------------------------- # ● ファイル名の作成 # index : ファイルインデックス #-------------------------------------------------------------------------- def self.make_gfilename(index) sprintf("Saveg%02d.rvdata2", index + 1) end #-------------------------------------------------------------------------- # ● セーブの実行 #-------------------------------------------------------------------------- def self.save_game(index) begin save_game_without_rescue(index) rescue delete_save_file(index) false end end #画像ファイル圧縮 @reduced_color = 256 / REDUCE_COLOR_DEG def self.compression_save_bmp(array) newarray=[] temp = 0 comp_mode = false for i in 0..(array.size - 1 ) if array[i] == array[i + 1] && array[i] != nil if comp_mode temp += @reduced_color else temp = array[i] + @reduced_color comp_mode = true end else if comp_mode newarray.push temp comp_mode = false else newarray.push array[i] end end end return newarray end #画像ファイル展開 def self.expand_save_bmp(array) newarray=[] times = 0 modulo = 0 for i in 0..(array.size - 1) if array[i] < @reduced_color newarray.push array[i] else times = ( array[i] / @reduced_color ) modulo = ( array[i] % @reduced_color ) for j in 0..times newarray.push modulo end end end return newarray end end