#==============================================================================
# ■ VXAce-RGSS3-42 メニュー画面-改2 [Ver.1.1.0] by Claimh
#------------------------------------------------------------------------------
# メニュー画面の表示を変更します
#------------------------------------------------------------------------------
# 立ち絵は Graphics/Pictures 以下の
# Actor{アクターID} を表示します(アクター1 : Actor1.png)
#------------------------------------------------------------------------------
# ●立ち絵の変更
# $game_actors[アクターID].m_picture = "ファイル名"
#==============================================================================
#==============================================================================
# ■ Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● ステートおよび強化/弱体のアイコンを描画
#--------------------------------------------------------------------------
def draw_actor_icons_r(actor, x, y, width = 96)
icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
x += width - 24 * icons.size
icons.each_with_index {|n, i| draw_icon(n, x + 24 * i, y) }
end
#--------------------------------------------------------------------------
# ● アクターの立ち絵描画
#--------------------------------------------------------------------------
def draw_actor_menu_picture(actor, x, y, width, height, enabled = true)
bitmap = Cache.picture(actor.m_picture)
xx = (bitmap.width > width) ? ((bitmap.width - width) / 2) : 0
ww = (bitmap.width > width) ? width : bitmap.width
yy = (bitmap.height > height) ? ((bitmap.height - height) / 2) : 0
hh = (bitmap.height > height) ? height : bitmap.height
rect = Rect.new(xx, yy, ww, hh)
xx = (bitmap.width < width) ? ((width - bitmap.width) / 2) : x
yy = (bitmap.height < height) ? ((height - bitmap.height) / 0.8) : y
contents.blt(xx, yy, bitmap, rect, enabled ? 255 : translucent_alpha)
bitmap.dispose
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :m_picture # menu立ち絵
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias setup_menu_picture setup
def setup(actor_id)
setup_menu_picture(actor_id)
@m_picture = "Actor#{actor_id}"
end
end
#==============================================================================
# ■ Window_MenuCommand
#==============================================================================
class Window_MenuCommand < Window_Command
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
4
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width
end
#--------------------------------------------------------------------------
# ● 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
2 #item_max
end
end
#==============================================================================
# ■ Window_HorzMenuStatus
#==============================================================================
class Window_HorzMenuStatus < Window_HorzCommand
WIN = false # ウィンドウ表示あり
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :pending_index # 保留位置(並び替え用)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
@pending_index = -1
@top_y = y
WIN ? super(x, y) : super(x-standard_padding, y-standard_padding)
self.opacity = 0 unless WIN
unselect
deactivate
end
#--------------------------------------------------------------------------
# ● 先頭の桁の設定 ※Window_HorzCommandバグ回避
#--------------------------------------------------------------------------
def top_col=(col)
col = 0 if col < 0
col = (item_max / visible_line_number) - 1 if col > (item_max / visible_line_number) - 1
self.ox = col * (item_width + spacing)
end
#--------------------------------------------------------------------------
# ● 項目数の取得
#--------------------------------------------------------------------------
def item_max
$game_party.members.size
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
4
end
#--------------------------------------------------------------------------
# ● 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
1
end
#--------------------------------------------------------------------------
# ● 横に項目が並ぶときの空白の幅を取得
#--------------------------------------------------------------------------
def spacing
return 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width + (WIN ? 0 : standard_padding * 2)
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
Graphics.height - @top_y - fitting_height(1) + (WIN ? 0 : standard_padding * 2)
end
#--------------------------------------------------------------------------
# ● 項目の高さを取得
#--------------------------------------------------------------------------
def item_height
height - standard_padding * 2
end
#--------------------------------------------------------------------------
# ● 選択項目の有効状態を取得
#--------------------------------------------------------------------------
def current_item_enabled?
true
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.members[index]
enabled = $game_party.battle_members.include?(actor)
rect = item_rect_for_text(index)
draw_item_background(index)
draw_actor_status(actor, rect.x, rect.y, rect.width, rect.height-2)
end
#--------------------------------------------------------------------------
# ● 背景色の取得
#--------------------------------------------------------------------------
def back_color
Color.new(0, 0, 0)
end
#--------------------------------------------------------------------------
# ● ステータス背景描画
#--------------------------------------------------------------------------
def draw_status_back(rect)
b = Bitmap.new(rect.width, rect.height)
r = Rect.new(0, 0, rect.width, rect.height)
b.fill_rect(r, back_color)
contents.blt(rect.x, rect.y, b, r, 128)
b.dispose
end
#--------------------------------------------------------------------------
# ● アクターステータス描画
#--------------------------------------------------------------------------
def draw_actor_status(actor, x, y, width, height)
draw_actor_menu_picture(actor, x, y + line_height / 2, width, height - (y + line_height / 2))
# draw_status_back(Rect.new(x, y + 4, width, line_height))
# draw_actor_name( actor, x, y + 4, width)
# draw_actor_icons_r(actor, x, y + 4 + line_height * 1, width)
y = height - line_height * 4 - 4
# draw_status_back(Rect.new(x, y, width, line_height * 4 + 4))
# draw_actor_class(actor, x, y + line_height * 0, width)
# draw_actor_level(actor, x+width-60, y + line_height * 1)
# draw_actor_hp( actor, x+4, y + line_height * 2, width - 8)
# draw_actor_mp( actor, x+4, y + line_height * 3, width - 8)
end
#--------------------------------------------------------------------------
# ● 項目の背景を描画
#--------------------------------------------------------------------------
def draw_item_background(index)
if index == @pending_index
contents.fill_rect(item_rect(index), pending_color)
end
end
#--------------------------------------------------------------------------
# ● 決定ボタンが押されたときの処理
#--------------------------------------------------------------------------
def process_ok
super
$game_party.menu_actor = $game_party.members[index]
end
#--------------------------------------------------------------------------
# ● 前回の選択位置を復帰
#--------------------------------------------------------------------------
def select_last
select($game_party.menu_actor.index || 0)
end
#--------------------------------------------------------------------------
# ● 保留位置(並び替え用)の設定
#--------------------------------------------------------------------------
def pending_index=(index)
last_pending_index = @pending_index
@pending_index = index
redraw_item(@pending_index)
redraw_item(last_pending_index)
end
end
#==============================================================================
# ■ Window_MenuMap
#==============================================================================
class Window_MenuMap < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, Graphics.width - 160, fitting_height(1))
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_text(4, 0, contents_width, line_height, $game_map.display_name)
end
end
class Sprite_MenuBack < Sprite
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(viewport, x, y, h)
super(viewport)
self.x = x
self.y = y
self.bitmap = Bitmap.new(Graphics.width, h)
self.bitmap.fill_rect(0, 0, Graphics.width, h, Color.new(0,0,0,128))
end
end
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.x = Graphics.width - @gold_window.width
@gold_window.y = Graphics.height - @gold_window.height
@map_window = Window_MenuMap.new(0, @gold_window.y)
end
#--------------------------------------------------------------------------
# ● ステータスウィンドウの作成
#--------------------------------------------------------------------------
def create_status_window
@status_window = Window_HorzMenuStatus.new(0, @command_window.height)
end
end