#============================================================================== # ■ XP-RGSS-2 メニュー顔グラ表示 [Ver.2.0.0] by Claimh #------------------------------------------------------------------------------ # ・メニュー画面にホコグラではなく顔グラを表示させます #============================================================================== module MenuFace FACE = [] #---------------------------------------------------------------------------- # カスタマイズSTART #---------------------------------------------------------------------------- # 表示形式(0:Type-A/1:Type-B/2:Type-C) MENU_TYPE = 1 #-- 顔グラの画像ファイル設定 --# # FACE[アクターID] = { # ステートID => "画像ファイル名(Graphics/pictures)" # } # ※ステートID:0は通常状態 # ※複数ステートがかかった状態では、最もレーティングの高いものが優先 FACE[1] = { 0 => "aru_0", 3 => "aru_3", 5 => "aru_5", } FACE[2] = { 0 => "bzl_0", 1 => "bzl_1" } FACE[7] = { 0 => "grl_0" } FACE[8] = { 0 => "hld_0" } #---------------------------------------------------------------------------- # カスタマイズEND #---------------------------------------------------------------------------- module_function #-------------------------------------------------------------------------- # ● 画像ファイルの取得 #-------------------------------------------------------------------------- def actor_graphic(actor) if FACE[actor.id].nil? or FACE[actor.id][0].nil? p "画像ファイル未指定" exit end # ステートにかかってるか? if actor.states.empty? return FACE[actor.id][0] else states = actor.states.dup # レーティングの大きい順 (同値の場合は制約の強い順) に並び替え states.sort! do |a, b| state_a = $data_states[a] state_b = $data_states[b] if state_a.rating > state_b.rating -1 elsif state_a.rating < state_b.rating +1 elsif state_a.restriction > state_b.restriction -1 elsif state_a.restriction < state_b.restriction +1 else a <=> b end end # 画像が指定されているか? for i in 0...states.size unless FACE[actor.id][states[0]].nil? # ステート用の画像指定あり return FACE[actor.id][states[0]] else # 次に優先度の高いステートへ states.delete_at(0) end end # 指定がないなら通常の画像 return FACE[actor.id][0] end end end class Window_Base #-------------------------------------------------------------------------- # ● グラフィックの描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_actor_face_graphic(actor, x, y) bitmap = RPG::Cache.picture(MenuFace.actor_graphic(actor)) cw = bitmap.width ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x, y, bitmap, src_rect) end end class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ 【再定義】 #-------------------------------------------------------------------------- def refresh self.contents.clear @item_max = $game_party.actors.size for i in 0...$game_party.actors.size x = 64 y = i * 116 actor = $game_party.actors[i] case MenuFace::MENU_TYPE when 0 refresh_type_a(actor, i, x, y) when 1 refresh_type_b(actor, i, x, y) when 2 refresh_type_c(actor, i, x, y) else p "MENU_TYPE:指定エラー" end end end #-------------------------------------------------------------------------- # ● Type-A リフレッシュ #-------------------------------------------------------------------------- def refresh_type_a(actor, i, x, y) draw_actor_face_graphic(actor, x - 64, y) draw_actor_name(actor, x+50, y) draw_actor_class(actor, x + 144+50, y) draw_actor_level(actor, x+50, y + 32) draw_actor_state(actor, x + 90+40, y + 32) draw_actor_exp(actor, x+50, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) end #-------------------------------------------------------------------------- # ● Type-B リフレッシュ #-------------------------------------------------------------------------- def refresh_type_b(actor, i, x, y) if (i % 2) == 0 draw_actor_face_graphic(actor, x - 64, y) draw_actor_name(actor, x+50, y) draw_actor_class(actor, x + 194, y) draw_actor_level(actor, x+50, y + 32) draw_actor_state(actor, x + 130, y + 32) draw_actor_exp(actor, x+50, y + 64) draw_actor_hp(actor, x + 236, y + 32) draw_actor_sp(actor, x + 236, y + 64) else draw_actor_face_graphic(actor, x + 286, y) draw_actor_name(actor, x-60, y) draw_actor_class(actor, x +84, y) draw_actor_level(actor, x-60, y + 32) draw_actor_state(actor, x + 30, y + 32) draw_actor_exp(actor, x-60, y + 64) draw_actor_hp(actor, x +136, y + 32) draw_actor_sp(actor, x +136, y + 64) end end #-------------------------------------------------------------------------- # ● Type-C リフレッシュ #-------------------------------------------------------------------------- def refresh_type_c(actor, i, x, y) draw_actor_face_graphic(actor, x + 286, y) draw_actor_name(actor, x-60, y) draw_actor_class(actor, x +84, y) draw_actor_level(actor, x-60, y + 32) draw_actor_state(actor, x + 30, y + 32) draw_actor_exp(actor, x-60, y + 64) draw_actor_hp(actor, x +136, y + 32) draw_actor_sp(actor, x +136, y + 64) end end