520 lines
22 KiB
Ruby
520 lines
22 KiB
Ruby
#==============================================================================
|
||
# 「ピクチャメニュー」(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 = false #マップ名
|
||
B_STATUS = false #ステータス falseにすることで枠消去
|
||
|
||
# ◇マップ名ウィンドウの横幅
|
||
|
||
MAPNAME_WIDTH = 160
|
||
|
||
# ◇パーティ5人以上の時にステータスウィンドウを2行にするか
|
||
STATUS_DOUBLE = true
|
||
|
||
|
||
# ◇メニューの項目表示数
|
||
# (表示されない分はスクロール)
|
||
|
||
C_YOKO = 5 #横
|
||
C_TATE = 2 #縦
|
||
|
||
# ◇メニューの項目設定
|
||
# trueで表示、falseで非表示に
|
||
|
||
C_1 = true #アイテム
|
||
C_2 = true #スキル
|
||
C_3 = true #装備
|
||
C_4 = true #ステータス
|
||
C_5 = false #並び替え
|
||
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
|