復活の「R」

ももとポーチとすなどけいを1.42に更新しました。
具体的にはバグを一つ直しました。

最終決戦前に外で8時にし、家に入ってすぐ出るとキカがおりまして。
すなどけいをくれまして。
それではももとポーチと砂時計をお楽しみくださいとか言われまして。
永遠にラスボスに挑めなくなって詰みました。

仕事中に思いついて帰って試してみたらバグってビビったわ。
まあ、自分で作ったゲームってまともにデバッグしてないしなー
専門のデバッガー雇ったらまだまだバグでるぞ、たぶん。


さて、この前コメントをいただきましてね。
今更RGSS2講座を再開いたしますよ。
こういうの超待ってたとか言われましたよ。わーい。

飽きるまでしばらく続けます。
あとで左上の方に目次も作っときます。

それではRGSS2講座、第何回だ。
メニュー画面のいじり方。


コメントでも言いましたが、KAMESOFT様にあります。
http://ytomy.sakura.ne.jp/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/menu&tech=custom_menu_command

でもまあ講座なので、すでにあるスクリプトの解説もアリかね。
コメント欄によると、「アイテム、セーブ、終了」の3つにしたいと。
たしかにRPGじゃなかったらスキルとか装備とかステータスとかいらんですわ。

デフォルトメニュー これを
メニュー減らした こういうことだろ

この場合、いじる箇所は4か所です。
ひとつずつ解説していきませう。

まずScene_Menuのここ。
メニューいじる1

#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_command_window
  s1 = Vocab::item
  s2 = Vocab::skill
  s3 = Vocab::equip
  s4 = Vocab::status
  s5 = Vocab::save
  s6 = Vocab::game_end
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
  @command_window.index = @menu_index
  if $game_party.members.size == 0 # パーティ人数が 0 人の場合
    @command_window.draw_item(0, false) # アイテムを無効化
    @command_window.draw_item(1, false) # スキルを無効化
    @command_window.draw_item(2, false) # 装備を無効化
    @command_window.draw_item(3, false) # ステータスを無効化
  end
  if $game_system.save_disabled # セーブ禁止の場合
    @command_window.draw_item(4, false) # セーブを無効化
  end
end

この、青文字の箇所を変えます。

みたらわかると思いますが、
  s1 = Vocab::item    ←アイテム
  s2 = Vocab::skill     ←スキル
  s3 = Vocab::equip    ←装備
  s4 = Vocab::status   ←ステータス
  s5 = Vocab::save    ←セーブ
  s6 = Vocab::game_end ←ゲーム終了
です。
ということはつまり。

↓こうします。
@command_window = Window_Command.new(160, [s1, s5, s6])

s1がアイテム、s5がセーブ、s6がゲーム終了なのでその3つを残すってことですね。
ちなみに気になる160は何かと言うとウィンドウの横幅です。

↓例えば60にするとこうなります。
チヂムナー
160にしときましょう。


次。
メニューいじる2
さっきのの真下じゃねーかどうしてくれる

#--------------------------------------------------------------------------
# ● コマンド選択の更新
#--------------------------------------------------------------------------
def update_command_selection
  if Input.trigger?(Input::B)
    Sound.play_cancel
    $scene = Scene_Map.new
  elsif Input.trigger?(Input::C)
    if $game_party.members.size == 0 and @command_window.index < 4
      Sound.play_buzzer
      return
    elsif $game_system.save_disabled and @command_window.index == 4
      Sound.play_buzzer
      return
    end
    Sound.play_decision
    case @command_window.index
    when 0 # アイテム
      $scene = Scene_Item.new
    when 1,2,3 # スキル、装備、ステータス
      start_actor_selection

    when 4 # セーブ
      $scene = Scene_File.new(true, false, false)
    when 5 # ゲーム終了
      $scene = Scene_End.new

    end
  end
end

さて、ここの赤文字青文字を変えます。
ここで重要なのは、「when 0」とか「when 1,2,3」とかの数字は
先程のs1,s2,s3…の数字と対応していないということです。
さっき減らした分を除外し、項目の上から順に0,1,2…となっています。

つまり、今回の場合、
0 → アイテム
1 → セーブ
2 → ゲーム終了

とするのが正解なのです。

まず青文字の箇所を削除し、赤文字の箇所を
4→1 5→2 と修正します。

when 0 # アイテム
  $scene = Scene_Item.new
when 1 # セーブ
  $scene = Scene_File.new(true, false, false)
when 2 # ゲーム終了
  $scene = Scene_End.new


これでおk。


さて、ここまでで大方完成なのですが、
このままでは例えばセーブ画面からキャンセルキーで戻った時に本来のセーブの位置に行こうとしてズレます。
では該当箇所を修正しましょう。

Scene_MenuからScene_Fileにうつります。
メニューいじる3

#--------------------------------------------------------------------------
# ● 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
  if @from_title
    $scene = Scene_Title.new
  elsif @from_event
    $scene = Scene_Map.new
  else
    $scene = Scene_Menu.new(4)
  end
end

もうおわかりですね?
4 は 1 に直すのです。

$scene = Scene_Menu.new(1)

これでおk。

ゲーム終了のほうも直しておきましょう。
Scene_Endにうつります。
メニューいじる4

#--------------------------------------------------------------------------
# ● 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
  $scene = Scene_Menu.new(5)
end

5 は 2 に直します。

$scene = Scene_Menu.new(2)

これでおk。




さて、「アイテム/セーブ/終了」の3つにする場合はこれで終了です。
ただし、例えば「アイテム」だけを消したいとかいう場合、もうちょっと複雑になります。

アイテムが消える場合、すべての項目が上にひとつずれるので、

スキル    1→0
装備     2→1
ステータス  3→2
セーブ    4→3
ゲーム終了 5→4


となります。

さっきはたまたま「スキル/装備/ステータス」が不要になったため、アクター選択が必要なくなりましたが、アクター選択が必要な項目が残っている場合は該当箇所(Scene_Menuの「● アクター選択の更新」)を同じ要領で変える必要があります。

「● 元の画面へ戻る」 に関しては、新たに
「 Scene_Skill 」「 Scene_Equip 」「 Scene_Status 」
で同じ修正が必要です。


さあ、がんばってやってみよう!!


自分で考える努力をしない奴はKAMESOFTに行って来い。
http://ytomy.sakura.ne.jp/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/menu&tech=custom_menu_command






さて、自分で考える努力をした君にご褒美だ。
KAMESOFTではできない応用テクニックを教えてやろう。

~以下、中級者編~


1.スイッチで項目を出したり消したりする

これはももでやりましたが、たとえば最初は「ポーチ(アイテム)/装備/終了」しかないのが、途中から「すなどけい(スキル)」が増えるとか、アジト4で「ポーチ(アイテム)」が消えるとかそういうやつです。

if $game_switches[1] == true
  @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
else
  @command_window = Window_Command.new(160, [s1, s3, s4, s5, s6])
end


こんな感じにすると、スイッチ1がオンのときだけスキルを表示するとかいうことができます。
もちろんここだけではなく、上で説明したすべての箇所に「if」「else」「end」を入れてください。


2.「スキル」を2種類作る

これもももでやりました。
すなわち「すなどけい」と「ケータイ」です。
まずはおなじみScene_Menuの「● コマンドウィンドウの作成」で以下のようにします。

s1 = Vocab::item
s2a = "すなどけい"
s2b = "ケータイ"

s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end

@command_window = Window_Command.new(160, [s1, s2a, s2b, s3, s4, s5, s6])


別にわざわざVocabでデータベースの「用語」からとってこなくても直接書いて大丈夫なんです。

次に、「● コマンド選択の更新」で以下のようにします。

when 1 # 砂時計
  $game_switches[1] = false
  $scene = Scene_Skill.new(@status_window.index)
when 2 # ケータイ
  $game_switches[1] = true
  $scene = Scene_Skill.new(@status_window.index)


・「ケータイ」を選んだ場合だけスイッチ1をオンにする
・アクター選択を飛ばしてスキル画面を開く

という処理をしています。
次に、Scene_Skillにうつりまして、

#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
  @actor_index = actor_index
end

ここを以下のように変更します。

#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
  if $game_switches[1] == true
    @actor_index = 1
  else
    @actor_index = 0
  end

end

つまり、スイッチ1がオフの時はアクター1のスキルを、オンの時はアクター2のスキルを開くということです。
すなどけいに該当する「よこにする」「ひっくりかえす」「おく」等のスキルはもも(アクター1)に覚えさせ、ケータイに該当する「もものいえ」「おねえちゃんのケータイ」等のスキルはマロン(アクター2)に覚えさせておくのです。

ちなみにここで言うアクター1はデータベースのID1のアクターのことではなく、単に先頭にいるアクターのことなので、ももが隊列変更で2列目以降に移動したらえらいことになります。
ももしかいない状態でケータイを使おうとしてもえらいことになるので、そのへんは「1.スイッチで項目を出したり消したりする」と併用してなんとかしてください。

あと、蛇足ですがスキル画面からキャンセルキーで戻った時にズレるため、元の画面へ戻る処理もスイッチで分岐させます。

#--------------------------------------------------------------------------
# ● 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
  #砂時計から戻るとき
  if @actor_index == 0
    $scene = Scene_Menu.new(1)
  #ケータイから戻るとき
  else
    $scene = Scene_Menu.new(2)
  end

end

以上です。これであなたにもももが作れる。



3.「相談」コマンドを作る

さて、最後にちょっと難しそうなことをしてみます。
要するに、メニューから項目を選んだ瞬間にコモンイベントに飛ばす処理です。
例によってScene_Menuの「● コマンドウィンドウの作成」で「相談」を追加します。

s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
s7 = "相談"

@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])



次に、例によって「● コマンド選択の更新」で以下のようにします。

when 0 # アイテム
  $scene = Scene_Item.new
when 1,2,3 # スキル、装備、ステータス
  start_actor_selection
when 4 # セーブ
  $scene = Scene_File.new(true, false, false)
when 5 # ゲーム終了
  $scene = Scene_End.new
when 6 # 相談
  $scene = Scene_Map.new #メニューを閉じる
  $game_temp.common_event_id = 1 #コモンイベントID1を起動


これでコモンイベント1に相談内容を書いておけば完成!
やってみたらすっごい簡単だったな

完成スクショ
ウルリカに相談だ
そんなひどい
ヒドス


相談が一番下なんて嫌だという人は今日培った知識をフルに使って修正しましょう。(丸投げ)
上級者であれば、コモンイベント起動でなく別シーンを起動してオリジナルの項目を作ることもできますが、上級者はそもそもこんな講座見ないという。

ひきも記様のスクリプト「実績メダル」をメニューから呼び出したりするのには参考になるかもしれません。



というわけで、久々なRGSS2講座はいかがでしたでしょうか。
次回は「水中判定」を解説予定。

かげろうでした。


RGSS2講座目次

RGSS2講座第7回
スポンサーサイト

コメントの投稿

非公開コメント

No title

遅コメント失礼します!!前回の講座でメニュー項目いじりのリクエストをさせて頂いたものです…ご丁寧に参考サイトまでありがとうございました。

これまたわかりやすい講座がキタ!!!ありがとうございます!!ドンピシャで謎だったところがスラッとわかりました。ありがたやありがたや…

飽きるまで続けられるとの事なのでまたまた楽しみに見させていただきます~本当にありがとうございました!!

No title

どうもどうも。

たしかに飽きるまで続けると言いましたがすでにネタが切れそうなのでなんかリクエストお願いしますよ

とか言っていきなりサイドビュー戦闘お願いしますとか言われても困るのだが
Index

ブログ趣旨
メンバー紹介
制作ゲーム紹介
RGSS2講座

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR