Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- # Character Sprite Access
- # Version: 1.05
- # Author : LiTTleDRAgo
- #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
- ($imported||={})[:drg_character_sprite_access] = 1.05
- text = "This script needs Drago - Core Engine ver 1.31 or above"
- ($imported[:drg_core_engine] || 0) >= 1.31 || raise(text)
- #==============================================================================
- # ** Game_Character
- #------------------------------------------------------------------------------
- # This class deals with characters. It's used as a superclass for the
- # Game_Player and Game_Event classes.
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # ● Public Instance Variables
- #--------------------------------------------------------------------------
- attr_sec_reader :bitmap, "SBitmap_Character.new(self)"
- define_method(:bitmap=) {|*args| bitmap.send(:"=",*args)}
- #--------------------------------------------------------------------------
- # ● Saved_bitmap
- #--------------------------------------------------------------------------
- def saved_bitmap
- $game_temp.event_saved_bitmap[[$game_map.map_id,@id]] ||= Array.new
- end
- end
- #==============================================================================
- # ** Game_Temp
- #------------------------------------------------------------------------------
- # This class handles temporary data that is not included with save data.
- # The instance of this class is referenced by $game_temp.
- #==============================================================================
- Game_Temp.send(:attr_sec_reader, :event_saved_bitmap, "Hash.new")
- #==============================================================================
- # ** SBitmap_Character
- #------------------------------------------------------------------------------
- #
- #==============================================================================
- class SBitmap_Character
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- define_method(:initialize) { |char| @character = char }
- define_method(:character_sprite) { @character.character_sprite }
- define_method(:saved_bitmap) { @character.saved_bitmap }
- define_method(:get) { character_sprite.bitmap }
- #--------------------------------------------------------------------------
- # * method_missing
- #--------------------------------------------------------------------------
- def method_missing(val,*args)
- character_sprite.bitmap && (bitmap = character_sprite.bitmap.clone)
- if bitmap.respond_to?(:"#{val}")
- bitmap.send(:"#{val}",*args)
- reset_bitmap(1)
- save = [bitmap.clone, character_sprite.src_rect.clone]
- saved_bitmap.concat(save) << @character.tile_id
- character_sprite.bitmap = bitmap
- elsif character_sprite.respond_to?(:"#{val}")
- bitmap.respond_to?(:dispose) && bitmap.dispose
- character_sprite.send(:"#{val}",*args)
- else
- text = "Undefined method #{val} at #{@character}.bitmap"
- raise NoMethodError,text,caller(1)
- end
- end
- #--------------------------------------------------------------------------
- # * =
- #--------------------------------------------------------------------------
- define_method(:"=") do |*args|
- character_sprite.send(:bitmap=, *args)
- if args.first.is_a?(Bitmap)
- rect = [0, 0, args.first.width, args.first.height]
- @character.tile_id == 0 && @character.instance_variable_set(:@tile_id,1)
- character_sprite.update
- character_sprite.send(:bitmap=, *args)
- character_sprite.src_rect.set(*rect)
- reset_bitmap(1)
- save = [args.first.clone, character_sprite.src_rect.clone]
- saved_bitmap.concat(save) << @character.tile_id
- end
- end
- #--------------------------------------------------------------------------
- # * reset_bitmap
- #--------------------------------------------------------------------------
- def reset_bitmap(type=0)
- (s = saved_bitmap.first).respond_to?(:dispose) && (s.disposed? || s.dispose)
- saved_bitmap.clear
- if type == 0
- @character.tile_id == 1 && @character.instance_variable_set(:@tile_id, 0)
- character_sprite.send(:instance_variable_get, :@character_name).clear
- end
- end
- end
- #==============================================================================
- # ** Sprite_Character
- #------------------------------------------------------------------------------
- #
- #==============================================================================
- class Sprite_Character
- #--------------------------------------------------------------------------
- # * Alias Method
- #--------------------------------------------------------------------------
- alias_sec_method :drg3xd3_update, :update
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update(*args)
- drg3xd3_update(*args)
- if (@character.saved_bitmap != @saved_bitmap) &&
- (@character.saved_bitmap.first.is_a?(Bitmap)) &&
- (@character.saved_bitmap.first.not.disposed?)
- @saved_bitmap = @character.saved_bitmap
- @character.instance_variable_set(:@tile_id, @saved_bitmap.at(2))
- drg3xd3_update(*args)
- self.bitmap = @saved_bitmap.first.clone
- self.src_rect = @saved_bitmap.at(1)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement