#============================================================================== # ■ RGSS3 メニューカスタマイズ オプション # 可変ピクチャ Ver1.00 by 星潟 #------------------------------------------------------------------------------ # メニュー画面中に指定値に応じたピクチャを表示します。 # 変数の値やスイッチのON・OFF、 # メニューコマンドウィンドウやメニューステータスウィンドウのインデックス、 # スクリプト文の結果に応じた値などで判定できます。 # 多彩な立ち絵の表示に役立ちますが、設定はやや面倒かもしれません。 #============================================================================== # 以下、後述の:conditionで役に立つスクリプトの式を記載します。 #------------------------------------------------------------------------------ # "actor = $game_party.members[0];actor != nil" # # この場合、パーティメンバーの先頭が存在するか否かの判定式となります。 #------------------------------------------------------------------------------ # "actor = $game_party.members[1];actor != nil" # # この場合、パーティメンバーの二人目が存在するか否かの判定式となります。 #------------------------------------------------------------------------------ # "actor = $game_party.members[2];actor != nil && actor.alive?" # # この場合、パーティメンバーの三人目が存在し # なおかつ生存しているか否かの判定式となります。 #------------------------------------------------------------------------------ # "actor = $game_party.members[3];actor != nil && actor.dead?" # # この場合、パーティメンバーの四人目が存在し # なおかつ戦闘不能状態か否かの判定式となります。 #============================================================================== # 以下、後述の:nameで役に立つスクリプトの式を記載します。 #------------------------------------------------------------------------------ # "actor = $game_party.members[0];(actor.face_name + '-' + (actor.face_index + 1).to_s)" # # この場合、パーティメンバーの先頭の顔グラフィックのファイル名に # 「-」を挟んで、顔グラフィックのインデックスの値に1を足した値を記載したものが # 画像ファイル名になります。 # 顔グラフィックがActor4、インデックスが0(左上)であれば # Actor4-1が画像ファイル名になります。 # もしもパーティに誰もいない状態であればエラーとなりますので # :conditionでうまく調整してください。 #------------------------------------------------------------------------------ # "actor = $game_party.members[1];('Actor' + actor.id.to_s + '-' + $game_variables[30].to_s)" # # この場合、Actorという文字列にパーティメンバーの二人目のアクターIDを加え # 「-」を挟んで変数ID30の値を記載したものが画像ファイル名になります。 # パーティメンバーの二人目のアクターIDが5で変数ID30の値が10である場合 # Actor5-10が画像ファイル名になります。 # もしもパーティメンバーが一人しかいない状態であればエラーとなりますので # :conditionでうまく調整してください。 #============================================================================== module MenuCustomizePicture #空のハッシュを用意(変更不要) Picture = {} #-------------------------------------------------------------------------- # ピクチャ設定(変更不要) #-------------------------------------------------------------------------- def self.set(pid,priority,symbol,value) Picture[pid] ||= {} Picture[pid][priority] ||= { :type => :sc,:condition => "true",:value => true,:origin => 0, :name => "",:eval => false,:x => 0,:y => 0,:z => 0,:opacity => 255} Picture[pid][priority][symbol] = value end #背景画像をどのフォルダから呼び出すかを指定 #0の場合はバトラー画像フォルダ #1の場合はピクチャ画像フォルダ #2の場合はシステム画像フォルダ PictureFolderType = 0 #ピクチャ別に指定 #1つのピクチャIDについて9行かけて設定を行う #設定方法 #set(a,b,c,d) #括弧の中の1つ目(a)がピクチャID、2つ目(b)が優先度、 #3つ目(c)が設定項目、4番目(d)が設定値となる。 #ピクチャIDは、この設定における設定対象となるピクチャIDを示す。 #優先度は、複数の設定を満たした場合にどの設定が優先されるかを示す値を示す。 #大きければ大きいほど優先される。 #設定項目は、設定値がどの項目についての設定値かを示す。 #設定項目が:typeであれば、設定値は以下のいずれかを指定する。 #これによって:conditionや:valueで指定する中身が #どのようなものとして扱われるかが変化。 #:gv #:conditionで指定されたものは変数IDとなる。 #:valueで指定されたものはその:conditionの変数IDに格納された値と比較し #一致すればこの条件のピクチャを表示する条件を満たす。 #:gs #:conditionで指定されたものはスイッチIDとなる。 #:valueで指定されたものはその:conditionのスイッチIDに格納された可否状態と比較し #一致すればこの条件のピクチャを表示する条件を満たす。 #:cw #:conditionで指定されたものは現在のコマンドウィンドウのインデックスとなる。 #:valueで指定されたものはそのコマンドウィンドウのインデックスと比較し #一致すればこの条件のピクチャを表示する条件を満たす。 #:sw #:conditionで指定されたものはステータスウィンドウのインデックスとなる。 #:valueで指定されたものはそのステータスウィンドウのインデックスと比較し #一致すればこの条件のピクチャを表示する条件を満たす。 #:sc #:conditionで指定されたものはスクリプトで処理される式となり #:valueで指定されたものと比較して一致すれば #この条件のピクチャを表示する条件を満たす。 #設定項目が:originであれば、設定値はピクチャの表示基準位置を示す。 #1であればX座標原点はピクチャの中心、Y座標原点はピクチャの上端。 #2であればX座標原点はピクチャの左端、Y座標原点はピクチャの中心。 #3であればX座標原点とY座標原点は共にピクチャの中心 #4であればX座標原点はピクチャの中心、Y座標原点はピクチャの下端。 #それ以外であればX座標原点はピクチャの左端、Y座標原点はピクチャの上端となる。 #設定項目が:nameであれば、設定値は画像ファイル名を示す。 #:evalの内容によってファイル名を指定するかスクリプト式を書き込むかを変える。 #設定項目が:evalであれば #設定値は:nameで指定した画像ファイル名を式として処理するか否かを指定する。 #trueであれば式として処理した結果をファイル名として扱い #falseであればそのままファイル名として扱う。 #設定項目が:xであれば、画像のX座標として扱う。 #設定項目が:yであれば、画像のY座標として扱う。 #設定項目が:zであれば、画像のZ座標として扱う。 #設定項目が:opacityであれば、画像の不透明度として扱う。 #ピクチャ番号0番の設定 set(0,0,:type,:sc) set(0,0,:condition,"actor = $game_party.members[0];actor != nil") set(0,0,:value,true) set(0,0,:origin,4) set(0,0,:name,"actor = $game_party.members[0];(actor.face_name + '-' + (actor.face_index + 1).to_s)") set(0,0,:eval,true) set(0,0,:x,88) set(0,0,:y,360) set(0,0,:z,120) set(0,0,:opacity,255) #ピクチャ番号1番の設定 set(1,0,:type,:sc) set(1,0,:condition,"actor = $game_party.members[1];actor != nil") set(1,0,:value,true) set(1,0,:origin,4) set(1,0,:name,"actor = $game_party.members[1];(actor.face_name + '-' + (actor.face_index + 1).to_s)") set(1,0,:eval,true) set(1,0,:x,240) set(1,0,:y,360) set(1,0,:z,120) set(1,0,:opacity,255) #ピクチャ番号2番の設定 set(2,0,:type,:sc) set(2,0,:condition,"actor = $game_party.members[2];actor != nil") set(2,0,:value,true) set(2,0,:origin,4) set(2,0,:name,"actor = $game_party.members[2];(actor.face_name + '-' + (actor.face_index + 1).to_s)") set(2,0,:eval,true) set(2,0,:x,393) set(2,0,:y,360) set(2,0,:z,120) set(2,0,:opacity,255) #ピクチャ番号3番の設定 set(3,0,:type,:sc) set(3,0,:condition,"actor = $game_party.members[3];actor != nil") set(3,0,:value,true) set(3,0,:origin,4) set(3,0,:name,"actor = $game_party.members[3];(actor.face_name + '-' + (actor.face_index + 1).to_s)") set(3,0,:eval,true) set(3,0,:x,545) set(3,0,:y,360) set(3,0,:z,120) set(3,0,:opacity,255) end class Window_MenuCustomizeDummy < Window_Base #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- alias initialize_menu_customize_picture initialize def initialize(command_window,status_window) initialize_menu_customize_picture(command_window,status_window) create_menu_customize_picture_sprites end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- alias update_menu_customize_picture update def update update_menu_customize_picture @menu_customize_picture_sprites.each {|sprite| sprite.update} end #-------------------------------------------------------------------------- # 解放 #-------------------------------------------------------------------------- alias dispose_menu_customize_picture dispose def dispose @menu_customize_picture_sprites.each {|sprite| sprite.dispose} @menu_customize_picture_sprites.clear dispose_menu_customize_picture end #-------------------------------------------------------------------------- # スプライトの作成 #-------------------------------------------------------------------------- def create_menu_customize_picture_sprites @menu_customize_picture_sprites = [] MenuCustomizePicture::Picture.each {|pid,hash| @menu_customize_picture_sprites.push( Sprite_MenuCustomizePicture.new(pid,hash,@command_window,@status_window))} end end class Sprite_MenuCustomizePicture < Sprite #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- def initialize(pid,hash,cw,sw) @pid = pid @hash = hash @cw = cw @sw = sw @last_priority = nil super(@sw.viewport) update end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- def update super last_priority = -1 @hash.each {|priority,hash| case hash[:type] when :gv;v = $game_variables[hash[:condition]] when :gs;v = $game_switches[hash[:condition]] when :cw;v = @cw.index == hash[:condition] when :sw;v = @sw.index == hash[:condition] when :sc;v = eval(hash[:condition]) else;next end if hash[:value] == v && priority > last_priority last_priority = priority end} if @last_value != last_priority @last_value = last_priority h = @hash[last_priority] if h self.viewport = @sw.viewport self.x = h[:x] self.y = h[:y] self.z = h[:z] self.visible = true name = h[:eval] ? eval(h[:name]) : h[:name] case MenuCustomizePicture::PictureFolderType when 0 bitmap = Cache.battler(name,0) when 1 bitmap = Cache.picture(name) else bitmap = Cache.system(name) end self.bitmap = bitmap self.opacity = h[:opacity] case h[:origin] when 1 self.ox = bitmap.width / 2 self.oy = 0 when 2 self.ox = 0 self.oy = bitmap.height / 2 when 3 self.ox = bitmap.width / 2 self.oy = bitmap.height / 2 when 4 self.ox = bitmap.width / 2 self.oy = bitmap.height else self.ox = 0 self.oy = 0 end else self.bitmap = nil self.visible = false end end end end