Inscrit le: 17 Aoû 2006, 00:00 Messages: 66 Localisation: Orléans Logiciel(s) préféré(s): RMXP Point(s) Fort(s): RGSS Sexe: Masculin Points d'aide: 0/60
Créations :
Voir ses créations
|
et fin : - Code: Tout sélectionner
#============================================================================ # ■ Spriteset_Map #============================================================================
class Spriteset_Map attr_accessor :tilemap #-------------------------------------------------------------------------- def init_options dat = $data_cartes[$game_map.map_id] $game_system.M7 = (dat.name2.include?("[M7]") ? true : false) $game_system.repeter_x = (dat.name2.include?("[X]") ? true : false) $game_system.repeter_y = (dat.name2.include?("[Y]") ? true : false) $game_system.tjs_scroll = (dat.name2.include?("[S]") ? true : false) $game_system.anime = (dat.name2.include?("[A]") ? true : false) $game_system.hor_blanc = (dat.name2.include?("[B]") ? true : false) $game_system.pano_fixe = (dat.name2.include?("[P]") ? true : false) $game_system.ov = (dat.name2.include?("[OV]") ? true : false) if $game_system.M7 dat.name2 =~ /[#[ ]*([00-99]+)]/i $game_system.angle = ($1 == nil ? 0 : $1.to_i) $game_system.angle = [[$game_system.angle, 0].max, 89].min end end #-------------------------------------------------------------------------- def initialize @viewport1 = Viewport.new(0, 0, 640, 480) @viewport2 = Viewport.new(0, 0, 640, 480) @viewport3 = Viewport.new(0, 0, 640, 480) @viewport2.z = 200 @viewport3.z = 5000 init_options if $game_system.M7 @tilemap = Tilemap_M7.new(@viewport1) else @tilemap = Tilemap.new(@viewport1) @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name) for i in 0..6 autotile_name = $game_map.autotile_names[i] @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name) end @tilemap.map_data = $game_map.data @tilemap.priorities = $game_map.priorities end @panorama = Plane.new(@viewport1) @panorama.z = ($game_system.M7 ? -100000 : -1000) @fog = Plane.new(@viewport1) @fog.z = 3000 @character_sprites = [] for i in $game_map.events.keys.sort sprite = Sprite_Character.new(@viewport1, $game_map.events[i]) @character_sprites.push(sprite) end @character_sprites.push(Sprite_Character.new(@viewport1, $game_player)) @weather = RPG::Weather.new(@viewport1) @picture_sprites = [] for i in 1..50 @picture_sprites.push(Sprite_Picture.new(@viewport2, $game_screen.pictures[i])) end @timer_sprite = Sprite_Timer.new update end #-------------------------------------------------------------------------- def dispose if !$game_system.M7 @tilemap.tileset.dispose for i in 0..6 @tilemap.autotiles[i].dispose end end @tilemap.dispose @panorama.dispose @fog.dispose for sprite in @character_sprites sprite.dispose end @weather.dispose for sprite in @picture_sprites sprite.dispose end @timer_sprite.dispose @viewport1.dispose @viewport2.dispose @viewport3.dispose end #-------------------------------------------------------------------------- def update if @panorama_name != $game_map.panorama_name or @panorama_hue != $game_map.panorama_hue @panorama_name = $game_map.panorama_name @panorama_hue = $game_map.panorama_hue if @panorama.bitmap != nil @panorama.bitmap.dispose @panorama.bitmap = nil end if @panorama_name != "" @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue) end Graphics.frame_reset end if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue @fog_name = $game_map.fog_name @fog_hue = $game_map.fog_hue if @fog.bitmap != nil @fog.bitmap.dispose @fog.bitmap = nil end if @fog_name != "" @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue) end Graphics.frame_reset end if $game_system.M7 if Graphics.frame_count % 20 == 0 and $game_system.anime @tilemap.update_anime end else @tilemap.ox = $game_map.display_x / 4 @tilemap.oy = $game_map.display_y / 4 end @tilemap.update if $game_system.pano_fixe @panorama.ox = 0 @panorama.oy = 0 elsif $game_system.M7 @panorama.ox = (128*$game_map.width*$game_player.num_carte_x+ $game_player.real_x)/8 @panorama.oy = - (128*$game_map.height*$game_player.num_carte_y+ $game_player.real_y)/32 else @panorama.ox = $game_map.display_x / 8 @panorama.oy = $game_map.display_y / 8 end @fog.zoom_x = $game_map.fog_zoom / 100.0 @fog.zoom_y = $game_map.fog_zoom / 100.0 @fog.opacity = $game_map.fog_opacity @fog.blend_type = $game_map.fog_blend_type @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy @fog.tone = $game_map.fog_tone for sprite in @character_sprites sprite.update end @weather.type = $game_screen.weather_type @weather.max = $game_screen.weather_max @weather.ox = $game_map.display_x / 4 @weather.oy = $game_map.display_y / 4 @weather.update for sprite in @picture_sprites sprite.update end @timer_sprite.update @viewport1.tone = $game_screen.tone @viewport1.ox = $game_screen.shake @viewport3.color = $game_screen.flash_color @viewport1.update @viewport3.update end end
#============================================================================ # ■ Scene_Map #============================================================================ class Scene_Map attr_accessor :spriteset end
#============================================================================ # ■ Data_Autotiles #============================================================================
class Data_Autotiles < Bitmap $data_creation = [[27,28,33,34],[5,28,33,34],[27,6,33,34],[5,6,33,34], [27,28,33,12],[5,28,33,12],[27,6,33,12],[5,6,33,12],[27,28,11,34], [5,28,11,34],[27,6,11,34],[5,6,11,34],[27,28,11,12],[5,28,11,12], [27,6,11,12],[5,6,11,12],[25,26,31,32],[25,6,31,32],[25,26,31,12], [25,6,31,12],[15,16,21,22],[15,16,21,12],[15,16,11,22],[15,16,11,12], [29,30,35,36],[29,30,11,36],[5,30,35,36],[5,30,11,36],[39,40,45,46], [5,40,45,46],[39,6,45,46],[5,6,45,46],[25,30,31,36],[15,16,45,46], [13,14,19,20],[13,14,19,12],[17,18,23,24],[17,18,11,24],[41,42,47,48], [5,42,47,48],[37,38,43,44],[37,6,43,44],[13,18,19,24],[13,14,43,44], [37,42,43,48],[17,18,47,48],[13,18,43,48],[13,18,43,48]] attr_accessor :numero attr_accessor :anime #-------------------------------------------------------------------------- def initialize(fichier,l) super(8*32, 6*32) creer(fichier,l) end #-------------------------------------------------------------------------- def creer(fichier,l) l = (fichier.width > 96 ? l : 0) self.anime = (fichier.width > 96 ? true : false) for i in 0..5 for j in 0..7 data = $data_creation[8*i+j] for nb in data nb -= 1 m = 16 * (nb % 6) n = 16 * (nb / 6) blt(32*j+m%32, 32*i+n%32, fichier, Rect.new(m+96*l,n,16,16)) end end end end end
#============================================================================ # ■ Data_Couche3 #============================================================================
class Data_Couche3 attr_accessor :liste_sprites_C3 attr_accessor :liste_sprites_C3_anime #-------------------------------------------------------------------------- def initialize(viewport) @viewport = viewport self.liste_sprites_C3 = [] self.liste_sprites_C3_anime = [] @num_tiles = [] @data3 = Table.new($game_map.width, $game_map.height) for i in 0..$game_map.height for j in 0..$game_map.width @data3[j, i] = $game_map.data[j, i, 2].to_i end end for i in 0..$game_map.height for j in 0..$game_map.width val = @data3[j, i].to_i if val != 0 @num_tiles.push([j,i]) fin = 0 l = 0 while j+l+1 < $game_map.width and @data3[j+l+1,i].to_i != 0 @num_tiles.push([j+l+1,i]) l += 1 end deb = j fin = l+j indic = true ligne = 0 j2 = j while indic ligne += 1 break if i+ligne == $game_map.height dep = j2 l2 = 0 indic = false if l >= 2 for k in j2+1..j2+l-1 if @data3[k,i+ligne].to_i != 0 if !indic dep = k else l2 = k-dep end indic = true @num_tiles.push([k,i+ligne]) elsif !indic l2 -= 1 end end end if @data3[j2+l,i+ligne].to_i != 0 l2 = j2+l-dep indic = true @num_tiles.push([j2+l,i+ligne]) b = 1 while j2+l+b < $game_map.width and @data3[j2+l+b,i+ligne].to_i != 0 @num_tiles.push([j2+l+b,i+ligne]) b += 1 l2 += 1 if j2+l+b > fin fin = j2+l+b end end end if @data3[j2,i+ligne].to_i != 0 dep2 = dep-j2 l2 = l2+dep2 dep = j2 indic = true @num_tiles.push([j2,i+ligne]) b = 1 while j2-b >= 0 and @data3[j2-b,i+ligne].to_i != 0 @num_tiles.push([j2-b,i+ligne]) b += 1 l2 += 1 dep -= 1 if dep < deb deb = dep end end end l = l2 j2 = dep end ligne -= 1 creer_bitmap(i, deb, ligne, fin-deb) effacer_donnees @num_tiles = [] end end end end #-------------------------------------------------------------------------- def effacer_donnees for num in @num_tiles @data3[num[0], num[1]] = 0 end end #-------------------------------------------------------------------------- def creer_bitmap(i, deb, hauteur, largeur) bmp = Bitmap.new(32*(1+largeur), 32*(1+hauteur)) rect = Rect.new(0, 0, 32, 32) @num_tiles.sort! {|a, b| -(a[1] - b[1])} sprite = Sprite_C3.new(@viewport) sprite.anime = false sprite.liste_bmp = [] for num in @num_tiles valeur = @data3[num[0], num[1]].to_i if valeur > 383 bitmap = RPG::Cache.tile($game_map.tileset_name, valeur, 0) else file = (valeur / 48) - 1 num_file = 4*file if !sprite.anime autotile_name = $game_map.autotile_names[file] fichier = RPG::Cache.autotile(autotile_name) sprite.anime = (fichier.width > 96 ? true : false) end bitmap = RPG::Cache.autotile_base(num_file, valeur) end bmp.blt(32*(num[0]-deb), 32*(num[1]-i), bitmap, rect) end sprite.liste_bmp.push(bmp) if sprite.anime for j in 1..3 bmp = Bitmap.new(32*(1+largeur), 32*(1+hauteur)) for num in @num_tiles valeur = @data3[num[0], num[1]].to_i if valeur > 383 bitmap = RPG::Cache.tile($game_map.tileset_name, valeur, 0) else num_file = 4*((valeur / 48) - 1) bitmap = RPG::Cache.autotile_base(num_file + j, valeur) end bmp.blt(32*(num[0]-deb), 32*(num[1]-i), bitmap, rect) end sprite.liste_bmp.push(bmp) end end val = @data3[@num_tiles[0][0], @num_tiles[0][1]].to_i sprite.prio = $game_map.priorities[val] sprite.x_map = (deb.to_f) + bmp.width / 64 sprite.x_map += 0.5 if largeur % 2 == 0 sprite.y_map = (i + hauteur).to_f + 0.5 sprite.case_y = sprite.y_map.to_i sprite.oy = bmp.height - 16 sprite.ox = bmp.width / 2 sprite.bitmap = sprite.liste_bmp[0] self.liste_sprites_C3.push(sprite) self.liste_sprites_C3_anime.push(sprite) if sprite.anime end end
#============================================================================ # ■ RPG::Cache_Tile #============================================================================
module RPG module Cache_Tile @cache = {} #------------------------------------------------------------------------ def self.load(val1,val2,offset=0) if not @cache.include?([val1, val2]) bmp = Bitmap.new(32, 32) rect = Rect.new(0, 0, 32, 32) if val1 > 383 bmp.blt(0, 0, RPG::Cache.tile($game_map.tileset_name, val1, 0), rect) else num = 4*((val1 / 48) - 1) + offset bmp.blt(0, 0, RPG::Cache.autotile_base(num, val1), rect) end if val2 > 383 bmp.blt(0, 0, RPG::Cache.tile($game_map.tileset_name, val2, 0), rect) else num = 4*((val2 / 48) - 1) + offset bmp.blt(0, 0, RPG::Cache.autotile_base(num, val2), rect) end @cache[[val1, val2]] = bmp end @cache[[val1, val2]] end #------------------------------------------------------------------------ def self.clear @cache = {} GC.start end end end
#============================================================================ # ■ RPG::Cache_Carte #============================================================================
module RPG module Cache_Carte @cache = {} #------------------------------------------------------------------------ def self.en_cache(map_id) return @cache.include?(map_id) end #------------------------------------------------------------------------ def self.load(map_id, num = 0) return @cache[map_id][num] end #------------------------------------------------------------------------ def self.save(map_id, bmp, num = 0) @cache[map_id] = [] if !self.en_cache(map_id) @cache[map_id][num] = bmp end #------------------------------------------------------------------------ def self.clear @cache = {} GC.start end end end
#============================================================================ # ■ RPG::Cache #============================================================================
module RPG module Cache def self.autotile_base(num,val) key = [num, val] if not @cache.include?(key) or @cache[key].disposed? @cache[key] = Bitmap.new(32, 32) num_tile = val % 48 sx = 32 * (num_tile % 8) sy = 32 * (num_tile / 8) rect = Rect.new(sx, sy, 32, 32) @cache[key].blt(0, 0, self.load_autotile(num), rect) end @cache[key] end #------------------------------------------------------------------------ def self.save_autotile(bitmap, key) @cache[key] = bitmap end #------------------------------------------------------------------------ def self.load_autotile(key) @cache[key] end end end
|
|