#============================================================================== # ■ RGSS3 イベントグラフィックの座標ずらし Ver1.04 by 星潟 #------------------------------------------------------------------------------ # イベントの本来の座標をそのままに、イベントグラフィックの座標をずらします。 # 使い方によってはイベントの表現が広がるかもしれません。 # また、同種のスクリプトとは相性が悪いかもしれないのでご注意ください。 #------------------------------------------------------------------------------ # ★設定方法 #------------------------------------------------------------------------------ # ☆イベントそのものに設定する場合の例 #------------------------------------------------------------------------------ # イベントの名前にを含めると # 半タイル分左、1タイル分下にグラフィックが移動します。 # イベントの名前にを含めると # 1タイル分右、半タイル分上にグラフィックが移動します。 # 接触判定等はそのままです。 #------------------------------------------------------------------------------ # ☆イベントコマンドのスクリプトで設定する場合の例 #------------------------------------------------------------------------------ # oxy_change(id_data,ox_data,oy_data,type)を用います。 # id_dataにはイベントのID(0の場合はそのイベント、-1の場合はプレイヤーキャラ)、 # ox_dataには左右にずらすピクセル値(正の値で右方向、負の値で左方向)、 # oy_dataには上下にずらすピクセル値(正の値で下方向、負の値で上方向)を指定します。 # typeで、どういう形でずらすかを指定します。 # (1にすると、そのまま指定した方向にずらします。 # 2にすると、1でずらした座標を初期化した上でずらします。) #============================================================================== # Ver1.01 メニュー開閉でイベントコマンドによる変更が初期化される不具合を修正。 # (マップ移動等で再セットアップされると元に戻るのは仕様です) # Ver1.02-1.03 1.01で発生した不具合を修正。 # Ver1.04 フキダシがずらした座標に追随しない不具合を修正。 #============================================================================== module EV_OXY_CONTROL #座標をずらす為のキーワードを指定。 WORD = "OXY" end class Sprite_Character < Sprite_Base #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_bitmap_oxy_control initialize def initialize(viewport, character = nil) character.oxy_change_flag = true initialize_bitmap_oxy_control(viewport, character) end #-------------------------------------------------------------------------- # 転送元ビットマップの更新 #-------------------------------------------------------------------------- alias update_bitmap_oxy_control update_bitmap def update_bitmap #本来の処理を実行。 update_bitmap_oxy_control #フラグがnilでない場合の処理を実行。 if @character.oxy_change_flag @tile_id > 0 ? set_tile_bitmap : set_character_bitmap self.ox -= @character.oxy_data[0] + @character.event_oxy_control[0] self.oy -= @character.oxy_data[1] + @character.event_oxy_control[1] @character.oxy_change_flag = nil end end #-------------------------------------------------------------------------- # フキダシアイコンの更新 #-------------------------------------------------------------------------- alias update_balloon_oxy_control update_balloon def update_balloon #フラグがnilでない場合の処理を実行。 if @balloon_duration > 0 @balloon_sprite.ox = 16 - (@character.oxy_data[0] + @character.event_oxy_control[0]) @balloon_sprite.oy = 32 - (@character.oxy_data[1] + @character.event_oxy_control[1]) end #本来の処理を実行。 update_balloon_oxy_control end end class Game_CharacterBase attr_accessor :oxy_data attr_accessor :oxy_change_flag def event_oxy_control #0二つの配列を返す。 [0,0] end def oxy_data @oxy_data ||= [0, 0] end def oxy_change(ox_d,oy_d,type) #タイルIDが指定されている場合はタイル、そうでない場合は #キャラクターのビットマップを設定。 case type when 1;@oxy_data = [oxy_data[0] + ox_d, oxy_data[1] + oy_d] when 2;@oxy_data = [ox_d, oy_d] else;return end @oxy_change_flag = true end end class Game_Event < Game_Character def event_oxy_control #キャッシュがあればキャッシュを返す。 @event_oy_control ||= /<#{EV_OXY_CONTROL::WORD}[::](\S+),(\S+)>/ =~ @event.name ? [$1.to_i,$2.to_i] : [0,0] end end class Game_Interpreter def oxy_change(id_data,ox_data,oy_data,type) #座標調整を実行。 get_character(id_data).oxy_change(ox_data,oy_data,type) end end