#==============================================================================
# 「ピクチャメニュー」(ACE) ver1.2
# 製作者:奈々(なな)
# へぷたなすくろーる http://heptanas.mamagoto.com/
#
# ◇使用規約
# 使用される場合はスクリプト作成者として「奈々」を明記して下さい。
# このスクリプトを改変したり、改変したものを配布するなどは自由ですが
# その場合も元のスクリプトの作成者として名前は載せて下さい。
# その他、詳しい利用規約はブログを参照して下さい。
#
#------------------------------------------------------------------------------
#
# メニュー画面のレイアウトを変更するスクリプトです。
# コマンドが上、ステータスが下に配置され、現在地も表示されます。
# そして中央に任意のピクチャを表示することができます。
#
# スクリプトの設定により、レイアウトやデザインを変更できます。
# またイベントコマンドでピクチャを設定することで
# メニュー中央に地図や立ち絵を表示させる
# ゲームの進行によって背景が変化させるなど
# 凝ったメニュー画面を作ることが出来ます。
#
# ◇ゲーム中での設定方法
# イベントコマンドの「スクリプト」に書く
#
# 「set_npm(番号, "ファイル名", x座標, y座標, 不透明度)」
# pictureフォルダのファイル名を指定、番号は1〜8
# x座標、y座標、不透明度は省略可能で、全て0が代入される。
#
# 「clear_npm(番号)」
# 設定したピクチャを削除する。番号を0にすると全て消去。
#
# 「set_menu_background("ファイル名")」
# systemフォルダのファイル名を指定して背景を変更する。
# 初期設定と同じく""でデフォルトと同じマップ画面背景となる。
#
# 「clear_menu_background」
# 背景を初期化する。(初期設定に戻すだけ)
#
#==============================================================================
module Nana_PictureMenu
# ◇メニュー画面の背景の初期設定
# systemフォルダのファイル名を指定、""でデフォルトと同じマップ画面背景。
BACKGROUND = ""
# ◇ウィンドウ枠の表示設定
# trueで表示、falseで非表示に
B_COMMAND = true #コマンド
B_GOLD = true #所持金
B_MAPNAME = true #マップ名
B_STATUS = true #ステータス
# ◇マップ名ウィンドウの横幅
MAPNAME_WIDTH = 160
# ◇パーティ5人以上の時にステータスウィンドウを2行にするか
STATUS_DOUBLE = true
# ◇メニューの項目表示数
# (表示されない分はスクロール)
C_YOKO = 4 #横
C_TATE = 2 #縦
# ◇メニューの項目設定
# trueで表示、falseで非表示に
C_1 = true #アイテム
C_2 = true #スキル
C_3 = true #装備
C_4 = true #ステータス
C_5 = true #並び替え
C_6 = true #セーブ
C_7 = true #ゲーム終了
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● メニュー背景設定
#--------------------------------------------------------------------------
def set_menu_background(filename)
$game_system.menu_background = filename
p $game_system.menu_background
end
#--------------------------------------------------------------------------
# ● メニュー背景初期化
#--------------------------------------------------------------------------
def clear_menu_background
$game_system.menu_background = nil
end
#--------------------------------------------------------------------------
# ● メニューピクチャ設定
#--------------------------------------------------------------------------
def set_npm(number, filename, x = 0, y = 0, opacity = 255)
case number
when 1
$game_system.menu_picture1 = [filename, x, y, opacity]
when 2
$game_system.menu_picture2 = [filename, x, y, opacity]
when 3
$game_system.menu_picture3 = [filename, x, y, opacity]
when 4
$game_system.menu_picture4 = [filename, x, y, opacity]
when 5
$game_system.menu_picture5 = [filename, x, y, opacity]
when 6
$game_system.menu_picture6 = [filename, x, y, opacity]
when 7
$game_system.menu_picture7 = [filename, x, y, opacity]
when 8
$game_system.menu_picture8 = [filename, x, y, opacity]
end
end
#--------------------------------------------------------------------------
# ● メニューピクチャ削除
#--------------------------------------------------------------------------
def clear_npm(number)
case number
when 1
$game_system.menu_picture1 = nil
when 2
$game_system.menu_picture2 = nil
when 3
$game_system.menu_picture3 = nil
when 4
$game_system.menu_picture4 = nil
when 5
$game_system.menu_picture5 = nil
when 6
$game_system.menu_picture6 = nil
when 7
$game_system.menu_picture7 = nil
when 8
$game_system.menu_picture8 = nil
when 0
$game_system.menu_picture1 = nil
$game_system.menu_picture2 = nil
$game_system.menu_picture3 = nil
$game_system.menu_picture4 = nil
$game_system.menu_picture5 = nil
$game_system.menu_picture6 = nil
$game_system.menu_picture7 = nil
$game_system.menu_picture8 = nil
end
end
end
#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
# システム周りのデータを扱うクラスです。セーブやメニューの禁止状態などを保存
# します。このクラスのインスタンスは $game_system で参照されます。
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :menu_background # メニュー背景
attr_accessor :menu_picture1 # メニューピクチャ1
attr_accessor :menu_picture1_x # メニューピクチャ1のX座標
attr_accessor :menu_picture1_y # メニューピクチャ1のX座標
attr_accessor :menu_picture2 # メニューピクチャ2
attr_accessor :menu_picture2_x # メニューピクチャ2のX座標
attr_accessor :menu_picture2_y # メニューピクチャ2のX座標
attr_accessor :menu_picture3 # メニューピクチャ3
attr_accessor :menu_picture3_x # メニューピクチャ3のX座標
attr_accessor :menu_picture3_y # メニューピクチャ3のX座標
attr_accessor :menu_picture4 # メニューピクチャ4
attr_accessor :menu_picture4_x # メニューピクチャ4のX座標
attr_accessor :menu_picture4_y # メニューピクチャ4のX座標
attr_accessor :menu_picture5 # メニューピクチャ5
attr_accessor :menu_picture5_x # メニューピクチャ5のX座標
attr_accessor :menu_picture5_y # メニューピクチャ5のX座標
attr_accessor :menu_picture6 # メニューピクチャ6
attr_accessor :menu_picture6_x # メニューピクチャ6のX座標
attr_accessor :menu_picture6_y # メニューピクチャ6のX座標
attr_accessor :menu_picture7 # メニューピクチャ7
attr_accessor :menu_picture7_x # メニューピクチャ7のX座標
attr_accessor :menu_picture7_y # メニューピクチャ7のX座標
attr_accessor :menu_picture8 # メニューピクチャ8
attr_accessor :menu_picture8_x # メニューピクチャ8のX座標
attr_accessor :menu_picture8_y # メニューピクチャ8のX座標
end
#==============================================================================
# ■ Scene_MenuBase
#------------------------------------------------------------------------------
# メニュー画面系の基本処理を行うクラスです。
#==============================================================================
class Scene_MenuBase < Scene_Base
#--------------------------------------------------------------------------
# ● 背景の作成
#--------------------------------------------------------------------------
def create_background
@background_sprite = Sprite.new
if $game_system.menu_background
filename = $game_system.menu_background
else
filename = Nana_PictureMenu::BACKGROUND
end
if filename == ""
@background_sprite.bitmap = SceneManager.background_bitmap
@background_sprite.color.set(16, 16, 16, 128)
else
@background_sprite.bitmap = Cache.system(filename)
end
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_command_window
create_gold_window
create_map_window
create_status_window
create_picture_sprite
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
dispose_picture_sprite
end
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item)) if Nana_PictureMenu::C_1 == true
@command_window.set_handler(:skill, method(:command_personal)) if Nana_PictureMenu::C_2 == true
@command_window.set_handler(:equip, method(:command_personal)) if Nana_PictureMenu::C_3 == true
@command_window.set_handler(:status, method(:command_personal)) if Nana_PictureMenu::C_4 == true
@command_window.set_handler(:formation, method(:command_formation)) if Nana_PictureMenu::C_5 == true
@command_window.set_handler(:save, method(:command_save)) if Nana_PictureMenu::C_6 == true
@command_window.set_handler(:game_end, method(:command_game_end)) if Nana_PictureMenu::C_7 == true
@command_window.set_handler(:cancel, method(:return_scene))
@command_window.opacity = 0 if Nana_PictureMenu::B_COMMAND == false
end
#--------------------------------------------------------------------------
# ● ゴールドウィンドウの作成
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.x = Graphics.width - @gold_window.width
@gold_window.y = @command_window.height
@gold_window.opacity = 0 if Nana_PictureMenu::B_GOLD == false
end
#--------------------------------------------------------------------------
# ● マップ名ウィンドウの作成
#--------------------------------------------------------------------------
def create_map_window
@map_window = Window_MenuMap.new
@map_window.x = 0
@map_window.y = @command_window.height
@map_window.opacity = 0 if Nana_PictureMenu::B_MAPNAME == false
end
#--------------------------------------------------------------------------
# ● ピクチャの作成
#--------------------------------------------------------------------------
def create_picture_sprite
@picture_sprite1 = Sprite.new
@picture_sprite2 = Sprite.new
@picture_sprite3 = Sprite.new
@picture_sprite4 = Sprite.new
@picture_sprite5 = Sprite.new
@picture_sprite6 = Sprite.new
@picture_sprite7 = Sprite.new
@picture_sprite8 = Sprite.new
if $game_system.menu_picture1
@picture_sprite1.bitmap = Cache.picture($game_system.menu_picture1[0])
@picture_sprite1.x = $game_system.menu_picture1[1]
@picture_sprite1.y = $game_system.menu_picture1[2]
@picture_sprite1.opacity = $game_system.menu_picture1[3]
end
if $game_system.menu_picture2
@picture_sprite2.bitmap = Cache.picture($game_system.menu_picture2[0])
@picture_sprite2.x = $game_system.menu_picture2[1]
@picture_sprite2.y = $game_system.menu_picture2[2]
@picture_sprite2.opacity = $game_system.menu_picture2[3]
end
if $game_system.menu_picture3
@picture_sprite3.bitmap = Cache.picture($game_system.menu_picture3[0])
@picture_sprite3.x = $game_system.menu_picture3[1]
@picture_sprite3.y = $game_system.menu_picture3[2]
@picture_sprite3.opacity = $game_system.menu_picture3[3]
end
if $game_system.menu_picture4
@picture_sprite4.bitmap = Cache.picture($game_system.menu_picture4[0])
@picture_sprite4.x = $game_system.menu_picture4[1]
@picture_sprite4.y = $game_system.menu_picture4[2]
@picture_sprite4.opacity = $game_system.menu_picture4[3]
end
if $game_system.menu_picture5
@picture_sprite5.bitmap = Cache.picture($game_system.menu_picture5[0])
@picture_sprite5.x = $game_system.menu_picture5[1]
@picture_sprite5.y = $game_system.menu_picture5[2]
@picture_sprite5.opacity = $game_system.menu_picture5[3]
end
if $game_system.menu_picture6
@picture_sprite6.bitmap = Cache.picture($game_system.menu_picture6[0])
@picture_sprite6.x = $game_system.menu_picture6[1]
@picture_sprite6.y = $game_system.menu_picture6[2]
@picture_sprite6.opacity = $game_system.menu_picture6[3]
end
if $game_system.menu_picture7
@picture_sprite7.bitmap = Cache.picture($game_system.menu_picture7[0])
@picture_sprite7.x = $game_system.menu_picture7[1]
@picture_sprite7.y = $game_system.menu_picture7[2]
@picture_sprite7.opacity = $game_system.menu_picture7[3]
end
if $game_system.menu_picture8
@picture_sprite8.bitmap = Cache.picture($game_system.menu_picture8[0])
@picture_sprite8.x = $game_system.menu_picture8[1]
@picture_sprite8.y = $game_system.menu_picture8[2]
@picture_sprite8.opacity = $game_system.menu_picture8[3]
end
end
#--------------------------------------------------------------------------
# ● ピクチャの解放
#--------------------------------------------------------------------------
def dispose_picture_sprite
@picture_sprite1.dispose
@picture_sprite2.dispose
@picture_sprite3.dispose
@picture_sprite4.dispose
@picture_sprite5.dispose
@picture_sprite6.dispose
@picture_sprite7.dispose
@picture_sprite8.dispose
end
end
#==============================================================================
# ■ Window_MenuMap
#------------------------------------------------------------------------------
# 所持金を表示するウィンドウです。
#==============================================================================
class Window_MenuMap < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, window_width, fitting_height(1))
refresh
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return Nana_PictureMenu::MAPNAME_WIDTH
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_text(4, 0, contents.width - 8, line_height, value)
end
#--------------------------------------------------------------------------
# ● マップ名の取得
#--------------------------------------------------------------------------
def value
$game_map.display_name
end
#--------------------------------------------------------------------------
# ● ウィンドウを開く
#--------------------------------------------------------------------------
def open
refresh
super
end
end
#==============================================================================
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
# メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :pending_index # 保留位置(並び替え用)
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, window_width, window_height)
self.x = 0
self.y = Graphics.height - window_height
@pending_index = -1
self.opacity = 0 if Nana_PictureMenu::B_STATUS == false
refresh
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
416 / (item_max > 4 && Nana_PictureMenu::STATUS_DOUBLE ? 2 : 4)
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
return 4
end
#--------------------------------------------------------------------------
# ● 項目の高さを取得
#--------------------------------------------------------------------------
def item_height
(window_height - standard_padding * 2) / (item_max > 4 && Nana_PictureMenu::STATUS_DOUBLE ? 2 : 1)
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.members[index]
enabled = $game_party.battle_members.include?(actor)
rect = item_rect(index)
draw_item_background(index)
draw_actor_simple_status(actor, rect.x + 2, rect.y + 2)
end
#--------------------------------------------------------------------------
# ● シンプルなステータスの描画
#--------------------------------------------------------------------------
def draw_actor_simple_status(actor, x, y)
draw_actor_name(actor, x, y)
if window_width >= 640
draw_actor_icons(actor, x + 80, y)
draw_actor_hp(actor, x, y + line_height * 1)
draw_actor_mp(actor, x, y + line_height * 2)
else
draw_actor_hp(actor, x, y + line_height * 1, 100)
draw_actor_mp(actor, x, y + line_height * 2, 100)
end
end
end
#==============================================================================
# ■ Window_MenuCommand
#------------------------------------------------------------------------------
# メニュー画面で表示するコマンドウィンドウです。
#==============================================================================
class Window_MenuCommand < Window_Command
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return Graphics.width
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
return Nana_PictureMenu::C_YOKO
end
#--------------------------------------------------------------------------
# ● 表示行数の取得
#--------------------------------------------------------------------------
def visible_line_number
return Nana_PictureMenu::C_TATE
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
add_formation_command if Nana_PictureMenu::C_5 == true
add_original_commands
add_save_command if Nana_PictureMenu::C_6 == true
add_game_end_command if Nana_PictureMenu::C_7 == true
end
#--------------------------------------------------------------------------
# ● 主要コマンドをリストに追加
#--------------------------------------------------------------------------
def add_main_commands
add_command(Vocab::item, :item, main_commands_enabled) if Nana_PictureMenu::C_1 == true
add_command(Vocab::skill, :skill, main_commands_enabled) if Nana_PictureMenu::C_2 == true
add_command(Vocab::equip, :equip, main_commands_enabled) if Nana_PictureMenu::C_3 == true
add_command(Vocab::status, :status, main_commands_enabled) if Nana_PictureMenu::C_4 == true
end
end