#============================================================================== # ★ グラフィック拡張 ver1.02 by USK http://usklabo.sblo.jp/ #------------------------------------------------------------------------------ # ・グラフィックの機能を拡張し、マップの表現力を向上させることができます。 #============================================================================== =begin ・ファイル名の先頭に@とつけることでアクターやイベントの歩行グラフィックとして 一枚絵を使うことができます。 ・アクターのメモ欄またはイベントページの一番上の注釈で以下のように記述すると  対応した効果が得られます。   #=>グラフィックの原点x座標を設定   #=>グラフィックの原点y座標を設定   #=>グラフィックのz座標を設定   #=>グラフィック(角度)の分だけ回転   #=>グラフィックを反転します   #=>グラフィックの色調を変更します   #=>グラフィックをx軸方向に引き伸ばします   #=>グラフィックをy軸方向に引き伸ばします    #=>振幅、波長、振動数に応じてピクチャを揺らします ・文章の表示にてと記述すると顔グラフィックの色調が変わります。 ・以下のようにすることでアニメーションするグラフィックにできます。  アニメーションのpngのように一つのpngファイルに複数のコマを用意し、  ファイル名を@で始め、アクターのメモ欄またはイベントページの一番上の注釈に    と記述することで左上から順にコマ表示フレームごとにコマが切り替わります。  の場合以下の順に画像が表示されます。 1234  5678  9 ・以下のようにすることでスクロールするグラフィックにすることができます。  スクロール方向にループするpngを用意し、ファイル名を@で始め、アクターのメモ  欄またはイベントページの一番上の注釈に と記述することで指定した方向にスクロールするようになります。 *スクロール方向にはup,down,right,leftのいずれかを記入してください。 =end #============================================================================== # ■ Sprite_Character #============================================================================== class Sprite_Character < Sprite_Base AllInOneSign = "@" #-------------------------------------------------------------------------- # ● キャラクターのビットマップを設定 #-------------------------------------------------------------------------- alias abc_set_character_bitmap set_character_bitmap def set_character_bitmap if note =~ //m; $game_temp.set_exc_hue(:character, $1.to_i); end if @character_name.start_with?(AllInOneSign) self.bitmap = Cache.character(@character_name) if note =~ //m @num = $1.to_i @col = $2.to_i @row = @num % @col == 0 ? @num / @col : @num / @col + 1 @frame = $3.to_i @frame_max = @num * @frame @cw = bitmap.width / @col @ch = bitmap.height / @row @mode = :anime elsif note =~ //m @mode = $1.to_sym len = $2.to_i @frame_max = $3.to_i if @mode == :up || @mode == :down @frame = bitmap.height * 1.0 / @frame_max @hh = bitmap.height @cw = bitmap.width @ch = len tmp = Bitmap.new(bitmap.width, @hh + len * 2) tmp.blt(0, 0, bitmap, bitmap.rect) tmp.blt(0, @hh, bitmap, Rect.new(0, 0, bitmap.width, len << 1)) self.bitmap = tmp else @frame = bitmap.width * 1.0 / @frame_max @ww = bitmap.width @cw = len @ch = bitmap.height tmp = Bitmap.new(@ww + len * 2, bitmap.height) tmp.blt(0, 0, bitmap, bitmap.rect) tmp.blt(@ww, 0, bitmap, Rect.new(0, 0, len << 1, bitmap.height)) self.bitmap = tmp end else @num = @col = @row = @frame = 1 @cw = bitmap.width @ch = bitmap.height @mode = :alone end @frame_count = 0 self.ox = @cw >> 1 self.oy = @ch self.src_rect.set(0, 0, @cw, @ch) else abc_set_character_bitmap @mode = :normal end set_ex_param end #-------------------------------------------------------------------------- # ● 転送元矩形の更新 #-------------------------------------------------------------------------- alias abc_update_src_rect update_src_rect def update_src_rect case @mode when :alone when :up @frame_count = @frame_count == @frame_max - 1 ? 0 : @frame_count + 1 yy = @frame_count * @frame yy -= @hh if yy > @hh self.src_rect.set(0, yy, @cw, @ch) if @tile_id == 0 when :down @frame_count = @frame_count == @frame_max - 1 ? 0 : @frame_count + 1 yy = @hh - @frame_count * @frame yy += @hh if yy < 0 self.src_rect.set(0, yy, @cw, @ch) if @tile_id == 0 when :right @frame_count = @frame_count == @frame_max - 1 ? 0 : @frame_count + 1 xx =@ww - @frame_count * @frame xx += @ww if xx < 0 self.src_rect.set(xx, 0, @cw, @ch) if @tile_id == 0 when :left @frame_count = @frame_count == @frame_max - 1 ? 0 : @frame_count + 1 xx = @frame_count * @frame xx -= @ww if xx > @ww self.src_rect.set(xx, 0, @cw, @ch) if @tile_id == 0 when :anime @frame_count = @frame_count == @frame_max - 1 ? 0 : @frame_count + 1 return if @frame_count % @frame != 0 count = @frame_count / @frame xx = @cw * (count % @col) yy = @ch * (count / @col) self.src_rect.set(xx, yy, @cw, @ch) if @tile_id == 0 when :normal abc_update_src_rect end end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def note @character.note end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def set_ex_param self.mirror = note =~ // self.zoom_x = note =~ //m ? $1.to_f : 1 self.zoom_y = note =~ //m ? $1.to_f : 1 if note =~ //m self.wave_amp = $1.to_i self.wave_length = $2.to_i self.wave_speed = $3.to_i else self.wave_amp = 0 end self.angle = note =~ //m ? $1.to_i : 0 if note =~ //m ; self.z = $1.to_i; end if note =~ //m; self.ox = $1.to_i; end if note =~ //m; self.oy = $1.to_i; end end end #============================================================================== # ■ Game_Character #============================================================================== class Game_Character #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def note return @note || "" end end #============================================================================== # ■ Game_Player #============================================================================== class Game_Player < Game_Character #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def note return actor ? actor.actor.note : "" end end #============================================================================== # ■ Game_Follower #============================================================================== class Game_Follower < Game_Character #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def note return actor ? actor.actor.note : "" end end #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def setup_note @note = "" return unless @page list = @page.list if list[0].code == 108 @note += list[0].parameters[0] i = 1 while list[i].code == 408 @note += "\n" + list[i].parameters[0] i += 1 end end end #-------------------------------------------------------------------------- # ● イベントページのセットアップ #-------------------------------------------------------------------------- alias usk_exc_setup_page setup_page def setup_page(new_page) usk_exc_setup_page(new_page) setup_note end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias usk_exc_initialize initialize def initialize usk_exc_initialize @exc_hue = {} end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def exc_hue(key) ret = @exc_hue[key] || 0 @exc_hue[key] = 0 ret end #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def set_exc_hue(key, hue) @exc_hue[key] = hue % 360 end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def face_name @hue ||= actor.note =~ //m ? $1.to_i : 0 $game_temp.set_exc_hue(:face, @hue) @face_name end end #============================================================================== # ■ Game_Message #============================================================================== class Game_Message #-------------------------------------------------------------------------- # ● テキストの追加 #-------------------------------------------------------------------------- alias usk_exc_add add def add(text) text.gsub!(//, "") $game_temp.set_exc_hue(:face, $1.to_i) if $1 usk_exc_add(text) end end #============================================================================== # ■ Cache #============================================================================== module Cache #-------------------------------------------------------------------------- # ● 顔グラフィックの取得 #-------------------------------------------------------------------------- def self.face(filename) load_bitmap("Graphics/Faces/", filename, $game_temp.exc_hue(:face)) end #-------------------------------------------------------------------------- # ● 歩行グラフィックの取得 #-------------------------------------------------------------------------- def self.character(filename) load_bitmap("Graphics/Characters/", filename, $game_temp.exc_hue(:character)) end end #============================================================================== # ■ RPG::Event::Page::Graphic #============================================================================== class RPG::Event::Page::Graphic #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- alias :usk_ex_character_index :character_index def character_index character_name.start_with?("@") ? Graphics.frame_count : usk_ex_character_index end end