赞 | 170 |
VIP | 6 |
好人卡 | 208 |
积分 | 229 |
经验 | 137153 |
最后登录 | 2024-11-14 |
在线时间 | 8638 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 22943
- 在线时间
- 8638 小时
- 注册时间
- 2011-12-31
- 帖子
- 3367
|
- #==============================================================================
- # ★ スペシャルアタック+特殊スキル
- # 作成・配布元:misty_rain(http://kilisamenosekai.web.fc2.com/)
- # ver:1.3 作成(2014/10/13)
- #
- # スペシャルアタックに指定されたスキルIDのスキルが使われた時、
- # 特殊な入力をさせ、その結果で威力を補正します
- #
- # スペシャルアタック1:連打
- # 制限時間内に特定のボタンを連打し、その連打回数でダメージを補正します。
- # スペシャルアタック2:ランダムコマンド入力
- # 制限時間内に指定されるボタンを入力し、その成否でダメージを補正します。
- # スペシャルアタック3:ジャストヒット
- # ゲージ中に1個ある☆の位置でボタン押下し、その成否でダメージを補正します。
- # ☆からずれていても小当たりとして設定できます。
- # ゲージは制限時間内なら何度も動きます。
- # スペシャルアタック4:ジャストヒットN
- # ゲージ中に複数ある☆の位置でボタン押下し、その成否回数でダメージを補正します。
- # ☆にぴったり合っていないとカウントされません。
- # ゲージは一度通り過ぎたら終わります。
- # ☆の数より多く押下しても無効です(連射対策)。
- #
- # ver1.0:公開(2011/01/06)
- # ver1.1:ダメージへの反映を後から変更しやすく(2012/03/22)
- # ver1.2:バグ修正(2012/06/15)
- # ver1.3:メニューでヒールすると落ちるバグ修正(2014/10/15)
- #
- #==============================================================================
- # ■ MR_SPECIAL_ATTACK_CUSTOM
- #------------------------------------------------------------------------------
- # 自由にカスタマイズしてください
- #==============================================================================
- module MR_SPECIAL_ATTACK_CUSTOM
- # 連打対象スキルID=>[制限時間(秒),最低レート,1打レート,最高レート]
- RENDA_INFO = {
- 80=>[5,0,1,100],
- 132=>[5,0,1,100]
- }
- # 連打するボタン
- RENDA_BTN = :C
- # 連打スキル制限時間表示のメッセージ1
- RENDA_MSG_TIME1 = "決定ボタンを連打しろ! 残 "
- # 連打スキル制限時間表示のメッセージ2
- RENDA_MSG_TIME2 = " 秒"
- # 連打回数表示時のメッセージ1
- RENDA_MSG_RET1 = ""
- # 連打回数表示時のメッセージ2
- RENDA_MSG_RET2 = "Hits!"
-
- # ランダムコマンド入力対象
- # スキルID=>[制限時間(秒),失敗時レート,成功時レート,入力数]
- RNDCMD_INFO = {
- 81=>[3,0,100,5],
- 85=>[3,0,100,5]
- }
- # ランダムコマンド入力キー
- RNDCMD_KEYS = [:DOWN,:LEFT,:RIGHT,:UP,:C]
- # ランダムコマンド入力キー表示文字(全角一文字推奨)
- RNDCMD_KEY_OUTS = ["↓","←","→","↑","C"]
- # ランダムコマンド入力キー表示文字間
- RNDCMD_KEY_OUTS_SPACE = " "
- # ランダムコマンド入力一つ成功
- RNDCMD_KEY_OUTS_OK = "○"
- # ランダムコマンド入力スキル制限時間表示のメッセージ1
- RNDCMD_MSG_TIME1 = "コマンドを入力しろ! 残 "
- # ランダムコマンド入力スキル制限時間表示のメッセージ2
- RNDCMD_MSG_TIME2 = " 秒"
- # ランダムコマンド入力成功時のメッセージ
- RNDCMD_MSG_RET_OK = "コマンド入力成功!"
- # ランダムコマンド入力失敗時のメッセージ
- RNDCMD_MSG_RET_NG = "コマンド入力失敗・・・orz"
-
- # ジャストヒット入力対象
- # スキルID=>[制限時間(秒),失敗時レート,ヒット時レート,ジャストヒット時レート,
- # 速さ,ゲージ長,ジャストヒット位置,ヒット許可数左,ヒット許可数右]
- JSTHIT_INFO = {
- 82=>[5,0,75,100,2,21,11,2,2],
- 86=>[5,0,75,100,2,21,11,2,2]
- }
- # ジャストヒットで押下するボタン
- JSTHIT_BTN = :C
- # ジャストヒットスキル制限時間表示のメッセージ1
- JSTHIT_MSG_TIME1 = "☆の位置で決定ボタンを押せ! 残 "
- # ジャストヒットスキル制限時間表示のメッセージ2
- JSTHIT_MSG_TIME2 = " 秒"
- # ジャストヒットゲージ_ミス_オフ
- JSTHIT_GAGE_MISS_OFF= "・"
- # ジャストヒットゲージ_ミス_オン
- JSTHIT_GAGE_MISS_ON= "|"
- # ジャストヒットゲージ_ヒット_オフ
- JSTHIT_GAGE_HIT_OFF= "○"
- # ジャストヒットゲージ_ヒット_オン
- JSTHIT_GAGE_HIT_ON= "●"
- # ジャストヒットゲージ_ジャストヒット_オフ
- JSTHIT_GAGE_JUSTHIT_OFF= "☆"
- # ジャストヒットゲージ_ジャストヒット_オン
- JSTHIT_GAGE_JUSTHIT_ON= "★"
- # ジャストヒット時のメッセージ
- JSTHIT_JUST_HIT = "Graet!"
- # ヒット時のメッセージ
- JSTHIT_HIT = "OK"
- # ヒット時のメッセージ
- JSTHIT_MISS = "Miss..."
-
- # ジャストヒットN入力対象
- # スキルID=>[最低レート,1ヒット加算レート,速さ,ゲージ長]
- JSTHITN_INFO = {
- 83=>[0,50,2,60],
- 87=>[0,50,2,60]
- }
- # ジャストヒットNヒット位置定義
- # スキルID=>[ヒット位置1,ヒット位置2,ヒット位置3・・・]
- JSTHITN_HIT_INFO = {
- 84=>[10,20,30,50,55],
- 88=>[10,20,30,50,55]
- }
- # ジャストヒットNで押下するボタン
- JSTHITN_BTN = :C
- # ジャストヒットNスキル制限時間表示のメッセージ
- JSTHITN_MSG_TIME = "↓☆がこの位置に来たら決定ボタンを押せ!"
- # ジャストヒットNゲージ_ミス_オフ
- JSTHITN_GAGE_MISS_OFF = "・"
- # ジャストヒットNゲージ_ミス_オン
- JSTHITN_GAGE_MISS_ON = "□"
- # ジャストヒットNゲージ_ヒット_オフ
- JSTHITN_GAGE_JUSTHIT_OFF = "☆"
- # ジャストヒットNゲージ_ヒット_オン
- JSTHITN_GAGE_JUSTHIT_ON = "■"
- # ヒット数のメッセージ
- JSTHITN_HIT = "Hits!"
- end
- #==============================================================================
- # ■ Scene_Battle
- #------------------------------------------------------------------------------
- # バトル画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 連打一打
- #--------------------------------------------------------------------------
- def se_renda
- RPG::SE.new("Cursor2", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド入力OK
- #--------------------------------------------------------------------------
- def se_rndcmd_ok
- RPG::SE.new("Chime2", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド入力NG
- #--------------------------------------------------------------------------
- def se_rndcmd_ng
- RPG::SE.new("Buzzer1", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒット入力大当たり
- #--------------------------------------------------------------------------
- def se_jsthit_justhit
- RPG::SE.new("Chime2", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒット入力小当たり
- #--------------------------------------------------------------------------
- def se_jsthit_hit
- RPG::SE.new("Decision2", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒット入力ミス
- #--------------------------------------------------------------------------
- def se_jsthit_miss
- RPG::SE.new("Buzzer1", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットN入力当たり
- #--------------------------------------------------------------------------
- def se_jsthitn_hit
- RPG::SE.new("Decision2", 100, 100).play
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットN入力ミス
- #--------------------------------------------------------------------------
- def se_jsthitn_miss
- RPG::SE.new("Buzzer1", 100, 100).play
- end
- end
- #==============================================================================
- # ■ MR_SPECIAL_ATTACK
- #------------------------------------------------------------------------------
- # 定数
- #==============================================================================
- module MR_SPECIAL_ATTACK
- #
- TYPE_NONE = 0
- TYPE_RENDA = 1
- TYPE_RNDCMD = 2
- TYPE_JSTHIT = 3
- TYPE_JSTHITN = 4
-
- FRAME_RATE = 60
- end
- #==============================================================================
- # ■ Game_Battler
- #------------------------------------------------------------------------------
- # スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス
- # は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。
- #==============================================================================
- class Game_Battler < Game_BattlerBase
- #--------------------------------------------------------------------------
- # ● ダメージ計算 再定義
- #--------------------------------------------------------------------------
- def make_damage_value(user, item, ssr = nil)
- value = item.damage.eval(user, self, $game_variables)
- value *= item_element_rate(user, item)
- value *= pdr if item.physical?
- value *= mdr if item.magical?
- value *= rec if item.damage.recover?
- # ↓追加
- #p "ダメージ = " + value.to_s
- #p " スペシャルアタックレート = " + $special_attack_rate.to_s
- value = sp_attack_to_damage(user,item,value,ssr)
- #p "ダメージ反映結果 = " + value.to_s
- # ↑追加
- value = apply_critical(value) if @result.critical
- value = apply_variance(value, item.damage.variance)
- value = apply_guard(value)
- @result.make_damage(value.to_i, item)
- end
- #--------------------------------------------------------------------------
- # ● ダメージにスペシャルアタック反映
- #--------------------------------------------------------------------------
- def sp_attack_to_damage(user,item,value,ssr)
- ret = value
- # スペシャルアタックの反映
- if $special_attack_rate == nil
- $special_attack_rate = 100
- end
- ret = (ret * $special_attack_rate) / 100
- return ret
- end
- end
- #==============================================================================
- # ■ Scene_Battle
- #------------------------------------------------------------------------------
- # バトル画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias mr_ac0201_start start
- def start
- mr_ac0201_start
- init_special_attack
- # スペシャルアタックによるアタックレート
- $special_attack_rate = 100
- end
- #--------------------------------------------------------------------------
- # ● スペシャルアタック関連変数(メンバ)の初期化
- #--------------------------------------------------------------------------
- def init_special_attack
- @special_attack = false
- @special_type = MR_SPECIAL_ATTACK::TYPE_NONE
- @special_id = 0
- @special_frm_cnt = 0
- @special_ret = 0
-
- @renda_times = 0
- end
- #--------------------------------------------------------------------------
- # ● 戦闘行動の処理 再定義
- #--------------------------------------------------------------------------
- def process_action
- return if scene_changing?
- # ↓追加
- if @special_attack == true
- process_special_attack
- return
- end
- # ↑追加
- if !@subject || [email protected]_action
- @subject = BattleManager.next_subject
- end
- return turn_end unless @subject
- if @subject.current_action
- @subject.current_action.prepare
- if @subject.current_action.valid?
- # ↓追加
- if @special_attack == false \
- and @subject.current_action.item.is_a?(RPG::Skill )
- id = @subject.current_action.item.id
- chk = MR_SPECIAL_ATTACK_CUSTOM::RENDA_INFO[id]
- if chk != nil
- #p "連打スキル開始"
- @special_id = id
- @special_frm_cnt = 0
- @special_type = MR_SPECIAL_ATTACK::TYPE_RENDA
- @special_attack = true
- process_special_attack
- return
- else
- chk = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[id]
- if chk != nil
- #p "ランダムコマンド入力スキル開始"
- @special_id = id
- @special_frm_cnt = 0
- @special_type = MR_SPECIAL_ATTACK::TYPE_RNDCMD
- @special_attack = true
- process_special_attack
- return
- else
- chk = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[id]
- if chk != nil
- #p "ジャストヒット入力スキル開始"
- @special_id = id
- @special_frm_cnt = 0
- @special_type = MR_SPECIAL_ATTACK::TYPE_JSTHIT
- @special_attack = true
- process_special_attack
- return
- else
- chk = MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[id]
- if chk != nil
- #p "ジャストヒットN入力スキル開始"
- @special_id = id
- @special_frm_cnt = 0
- @special_type = MR_SPECIAL_ATTACK::TYPE_JSTHITN
- @special_attack = true
- process_special_attack
- return
- end
- end
- end
- end
- end
- # ↑追加
- @status_window.open
- execute_action
- # ↓追加
- $special_attack_rate = 100
- # ↑追加
- end
- @subject.remove_current_action
- end
- process_action_end unless @subject.current_action
- end
- #--------------------------------------------------------------------------
- # ● 戦闘行動の実行 再定義
- #--------------------------------------------------------------------------
- def execute_action(flg = true)
- @subject.sprite_effect_type = :whiten
- # ↓変更
- #use_item
- # "○○の攻撃!"はスペシャルアタック後で表示するのは不自然な気がするので消す
- use_item(flg)
- # ↑変更
- @log_window.wait_and_clear
- end
- #--------------------------------------------------------------------------
- # ● スキル/アイテムの使用 再定義
- #--------------------------------------------------------------------------
- def use_item(flg = true)
- item = @subject.current_action.item
- # ↓変更
- #@log_window.display_use_item(@subject, item)
- # "○○の攻撃!"はスペシャルアタック後で表示するのは不自然な気がするので消す
- if flg == true
- @log_window.display_use_item(@subject, item)
- end
- # ↑変更
- @subject.use_item(item)
- refresh_status
- targets = @subject.current_action.make_targets.compact
- show_animation(targets, item.animation_id)
- targets.each {|target| item.repeats.times { invoke_item(target, item) } }
- end
- #--------------------------------------------------------------------------
- # ● スペシャルアタックの処理
- #--------------------------------------------------------------------------
- def process_special_attack
- case(@special_type)
- when MR_SPECIAL_ATTACK::TYPE_NONE
- @special_attack = false
- when MR_SPECIAL_ATTACK::TYPE_RENDA
- process_special_attack_renda
- when MR_SPECIAL_ATTACK::TYPE_RNDCMD
- process_special_attack_rndcmd
- when MR_SPECIAL_ATTACK::TYPE_JSTHIT
- process_special_attack_jsthit
- when MR_SPECIAL_ATTACK::TYPE_JSTHITN
- process_special_attack_jsthitn
- else
- @special_attack = false
- end
- if @special_frm_cnt % MR_SPECIAL_ATTACK::FRAME_RATE == 0
- #p "スペシャルアタック中!:" \
- # + (@special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE).to_s
- end
- if @special_attack == false
- process_special_attack_end
- end
- end
- #--------------------------------------------------------------------------
- # ● スペシャルアタックの終了処理
- #--------------------------------------------------------------------------
- def process_special_attack_end
- #p "終了"
- init_special_attack
- # 戦闘行動の処理後半と同じ処理
- @status_window.open
- # "○○の攻撃!"はスペシャルアタック後で表示するのは不自然な気がするので消す
- execute_action(false)
- $special_attack_rate = 100
- @subject.remove_current_action
- process_action_end unless @subject.current_action
- end
- #--------------------------------------------------------------------------
- # ▲▲▲スペシャルアタック1:連打▲▲▲
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # ● 連打の出力先クリア
- #--------------------------------------------------------------------------
- def renda_output_clear
- @log_window.clear
- end
- #--------------------------------------------------------------------------
- # ● 連打の出力 スキル発動メッセージ
- #--------------------------------------------------------------------------
- def renda_output_display_use_item
- item = @subject.current_action.item
- @log_window.display_use_item(@subject, item)
- end
- #--------------------------------------------------------------------------
- # ● 連打の出力
- #--------------------------------------------------------------------------
- def renda_output(str)
- @log_window.add_text(str)
- end
- #--------------------------------------------------------------------------
- # ● 連打の処理
- #--------------------------------------------------------------------------
- def process_special_attack_renda
- # フレームと残り秒数の取得
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::RENDA_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- # 1秒ごとの処理
- if @special_frm_cnt % MR_SPECIAL_ATTACK::FRAME_RATE == 0
- renda_output_clear
- renda_output_display_use_item
- renda_output(MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_TIME2)
- renda_output(MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET1 + \
- @renda_times.to_s + MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET2)
- # 初回の処理
- if @special_frm_cnt == 0
- @renda_times = 0
- end
- end
- @special_frm_cnt = @special_frm_cnt + 1
- # 一打の処理
- if Input.trigger?(MR_SPECIAL_ATTACK_CUSTOM::RENDA_BTN)
- @renda_times = @renda_times + 1
- se_renda
- renda_output_clear
- renda_output_display_use_item
- renda_output(MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_TIME2)
- renda_output(MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET1 + \
- @renda_times.to_s + MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET2)
- #p "連打!" + @renda_times.to_s
- end
- # 制限時間経過事(終了)の処理
- if (@special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE) == t_limit
- renda_output_clear
- renda_output(MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET1 + \
- @renda_times.to_s + MR_SPECIAL_ATTACK_CUSTOM::RENDA_MSG_RET2)
- # 最低レート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::RENDA_INFO[@special_id][1]
- #p "最低レート:" + @special_ret.to_s
- # 連打数の反映
- a = MR_SPECIAL_ATTACK_CUSTOM::RENDA_INFO[@special_id][2]
- a = a * @renda_times
- @special_ret = @special_ret + a
- #p "連打数反映:" + @special_ret.to_s
- # 最高レート
- b = MR_SPECIAL_ATTACK_CUSTOM::RENDA_INFO[@special_id][3]
- if @special_ret > b
- @special_ret = b
- #p "最高レートを突破した為、修正:" + @special_ret.to_s
- end
- #p "結果:" + @special_ret.to_s
- $special_attack_rate = @special_ret
- @special_attack = false
- end
- end
- #--------------------------------------------------------------------------
- # ▲▲▲スペシャルアタック2:ランダムコマンド▲▲▲
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # ● ランコマの出力先クリア
- #--------------------------------------------------------------------------
- def rndcmd_output_clear
- @log_window.clear
- end
- #--------------------------------------------------------------------------
- # ● ランコマの出力 スキル発動メッセージ
- #--------------------------------------------------------------------------
- def rndcmd_output_display_use_item
- item = @subject.current_action.item
- @log_window.display_use_item(@subject, item)
- end
- #--------------------------------------------------------------------------
- # ● ランコマの出力
- #--------------------------------------------------------------------------
- def rndcmd_output(str)
- @log_window.add_text(str)
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド決定処理
- #--------------------------------------------------------------------------
- def rndcmd_desc(t)
- @rndcmds = []
- @rndcmds_txt = ""
- for i in 0...t
- j = rand(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEYS.size)
- @rndcmds.push(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEYS[j])
- @rndcmds_txt = @rndcmds_txt + \
- MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEY_OUTS[j] + \
- MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEY_OUTS_SPACE
- end
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド入力状況初期化
- #--------------------------------------------------------------------------
- def rndcmd_input_init
- @rndcmds_input_ok = 0
- @rndcmds_input_txt = ""
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド入力状況OK追加
- #--------------------------------------------------------------------------
- def rndcmd_input_ok
- # フレームと残り秒数の取得
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- se_rndcmd_ok
- @rndcmds_input_ok = @rndcmds_input_ok + 1
- @rndcmds_input_txt = @rndcmds_input_txt + \
- MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEY_OUTS_OK + \
- MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_KEY_OUTS_SPACE
- rndcmd_output_clear
- rndcmd_output_display_use_item
- rndcmd_output(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME2)
- rndcmd_ret_output
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド入力状況NG
- #--------------------------------------------------------------------------
- def rndcmd_input_ng
- # フレームと残り秒数の取得
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- se_rndcmd_ng
- rndcmd_input_init
- rndcmd_output_clear
- rndcmd_output_display_use_item
- rndcmd_output(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME2)
- rndcmd_ret_output
- end
- #--------------------------------------------------------------------------
- # ● ランダムコマンド、成否状況出力処理
- #--------------------------------------------------------------------------
- def rndcmd_ret_output
- rndcmd_output(@rndcmds_txt)
- rndcmd_output(@rndcmds_input_txt)
- end
- #--------------------------------------------------------------------------
- # ● ランコマの処理
- #--------------------------------------------------------------------------
- def process_special_attack_rndcmd
- # フレームと残り秒数の取得
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- # 1秒ごとの処理
- if @special_frm_cnt % MR_SPECIAL_ATTACK::FRAME_RATE == 0
- # 初回の処理
- if @special_frm_cnt == 0
- rndcmd_desc(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][3])
- rndcmd_input_init
- end
- rndcmd_output_clear
- rndcmd_output_display_use_item
- rndcmd_output(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_TIME2)
- rndcmd_ret_output
- end
- @special_frm_cnt = @special_frm_cnt + 1
- # 一打の処理
- if Input.trigger?(@rndcmds[@rndcmds_input_ok])
- rndcmd_input_ok
- #p "成功!" + @rndcmds_input_ok.to_s
- else
- if Input.trigger?(:DOWN)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:UP)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:RIGHT)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:LEFT)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:A)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:B)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:C)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:X)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:Y)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:Z)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:L)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:R)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:Shift)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:CTRL)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- elsif Input.trigger?(:ALT)
- rndcmd_input_ng
- #p "失敗" + @rndcmds_input_ok.to_s
- end
- end
- # 制限時間経過事(終了)、または全部入力終了時の処理
- if (@special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE) == t_limit \
- or @rndcmds_input_ok == @rndcmds.size
- rndcmd_output_clear
- # 成功時
- if @rndcmds_input_ok == @rndcmds.size
- rndcmd_output(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_RET_OK)
- # 成功レート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][2]
- #p "成功レート:" + @special_ret.to_s
- else
- # 失敗時
- rndcmd_output(MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_MSG_RET_NG)
- # 失敗レート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::RNDCMD_INFO[@special_id][1]
- #p "失敗レート:" + @special_ret.to_s
- end
- #p "結果:" + @special_ret.to_s
- $special_attack_rate = @special_ret
- @special_attack = false
- end
- end
- #--------------------------------------------------------------------------
- # ▲▲▲スペシャルアタック3:ジャストヒット▲▲▲
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # ● ジャスヒの出力先クリア
- #--------------------------------------------------------------------------
- def jsthit_output_clear
- @log_window.clear
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒの出力 スキル発動メッセージ
- #--------------------------------------------------------------------------
- def jsthit_output_display_use_item
- item = @subject.current_action.item
- @log_window.display_use_item(@subject, item)
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒの出力
- #--------------------------------------------------------------------------
- def jsthit_output(str)
- @log_window.add_text(str)
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒット入力状況初期化
- #--------------------------------------------------------------------------
- def jsthit_input_init
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- @jsthit_cnt = 0
- @jsthit_pos = 1
- jsthit_output_clear
- jsthit_output_display_use_item
- jsthit_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_MSG_TIME2)
- jsthit_gage_output
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットゲージ進行処理
- #--------------------------------------------------------------------------
- def jsthit_count
- # 速さ
- if @jsthit_cnt == MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][4]
- if @jsthit_pos == MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][5]
- @jsthit_pos = 1
- else
- @jsthit_pos = @jsthit_pos + 1
- end
- @jsthit_cnt = 0
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- jsthit_output_clear
- jsthit_output_display_use_item
- jsthit_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_MSG_TIME1 \
- + t_zan.to_s + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_MSG_TIME2)
- jsthit_gage_output
- else
- @jsthit_cnt = @jsthit_cnt + 1
- end
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットゲージ出力処理
- #--------------------------------------------------------------------------
- def jsthit_gage_output
- @jsthits_txt = ""
- # ゲージ長
- for i in 1..MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][5]
- if i == @jsthit_pos
- # ジャストヒット位置
- if i == MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6]
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_JUSTHIT_ON
- # ヒット
- elsif (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- - MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][7]) <= i \
- and i <= (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][8])
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_HIT_ON
- else
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_MISS_ON
- end
- else
- # ジャストヒット位置
- if i == MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6]
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_JUSTHIT_OFF
- # ヒット
- elsif (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- - MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][7]) <= i \
- and i <= (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][8])
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_HIT_OFF
- else
- @jsthits_txt = @jsthits_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_GAGE_MISS_OFF
- end
- end
-
- end
- jsthit_output(@jsthits_txt)
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒの処理
- #--------------------------------------------------------------------------
- def process_special_attack_jsthit
- # フレームと残り秒数の取得
- t_limit = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][0]
- t_zan = t_limit - @special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE
- # 1秒ごとの処理
- if @special_frm_cnt % MR_SPECIAL_ATTACK::FRAME_RATE == 0
- # 初回の処理
- if @special_frm_cnt == 0
- jsthit_input_init
- end
- end
- jsthit_count
- @special_frm_cnt = @special_frm_cnt + 1
- # 制限時間経過事(終了)、または全部入力終了時の処理
- if (@special_frm_cnt / MR_SPECIAL_ATTACK::FRAME_RATE) == t_limit \
- or Input.trigger?(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_BTN)
- jsthit_output_clear
- # ジャストヒット位置
- if @jsthit_pos == MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6]
- jsthit_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_JUST_HIT)
- se_jsthit_justhit
- # ジャストヒットレート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][3]
- p "ジャストヒットレート:" + @special_ret.to_s
- # ヒット
- elsif (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- - MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][7]) <= @jsthit_pos \
- and @jsthit_pos <= (MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][6] \
- + MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][8])
- jsthit_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_HIT)
- se_jsthit_hit
- # ヒットレート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][2]
- #p "ヒットレート:" + @special_ret.to_s
- else
- se_jsthit_miss
- jsthit_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_MISS)
- # 失敗レート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::JSTHIT_INFO[@special_id][1]
- #p "失敗レート:" + @special_ret.to_s
- end
- jsthit_gage_output
- #p "結果:" + @special_ret.to_s
- $special_attack_rate = @special_ret
- @special_attack = false
- end
- end
-
- #--------------------------------------------------------------------------
- # ▲▲▲スペシャルアタック4:ジャストヒットN▲▲▲
- #--------------------------------------------------------------------------
- #--------------------------------------------------------------------------
- # ● ジャスヒNの出力先クリア
- #--------------------------------------------------------------------------
- def jsthitn_output_clear
- @log_window.clear
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒNの出力 スキル発動メッセージ
- #--------------------------------------------------------------------------
- def jsthitn_output_display_use_item
- item = @subject.current_action.item
- @log_window.display_use_item(@subject, item)
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒNの出力
- #--------------------------------------------------------------------------
- def jsthitn_output(str)
- @log_window.add_text(str)
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットN入力状況初期化
- #--------------------------------------------------------------------------
- def jsthitn_input_init
- @jsthitn_cnt = 0
- @jsthitn_hitcnt = 0
- @jsthitn_pos = 1
- @jsthitn_pushcnt = 0
- @jsthitn_hitted = []
- jsthitn_output_clear
- jsthitn_output_display_use_item
- jsthitn_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_MSG_TIME)
- jsthitn_gage_output
- @jsthitn_next_hit = 999
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットNゲージ進行処理
- #--------------------------------------------------------------------------
- def jsthitn_count
- # 速さ
- if @jsthitn_cnt == MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][2]
- if @jsthitn_pos != MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][3]
- @jsthitn_pos = @jsthitn_pos + 1
- end
- @jsthitn_cnt = 0
- jsthitn_output_clear
- jsthitn_output_display_use_item
- jsthitn_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_MSG_TIME)
- jsthitn_gage_output
- else
- @jsthitn_cnt = @jsthitn_cnt + 1
- end
- end
- #--------------------------------------------------------------------------
- # ● ジャストヒットNゲージ出力処理
- #--------------------------------------------------------------------------
- def jsthitn_gage_output
- @jsthitns_txt = ""
- # ゲージ長
- j = 999
- for k in 0...MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id].size
- if MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][k] >= @jsthitn_pos \
- and j > k
- j = k
- #p "#{j.to_s]"
- end
- end
- e = @jsthitn_pos + 29
- if e > MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][3]
- e = MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][3]
- end
- for i in @jsthitn_pos..e
- if i == @jsthitn_pos
- # ヒットN位置
- if i == MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][j]
- j = j + 1
- @jsthitns_txt = @jsthitns_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_GAGE_JUSTHIT_ON
- else
- @jsthitns_txt = @jsthitns_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_GAGE_MISS_ON
- end
- else
- # ヒットN位置
- if i == MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][j]
- j = j + 1
- @jsthitns_txt = @jsthitns_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_GAGE_JUSTHIT_OFF
- else
- @jsthitns_txt = @jsthitns_txt + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_GAGE_MISS_OFF
- end
- end
- end
- jsthitn_output(@jsthitns_txt)
- end
- #--------------------------------------------------------------------------
- # ● ジャスヒNの処理
- #--------------------------------------------------------------------------
- def process_special_attack_jsthitn
- # 1秒ごとの処理
- if @special_frm_cnt % MR_SPECIAL_ATTACK::FRAME_RATE == 0
- # 初回の処理
- if @special_frm_cnt == 0
- jsthitn_input_init
- end
- end
- # 押下時の処理
- if Input.trigger?(MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_BTN)
- #p MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id].size.to_s
- jsthitn_next_hit_time = 999
- jsthitn_next_hit = 999
- for k in 0...MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id].size
- if jsthitn_next_hit_time > MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][k] \
- and MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][k] >= @jsthitn_pos
- jsthitn_next_hit = k
- jsthitn_next_hit_time = MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][k]
- end
- end
- #p "次のヒット:" + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][jsthitn_next_hit].to_s
- #p "#{@jsthitn_pos.to_s}"
- if @jsthitn_pos == \
- MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id][jsthitn_next_hit]
- #p "入力成功"
- se_jsthitn_hit
- @jsthitn_hitted.push @jsthitn_pos
- jsthitn_output_clear
- jsthitn_output_display_use_item
- jsthitn_output(MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_MSG_TIME)
- jsthitn_gage_output
- @jsthitn_hitcnt = @jsthitn_hitcnt + 1
- @jsthitn_pushcnt = @jsthitn_pushcnt + 1
- else
- #p "入力失敗"
- @jsthitn_pushcnt = @jsthitn_pushcnt + 1
- se_jsthitn_miss
- end
- end
- jsthitn_count
- @special_frm_cnt = @special_frm_cnt + 1
- # ゲージ終了時、またはヒット数よりたくさん押した場合の処理
- if @jsthitn_pos == MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][3] \
- or @jsthitn_pushcnt >= MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT_INFO[@special_id].size
- @jsthitn_pos = 0
- jsthitn_output_clear
- jsthitn_output(@jsthitn_hitcnt.to_s + MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_HIT)
-
- # 最低レート
- @special_ret = MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][0]
- #p "最低レート:" + @special_ret.to_s
- # 成功数の反映
- a = MR_SPECIAL_ATTACK_CUSTOM::JSTHITN_INFO[@special_id][1]
- a = a * @jsthitn_hitcnt
- @special_ret = @special_ret + a
- #p "成功数反映:" + @special_ret.to_s
- #p "結果:" + @special_ret.to_s
- $special_attack_rate = @special_ret
- @special_attack = false
-
- end
- end
- end
复制代码 |
评分
-
查看全部评分
|