#============================================================================== # ■ RGSS3 タイトルで裏コマンド入力 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # タイトル画面で指定したコマンドを入力する事で # ニューゲーム時、あるいはロード時、あるいはその両方において # ゲーム開始時に特定のスイッチの状態をON、もしくはOFFに出来ます。 # これを利用する事で隠しイベント等の作成に役立ちます。 #============================================================================== module TitleExtraCommand #同じコマンドを何度でも実行出来るかどうかを指定します。 #trueで可、falseで不可。 #(何度も実行する意味はありません。プレイヤーの自己満足です) Repeat = false #コマンド入力に使用できるキーを設定します。 #デフォルトでは決定キー(:C)とShiftキー(:SHIFT)は省いています。 #SHIFTキーはAボタン(:A)で使用している為です。 #キーシンボルでの設定になりますのでご注意ください。 #いまいち意味が分からなければ、:DOWN,:LEFT,:RIGHT,:UPの #方向キー4つを表すシンボルだけで設定されるのが良いと思います。 UseK = [:DOWN,:LEFT,:RIGHT,:UP,:A,:B,:X,:Y,:Z,:L,:R,:ALT,:CTRL,:F5,:F6,:F7,:F8,:F9] #空のハッシュを用意。変更しないで下さい。 Keys = {} #以下にコマンド内容と入力成功時のSEとスイッチの変更内容を指定します。 #例1. #Keys[0] = { #:a => [:DOWN,:LEFT,:RIGHT,:UP,:DOWN,:LEFT,:RIGHT,:UP], #:se => ["Applause1",80,100], #:sw => {:type => 0,:id => [51,-52]}} # #この場合、コマンドナンバー0として #「下 左 右 上 下 左 右 上」のコマンドが設定されます。 #このコマンド入力成功時のSEとしてApplause1を音量80、ピッチ100で演奏します。 #タイプは0なので、ニューゲームとロード時どちらでも効果があり #ゲーム開始直後にスイッチID51をON、スイッチID52をOFFにします。 #例2. #Keys[1] = { #:a => [:A,:B,:X,:Y,:Z,:L,:R,:ALT,:CTRL], #:se => ["Attack1",80,150], #:sw => {:type => 1,:id => [53]}} # #この場合、コマンドナンバー1として #「A B X Y Z L R ALT、CTRL」のコマンドが設定されます。 #このコマンド入力成功時のSEとしてAttack1を音量80、ピッチ150で演奏します。 #タイプは1なので、ニューゲーム時のみ効果があり #ゲーム開始直後にスイッチID53をONにします。 #例3. #Keys[2] = { #:a => [:F5,:F6,:F7,:F8,:F9], #:se => ["Saint9",100,100], #:sw => {:type => 2,:id => [-54]}} # # #この場合、コマンドナンバー2として #「F5 F6 F7 F8 F9」のコマンドが設定されます。 #このコマンド入力成功時のSEとしてSaint9を音量100、ピッチ100で演奏します。 #タイプは2なので、ロード時のみ効果があり #ゲーム開始直後にスイッチID54をOFFにします。 Keys[0] = { :a => [:DOWN,:LEFT,:RIGHT,:UP,:DOWN,:LEFT,:RIGHT,:UP], :se => ["Applause1",80,100], :sw => {:type => 0,:id => [51]}} #-------------------------------------------------------------------------- # タイプに応じた配列を取得 #-------------------------------------------------------------------------- def self.sw_array(t) @h ||= {} @h[t] ||= [] end #-------------------------------------------------------------------------- # スイッチON/OFF #-------------------------------------------------------------------------- def self.sw_switching(t) $game_switches ||= Game_Switches.new sw_array(t).each {|i| $game_switches[i.abs] = i > 0} end #-------------------------------------------------------------------------- # スイッチ情報セーブ #-------------------------------------------------------------------------- def self.sw_save(k) a = Keys[k][:sw] d = a[:id] @h ||= {} case a[:type] when 0 sw_save1(d) sw_save2(d) when 1 sw_save1(d) when 2 sw_save2(d) end Keys.delete(k) unless Repeat end #-------------------------------------------------------------------------- # スイッチ情報セーブ1 #-------------------------------------------------------------------------- def self.sw_save1(d) @h[1] ||= [] @h[1] += d @h[1].uniq! end #-------------------------------------------------------------------------- # スイッチ情報セーブ2 #-------------------------------------------------------------------------- def self.sw_save2(d) @h[2] ||= [] @h[2] += d @h[2].uniq! end end class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # 開始 #-------------------------------------------------------------------------- alias start_title_extra_command start def start start_title_extra_command @ec_history = [] end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- alias update_title_extra_command update unless $! def update update_title_extra_command extra_command_check end #-------------------------------------------------------------------------- # コマンド[ニューゲーム] #-------------------------------------------------------------------------- alias command_new_game_title_extra_command command_new_game def command_new_game command_new_game_title_extra_command TitleExtraCommand.sw_switching(1) end #-------------------------------------------------------------------------- # コマンドチェック #-------------------------------------------------------------------------- def extra_command_check l = @ec_history.clone f = false TitleExtraCommand::UseK.each {|k| if Input.trigger?(k) @ec_history.push(k) break end} if l != @ec_history s = @ec_history.size ab = {} TitleExtraCommand::Keys.each {|k,v| if v[:a] == @ec_history se = TitleExtraCommand::Keys[k][:se] RPG::SE.new(se[0],se[1],se[2]).play TitleExtraCommand.sw_save(k) return end ab[k] = v[:a][0,s]} ab.each {|k,v| f = true if v == @ec_history} @ec_history = @ec_history[-1,1] unless f end end end class Game_System #-------------------------------------------------------------------------- # ロード後の処理 #-------------------------------------------------------------------------- alias on_after_load_title_extra_command on_after_load def on_after_load on_after_load_title_extra_command TitleExtraCommand.sw_switching(2) end end