#==============================================================================
# ★ スペシャルアタック+特殊スキル
# 作成・配布元: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 = {
8=>[5,0,1,100]
}
# 連打するボタン
RENDA_BTN = :C
# 連打スキル制限時間表示のメッセージ1
RENDA_MSG_TIME1 = "连续按下决定键! 剩余 "
# 連打スキル制限時間表示のメッセージ2
RENDA_MSG_TIME2 = " 秒"
# 連打回数表示時のメッセージ1
RENDA_MSG_RET1 = ""
# 連打回数表示時のメッセージ2
RENDA_MSG_RET2 = "x"
# ランダムコマンド入力対象
# スキルID=>[制限時間(秒),失敗時レート,成功時レート,入力数]
RNDCMD_INFO = {
8=>[3,0,100,5]
}
# ランダムコマンド入力キー
RNDCMD_KEYS = [:DOWN,:LEFT,:RIGHT,:UP]
# ランダムコマンド入力キー表示文字(全角一文字推奨)
RNDCMD_KEY_OUTS = ["↓","←","→","↑"]
# ランダムコマンド入力キー表示文字間
RNDCMD_KEY_OUTS_SPACE = " "
# ランダムコマンド入力一つ成功
RNDCMD_KEY_OUTS_OK = "○"
# ランダムコマンド入力スキル制限時間表示のメッセージ1
RNDCMD_MSG_TIME1 = "按指示按下按键! 剩余"
# ランダムコマンド入力スキル制限時間表示のメッセージ2
RNDCMD_MSG_TIME2 = "秒"
# ランダムコマンド入力成功時のメッセージ
RNDCMD_MSG_RET_OK = "HIT!"
# ランダムコマンド入力失敗時のメッセージ
RNDCMD_MSG_RET_NG = "MISS"
# ジャストヒット入力対象
# スキルID=>[制限時間(秒),失敗時レート,ヒット時レート,ジャストヒット時レート,
# 速さ,ゲージ長,ジャストヒット位置,ヒット許可数左,ヒット許可数右]
JSTHIT_INFO = {
1=>[1,50,100,150,2,21,11,4,4],
61=>[1,25,135,200,2,21,13,2,2],
63=>[1,0,0,300,2,21,14,0,0]
}
# ジャストヒットで押下するボタン
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 = "SMAAAAASH!"
# ヒット時のメッセージ
JSTHIT_HIT = "NICE!"
# ヒット時のメッセージ
JSTHIT_MISS = "MISS"
# ジャストヒットN入力対象
# スキルID=>[最低レート,1ヒット加算レート,速さ,ゲージ長]
JSTHITN_INFO = {
8=>[100,50,4,30]
}
# ジャストヒットNヒット位置定義
# スキルID=>[ヒット位置1,ヒット位置2,ヒット位置3・・・]
JSTHITN_HIT_INFO = {
8=>[5,10,15,25,28]
}
# ジャストヒット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 = "x"
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 連打一打
#--------------------------------------------------------------------------
def se_renda
RPG::SE.new("cursverti", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ランダムコマンド入力OK
#--------------------------------------------------------------------------
def se_rndcmd_ok
RPG::SE.new("item_streak_2", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ランダムコマンド入力NG
#--------------------------------------------------------------------------
def se_rndcmd_ng
RPG::SE.new("Buzzer1", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ジャストヒット入力大当たり
#--------------------------------------------------------------------------
def se_jsthit_justhit
RPG::SE.new("item_streak_1", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ジャストヒット入力小当たり
#--------------------------------------------------------------------------
def se_jsthit_hit
RPG::SE.new("item_streak_2", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ジャストヒット入力ミス
#--------------------------------------------------------------------------
def se_jsthit_miss
RPG::SE.new("Buzzer1", 100, 100).play
end
#--------------------------------------------------------------------------
# ● ジャストヒットN入力当たり
#--------------------------------------------------------------------------
def se_jsthitn_hit
RPG::SE.new("item_streak_2", 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 || !@subject.current_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