Custom Menu Base

■ 概  要

  • ・ カスタムメニューを使うための機能が定義されています。
  • ・ 主にメニュー全体とコマンドの設定を行います。

■ 更新履歴

■ スクリプト

■ 使用準備

■ 背景画像

画像は、Graphics/System フォルダに保存してください。

■ 用語

■ 設定項目

■ メニュー項目の設定

メニューの各項目の処理設定を行います。
どのようなコマンドなのかを設定するだけですので、メニュー画面には表示されません。
表示するには「表示項目の設定」で、表示する項目を設定する必要があります。

COMMAND_ITEMS = {}
COMMAND_ITEMS[:コマンド識別子] = {
  :name  => "項目名",      # 項目名
  :scene => :Scene_Item,   # 項目処理
}

※ コマンド識別子は、項目の識別に使用されます。重複に気をつけてください。

項目名
この設定を省略した場合は、"" となります。
:name => "項目名",

設定された名前をそのまま表示します。

:name => ["script"],

スクリプトを実行した結果を表示します。
※ 配列の要素数は、必ず1つにしてください。

:name => [num, "ON", "OFF"],
:name => ["script", "ON", "OFF"],

num で指定された番号のスイッチの状態で表示名を変更します。
最初の要素を文字列にした場合は、スクリプトの結果を使用します。
※ 配列の要素数は、必ず3つにしてください。

:name => [num, "0", "1", "2"],
:name => ["script", "0", "1", "2"],

num で指定された番号のEV変数の状態で表示名を変更します。
最初の要素を文字列にした場合は、スクリプトの結果を使用します。
※ 配列の要素数は、必ず3つ以外にしてください。

項目処理

この設定は省略できません。以下のうち必ず1つのみ設定してください。

シーン遷移のためのクラス名は、 SceneManager.call(xxx) などの xxx です。
「○○画面を呼び出すスクリプト」などのように説明されていると思います。
もし、call_xxx などの違う形の場合は、スクリプトエディタで全検索を行なうと、
おそらく定義文に SceneManager.call(xxx) という記述が見つかると思います。

:scene => scene,

切り替えるシーンを設定します。
scene は、クラス名、シンボル、文字列の3種類の設定方法がありますが、
クラス名の前に : を加えたシンボルでの設定を推奨します。
例):scene => :Scene_Item,

:command => scene,

項目選択時に実行する処理を設定します。
クラス名(Scene_Item)の場合、シーン遷移
シンボル(:command_item)の場合、ハンドラ登録
文字列の場合は、スクリプト実行となります。

:personal => scene,

アクターを選択後に実行する処理を設定します。
設定方法は、:command と同じです。

:sub => メニュー識別子,

サブコマンドを呼び出す処理を設定をします。
メインメニュー(COMMANDS[:main])でのみ使用できます。
※ 実行には、サブコマンドのスクリプトが必要です。

オプション
:enable => "script",

項目の選択が可能かを設定します。
trueのとき有効で、falseのとき無効となります。
無効の場合は、項目名が半透明で表示されます。
文字列で設定した場合は、そのスクリプトを実行した結果を使用します。

:hide => "script",

メニュー項目の表示の有無を設定します。
trueのとき非表示で、falseのときに表示します。
非表示の場合は、項目自体が表示されません。
文字列で設定した場合は、そのスクリプトを実行した結果を使用します。

:refresh => [],

コマンド実行後にウィンドウを再描画します。
(:command, :status, :help, :gold, :text, :map)
例):refresh => [:command, :status],

:continue => false,

trueに設定すると、コマンド実行後もアクター選択を継続します。

:auto_close => false,

trueに設定すると、アクター選択時コマンドを閉じます。

■ 表示項目の設定

どのコマンドをメニューに表示するのかを設定します。

自動設定
COMMANDS = {main: COMMAND_ITEMS.keys }

サブコマンドを使用しない場合は、「メニュー項目の設定」のみの設定で、
自動設定することができます。並び順も反映されます。

手動設定
COMMANDS = {}
# メインメニュー (必須) 識別子は :main
COMMANDS[:main] = [:item, :skill, :equip, :status, :formation, :file, :game_end]
# サブメニュー (複数可) 識別子は任意
COMMANDS[:sub_file] = [:save, :load]
COMMANDS[メニュー識別子] = [コマンド識別子(COMMAND_ITEMS)]

サブコマンドを使用する場合は、手動での設定が必要になります。
その際、:main の設定を必ず行ってください。
:main の設定が最初に表示されるメニューコマンドになります。
それ以外の設定は、サブコマンドとなります。
サブコマンドは、項目処理から呼び出されるまで表示されません。

■ コモンイベントの自動実行

START_COMMON_ID     = 0     # 開始前処理
TERMINATE_COMMON_ID = 0     # 終了前処理

メニューを開く時と閉じる時に自動実行されるコモンイベントを設定します。 実行するコモンイベントの番号を設定してください。 0 にすると実行しません。 また、start_common_event を使用して実行するため制限があります。

■ 使用方法

■ コモンイベント

コモンイベントを実行するには、項目処理(:command,:personal)に
以下のスクリプトを設定してください。

start_common_event(id)
マップ画面には戻らず、メニュー画面で実行します。
変数やスイッチの操作を行なうことを目的として作成されています。
※ シーン遷移の処理は、すべてのイベントコマンドを実行した後に行われます。
※ 文章の表示やバトルの処理など一部のコマンドが使用できません。
$game_temp.reserve_common_event(id)
マップ画面に戻って実行します。プリセットの動作と同じものです。
メニューへ戻るには、イベントコマンド「スクリプト」で
SceneManager.call(Scene_Menu)を実行してください。
メニューを開くタイミングが合わない場合は、上記スクリプトの後に
イベントコマンド「ウェイト」を 1 フレーム実行してください。
※ イベントコマンド「メニュー画面を開く」だと、カーソル位置が初期化されます。

選択中のアクターは、$game_party.menu_actorで取得できます。
イベントコマンドで扱いたい場合は、「変数の操作」のスクリプトに
$game_party.menu_actor.idと記入してください。アクターの ID が代入されます。