#------------------------------------------------------------------------------ # * Pictures anchored to Map - By Prexus #------------------------------------------------------------------------------ # To create an anchored image, use the Call Script function: # Call Script: $game_screen.layers[ID].show(fileName, xPos, yPos, opacity) # where fileName is the name of the picture (in the pictures folder) # xPos is the position in tiles # yPos is the position in tiles # opacity is a number between 0-255 # # Other methods: # # .move(duration, xPos, yPos, opacity) # moves the sprite to a new xPos and yPos and allows you to fade the image. # duration is in frames # # .rotate(speed) # rotates the sprite around its xPos/yPos # speed is in frames # # .erase # removes the sprite from the screen. #------------------------------------------------------------------------------ class Game_Layer attr_reader :number attr_reader :name attr_reader :x attr_reader :y attr_reader :opacity attr_reader :angle def initialize(number) @number = number @name = "" @x = 0.0 @y = 0.0 @opacity = 255.0 @duration = 0 @target_x = @x @target_y = @y @target_opacity = @opacity @angle = 0 @rotate_speed = 0 end def show(name, x, y, opacity) @name = name @x = x.to_f @y = y.to_f @opacity = opacity.to_f @duration = 0 @target_x = @x @target_y = @y @target_opacity = @opacity @angle = 0 @rotate_speed = 0 end def move(duration, x, y, opacity) @duration = duration @target_x = x.to_f @target_y = y.to_f @target_opacity = opacity.to_f end def rotate(speed) @rotate_speed = speed end def erase @name = "" end def update if @duration >= 1 d = @duration @x = (@x * (d - 1) + @target_x) / d @y = (@y * (d - 1) + @target_y) / d @opacity = (@opacity * (d - 1) + @target_opacity) / d @duration -= 1 end if @rotate_speed != 0 @angle += @rotate_speed / 2.0 while @angle < 0 @angle += 360 end @angle %= 360 end end end class Game_Screen attr_reader :layers alias prex_g_screen_initialize initialize def initialize prex_g_screen_initialize @layers = [nil] for i in 1..50 @layers.push(Game_Layer.new(i)) end end alias prex_g_screen_update update def update prex_g_screen_update for i in 1..50 @layers[i].update end end end class Sprite_Layer < Sprite def initialize(viewport, picture) super(viewport) @picture = picture update end def dispose if self.bitmap != nil self.bitmap.dispose end super end def update super if @picture_name != @picture.name @picture_name = @picture.name if @picture_name != "" self.bitmap = RPG::Cache.picture(@picture_name) end end if @picture_name == "" self.visible = false return end self.visible = true self.x = (-0.25 * $game_map.display_x) + (@picture.x * 32) - 5 self.y = (-0.25 * $game_map.display_y) + (@picture.y * 32) - 15 self.z = @picture.number self.opacity = @picture.opacity self.angle = @picture.angle end end class Spriteset_Map alias prex_sset_map_initialize initialize def initialize prex_sset_map_initialize @layer_sprites = [] for i in 1..50 @layer_sprites.push(Sprite_Layer.new(@viewport2, $game_screen.layers[i])) end update end alias prex_sset_map_dispose dispose def dispose prex_sset_map_dispose for layer in @layer_sprites layer.dispose end end alias prex_sset_map_update update def update prex_sset_map_update if @layer_sprites for layer in @layer_sprites layer.update end end end end