Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Blitz Skills

Status
Not open for further replies.

Cygnea

Sponsor

Sorry for the super late reply.

As far as your request, the script wasn't originally made to do what you're asking and I'm not a scripter so I can't help you out there. You'd have to put in a request it to be adapted to your needs.
 
Ok, the script is awesome but a question:
When you are casting the spell is it supposed to show you how much time you have to peform the skill with the combination on screen as your performing it rather than selecting it?

If so, then it isn't working for me.

If not, thats fine.
 
This is a very very interesting script. I like*keeps*
However, I'd like to know how indiviually I'd go about changing the amount of time each skill takes to use. Of course, for later skills I would want the user to need to type them in faster. I know there's the time input, but it spans every combo. I want to handicap beginner moves(2.0 seconds per key input) so people can ease into it, and I want difficult to pull off uber moves (say, .2-.5 seconds per key input). Anyone know how I'd go about this? I fear key input would get old and boring if I couldnt speed it up exponentially. Also, bonus points if I can 'blind' some combos. That is, not have certain combos show their display so people would have to memorize it, similiar to Legend of Legaia's combo setup. I'd want this for longer combos and probably for every combo for a specific character.
 
I get a can't dup error at line 265

line 265 @skill = $data_skills[skill_copy.id] = skill_copy.dup

Does anyone knows why this error occurred and how to fix it? And by the way, is it possible to limit certain actors to have the blitz command only? Thanks.
 

Cygnea

Sponsor

Try changing:
@skill = $data_skills[skill_copy.id] = skill_copy.dup
for:
@skill = $data_skills[skill_copy.id] = skill_copy.id

I haven't touched this in months, but someone had the same problem a page or two ago and said this worked.

Without requesting a script change the only way to limit which actors have the blitz command is to assign only their skills to have an input.
 

Mea

Member

Sorry to drag this up but has anyone gotten the "failed" animations to work right? This is the syntax I'm using:
Code:
       1 => [[LEFT,RIGHT], 0, 129],
where Animation #129 is my "spell fizzle" animation. So far though, if the key entry fails, there's no "spell fizzle", the skill goes off as normal except it misses.
 
Some people may get an error in the script as the result of a feature that Claihm may not have successfully coded. This feature that has bugs is the system that changes the 'scope' of a skill to 'all enemies' if the skill's input was successful.

For those that have seen this error:
line 265 @skill = $data_skills[skill_copy.id] = skill_copy.dup
... you know what I'm talking about.

Code:
  # 入力成功時に対象を全体化する
  ALL_ATK = true
  # 全体化するスキルID
  ALL_ATK_SK = [57, 61]
The second section in here: (ALL_ATK_SK) holds the IDS of skills that 'should' become 'all enemy' skills if you pressed the right buttons, while the first section (ALL_ATK) turns the feature on.

If you are finding this feature buggy (most likely), just turn the ALL_ATK switch to false.
 

Taylor

Sponsor

I've been using this for a while to add some extra features to the basic battle system. However I'm wondering if it's possible to make this script RTAB compatible incase I switch to it.

Here is an edit I made (which includes my positions and skill settings so you'll need to change these) that changes the buttom input from less damage if fail to more damage if sucess. This way an enemy will attack with the default damage calculation but a hero can make it stronger.
Code:
#==============================================================================
# â–  Tactical Skills Ver.1.4.0          by Claimh
#------------------------------------------------------------------------------
# Skill is made to move with command input.
# When it fails in command input, power decrease (& animation change)
#==============================================================================

module TacticalSkill
#==============================================================================
# â–¡ Customizing START
#==============================================================================
  # Keys
  A = Input::A            # Keyboard:Z
  B = Input::B            # Keyboard:X
  C = Input::C            # Keyboard:C
  X = Input::X            # Keyboard:A
  Y = Input::Y            # Keyboard:S
  Z = Input::Z            # Keyboard:D
  L = Input::L            # Keyboard:Q
  R = Input::R            # Keyboard:W
  UP = Input::UP
  DOWN = Input::DOWN
  LEFT = Input::LEFT
  RIGHT = Input::RIGHT

  # Time to input a key
  KEY_SEC = 0.3

  # Graphics/Windowskins
  T_BAR_NAME = "bar"

  # キータイプを切り替えるスイッチID(表示の切り替えが出来ます)
  # I'm not entirely sure, but I think this switches it from keyboard input to gamepad input.
  #   ON :ゲームパッド式 (Gamepad)
  #  OFF:キーボード式 (Keyboard)
  KEY_TYPE_ID = 4

  # 入力成功時に対象を全体化する
  ALL_ATK = true
  # Skills that, when completed, will attack all enemies
  ALL_ATK_SK = []

  # Skill Settings
  T_SKILL = {
    #SkillID => [[Key1,Key2,etc],Percent(ï¼…)(,Success AnimationID)]
        1 => [[LEFT,LEFT,LEFT,LEFT], 200],
        2 => [[UP,LEFT,DOWN,LEFT], 200],
        10 => [[DOWN,DOWN,RIGHT,LEFT], 110],
        11 => [[LEFT,DOWN,RIGHT,LEFT], 115],
        24 => [[UP, C], 200],
  }

  # ※失敗時のアニメーションを変える場合は数箇所コメントを外す必要があります。
#==============================================================================
# â–¡ Customizing END
#==============================================================================
end

#==============================================================================
# â–  Input
#==============================================================================
module Input
  module_function
  #--------------------------------------------------------------------------
  # ● 指定キー以外のキー入力判定
  #--------------------------------------------------------------------------
  def n_trigger?(num)
    if trigger?(num)
      return false
    elsif trigger?(A) or trigger?(B) or trigger?(C) or
          trigger?(X) or trigger?(Y) or trigger?(Z) or
          trigger?(L) or trigger?(R) or
          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
        return true
    end
    return false    # 未入力または使用しないキーの場合
  end
  #--------------------------------------------------------------------------
  # ● キー変換テーブル(表示文字取得用)
  #--------------------------------------------------------------------------
  def key_converter(key)
    # ゲームパッドタイプ
    if $game_switches[TacticalSkill::KEY_TYPE_ID]
      case key
      when A
        return ""
      when B
        return ""
      when C
        return ""
      when X
        return ""
      when Y
        return ""
      when Z
        return ""
      when L #R
        return ""
      when R #L
        return ""
      end
    # キーボードタイプ
    else
      case key
      when A #Z
        return ""
      when B #X
        return ""
      when C #C
        return ""
      when X #A
        return ""
      when Y #S
        return ""
      when Z #D
        return ""
      when L #Q
        return ""
      when R #W
        return "W"
      end
    end
    case key
    when UP #↑
      return ""
    when DOWN #↓
      return ""
    when LEFT #←
      return ""
    when RIGHT #→
      return ""
    end
  end
end

#==============================================================================
# â–  Game_Battler
#==============================================================================
class Game_Battler
  attr_accessor   :tact_flag
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_tactical initialize
  def initialize
    initialize_tactical     # 原物
    @tact_flag = false
    @tact_skill_ok = false
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_tactical skill_effect
  def skill_effect(user, skill)
    if $scene.is_a?(Scene_Battle) and user.tact_flag
      skill_copy = $data_skills[skill.id].dup
      skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
      skill.hit = 0 if skill.power == 0   # 威力0で命中しない補正
    end
    ret = skill_effect_tactical(user, skill)
    if $scene.is_a?(Scene_Battle) and user.tact_flag
      user.tact_flag = false
      $data_skills[skill.id] = skill_copy.dup
    end
    return ret
  end
end

#==============================================================================
# â–  Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_tactical update_phase4_step2
  def update_phase4_step2
    update_phase4_step2_tactical
    # 初期化
    @active_battler.tact_flag = false
    #@miss_flag = false      # Miss時にアニメーションを変える時にコメント外す
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_skill_action_result_tactical make_skill_action_result
  def make_skill_action_result
    # 先に判定
    # 強制アクションでなければ
    unless @active_battler.current_action.forcing
      # SP 切れなどで使用できなくなった場合
      unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
        # アクション強制対象のバトラーをクリア
        $game_temp.forcing_battler = nil
        # ステップ 1 に移行
        @phase4_step = 1
        return
      end
    end
    
    if @active_battler.is_a?(Game_Actor)
      if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
        # タクティカルスキル発動
        make_tactical_skill_result
      end
    end
    if TacticalSkill::ALL_ATK and @tact_skill_ok
      if TacticalSkill::ALL_ATK_SK.include?(@skill.id)
        skill_copy = @skill.dup
        @skill.scope = 2
      end
    end
    make_skill_action_result_tactical   # 原物
    if TacticalSkill::ALL_ATK and @tact_skill_ok
      if TacticalSkill::ALL_ATK_SK.include?(@skill.id)
        @tact_skill_ok = false
        @skill = $data_skills[skill_copy.id] = skill_copy.dup
      end
    end
    # Miss時にアニメーションを変える時にコメント外す
    #if @miss_flag
    #  @miss_flag = false
    #  unless TacticalSkill::T_SKILL[@skill.id][2].nil?
    #    @animation2_id = TacticalSkill::T_SKILL[@skill.id][2]
    #  end
    #end
  end
  #--------------------------------------------------------------------------
  # ● タクティカルスキル 結果作成
  #--------------------------------------------------------------------------
  def make_tactical_skill_result
    # 閃き時コマンドなし
    #return if @active_battler.flash_flag

    tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
    time = TacticalSkill::KEY_SEC * tact_skill.size * Graphics.frame_rate
    key_count = 0
    @active_battler.tact_flag = false
    # キー入力&カウントウィンドウ作成
    window_keycount = Window_KeyCount.new(tact_skill)
    window_counter = Window_KeyCounter.new
    #「戦闘位置補正」併用時にコメント外す
    #case $game_party.actors.size
    #when 1
    #  actor_x = 240
    #when 2
    #  actor_x = @active_battler.index * 240 + 120
    #when 3
    #  actor_x = @active_battler.index * 200 + 40
    #when 4
      actor_y = 328 + (@active_battler.index * 24)
    #end
    window_keycount.y = window_counter.y = actor_y

    for i in 0...time
      # キー入力に成功?
      if Input.trigger?(tact_skill[key_count])
        key_count += 1
        window_keycount.key_in
      elsif Input.n_trigger?(tact_skill[key_count])   # 違うキーを押した
        #@miss_flag = true      # Miss時にアニメーションを変える時にコメント外す
        # Miss時 SE演奏
        #Audio.se_play("Audio/SE/" + "ファイル名")
        break
      end
      # 全キー入力完了
      if key_count >= tact_skill.size
        window_keycount.text_in("")
        # Complete時 SE演奏
        $game_system.se_play($data_system.decision_se)
        @active_battler.tact_flag = true
        @tact_skill_ok = false if TacticalSkill::ALL_ATK
        break
      end
      # 進捗バーの更新
      window_counter.refresh((i*100/time).truncate)
      Graphics.update
      Input.update
    end
    # 何も入力しなかった => ミス
    if @active_battler.tact_flag
      window_keycount.text_in("")
    end
    # Miss、Complete表示用のウェイト
    for i in 0...10
      Graphics.update
      @spriteset.update
    end
    window_keycount.dispose
    window_counter.dispose
  end
end

#==============================================================================
# â–  Window_Base
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● バー表示
  #       x       : x表示位置
  #       y       : y表示位置
  #       current : 進捗率(%)
  #--------------------------------------------------------------------------
  def draw_counter_bar(x, y, current)
    bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME, 0)
    cw = bitmap.width * current / 100
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y, bitmap, src_rect)
  end
end

#==============================================================================
# â–  Window_KeyCounter
#------------------------------------------------------------------------------
#  進捗率を表示するバー
#==============================================================================
class Window_KeyCounter < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  def initialize
    super(0, 228, 150, 200)
    self.contents = Bitmap.new(width - 24, height - 32)
    self.opacity = 0
    self.z = 999            # バトラーよりも奥に表示
    self.x = 64 + 82+181+39
    refresh(0)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #       current = 進捗率(%)
  #--------------------------------------------------------------------------
  def refresh(current)
    self.contents.clear
    #draw_counter_bar(0, 0, 100-current)    # 進捗方向:←
    draw_counter_bar(0, 0, current)         # 進捗方向:→
  end
end

#==============================================================================
# â–  Window_KeyCount
#------------------------------------------------------------------------------
#  入力するキーを表示するウィンドウ。
#==============================================================================
class Window_KeyCount < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  def initialize(key)
    super(0, 220, 150, 200)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0    # 半透明
    self.z = 299            # 進捗バーよりも奥に表示
    @key = key
    @key_count = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@key.size
      x = i * 32    # 文字間の間隔:32
      if i < @key_count
        self.contents.font.color = knockout_color
      else
        self.contents.font.color = normal_color
      end
      self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key[i]))
    end
  end
  #--------------------------------------------------------------------------
  # ● キーカウント
  #--------------------------------------------------------------------------
  def key_in
    @key_count += 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● テキスト表示
  #       text : テキスト
  #--------------------------------------------------------------------------
  def text_in(text)
    self.contents.clear
    self.contents.draw_text(0, 0, 100, 32, text, 1)
  end
end
I've probably done something wrong as usual with RGSS but I haven't noticed anything. :\/
 
DerVVulfman;101243 said:
#==============================================================================
# â–  Tactical Skills Ver.1.4.0 by Claimh
#------------------------------------------------------------------------------
# Skill is made to move with command input.
# When it fails in command input, power decrease (& animation change)
#==============================================================================

Altavista's Babelfish translator is a wonderful thing.

And so are people who find such scripts. :D

It tends to be mistranslated if you use Babel. If your going to be using translators, do yourself a favor and use Google Translator.
 
uzumakishade;148609 said:
this can be really helpful for an idea i have if pictures can be shown when it asks what to be input instead of the letters/arrows

Yes, I have just installed this but it's just ugly with that standard writing and default arrows. I'd only want to use the left, right up and down keys, could anyone alter some code for it to show picture instead of drawing the arrows etc. as well as have a custom picture for both Miss and Hit?

Please?

Oh and what to I change to have it always display slap band in the centre of the screen regardless of who is using it?
 

Mea

Member

Kind of a necro-bump here.

I want to do what Calibre suggested - change the interface layout.

http://www.stkp.com/rpgmxp/interface/blitzbefore.jpg[/img]
http://www.stkp.com/rpgmxp/interface/blitzdemo.jpg[/img]

Changes:
  • Window is larger and centered on the screen
  • Header says who is doing the skill and what the skill is (snice I'm only using this for magic skills, I figured "Casts:" can be hard coded in there)
  • Bar is bigger and has a darkened shadow version behind it to show its full length
  • Icons instead of the exisiting character arrows (these arrows were included in Whitecat's icon pack. The site is down right now, but I can upload those specific icons if necessary) These are tinted as they are executed.
  • (not Shown) a key sound as each button is pressed
  • (not Shown) a way for "failed" battle animations to be shown. I mentioned this earlier in the thread but never got an answer. Ths script says it supports it but it doesn't work.
Here's is the script I'm using with a few minor inexpert modifications done by me (in case that last one is something I did wrong)
Code:
#==============================================================================
# â–  Tactical Skills Ver.1.4.0          by Claimh
#------------------------------------------------------------------------------
# Skill is made to move with command input.
# When it fails in command input, power decrease (& animation change)
#==============================================================================

module TacticalSkill
#==============================================================================
# â–¡ Customizing START
#==============================================================================
  # Keys
  A = Input::A            # Keyboard:Z
  B = Input::B            # Keyboard:X
  C = Input::C            # Keyboard:C
  X = Input::X            # Keyboard:A
  Y = Input::Y            # Keyboard:S
  Z = Input::Z            # Keyboard:D
  L = Input::L            # Keyboard:Q
  R = Input::R            # Keyboard:W
  UP = Input::UP
  DOWN = Input::DOWN
  LEFT = Input::LEFT
  RIGHT = Input::RIGHT

  # Time to input a key
  KEY_SEC = 1.0

  # Graphics/Windowskins
  T_BAR_NAME = "bar"

  # キータイプを切り替えるスイッチID(表示の切り替えが出来ます)
  # I'm not entirely sure, but I think this switches it from keyboard input to gamepad input.
  #   ON  (Gamepad)
  # OFF (Keyboard)
  KEY_TYPE_ID = 4

  # Allow skills that will attack all enemies when completed
  ALL_ATK = true
  # Skills that, when completed, will attack all enemies
  ALL_ATK_SK = [57, 61]

  # Skill Settings
  T_SKILL = {
    #SkillID => [[Key1,Key2,etc],Percent(%)(,Fail AnimationID)]
        1 => [[LEFT,RIGHT], 0, 129], # Heal
        2 => [[LEFT, RIGHT, UP, UP], 10],# Greater Heal
        3 => [[LEFT, RIGHT, UP, UP, LEFT, RIGHT], 10],# Mass Heal
        4 => [[DOWN, UP], 0],#Remedy
        5 => [[DOWN, UP, UP, UP], 0], # Greater Remedy
        6 => [[UP, UP, UP, DOWN, RIGHT, UP], 0], #Raise
        7 => [[UP, RIGHT], 10], #Fire
        8 => [[UP, RIGHT], 10],#Greater Fire
        9 => [[UP, RIGHT], 10], # Mass Fire
        10 => [[DOWN, LEFT], 10],#Ice
        11 => [[DOWN, LEFT], 10],#Greater Ice
        12 => [[DOWN, LEFT], 10],#Mass Ice
        13 => [[UP, LEFT], 10],#Lightning
        14 => [[UP, LEFT], 10],#Greater Lightning
        15 => [[UP, LEFT], 10],#Mass Lightning
        16 => [[DOWN, RIGHT], 10],#Water
        17 => [[DOWN, RIGHT], 10],#Greater Water
        18 => [[DOWN, RIGHT], 10],#Mass Water
        19 => [[DOWN, DOWN], 10],#Earth
        20 => [[DOWN, DOWN], 10],#Greater Earth
        21 => [[DOWN, DOWN], 10],#Mass Earth
        22 => [[UP,UP], 10],#Wind
        23 => [[UP,UP], 10],#Greater Wind
        24 => [[UP,UP], 10],#Mass Wind
        25 => [[RIGHT, RIGHT], 10],#Light
        26 => [[RIGHT, RIGHT], 10],#Greater Light
        27 => [[RIGHT, RIGHT], 10],#Mass Light
        28 => [[LEFT, LEFT], 10],#Shadow
        29 => [[LEFT, LEFT], 10],#Greater Shadow
        30 => [[LEFT, LEFT], 10],#Mass Shadow

        }

  # ※失敗時のアニメーションを変える場合は数箇所コメントを外す必要があります。
#==============================================================================
# â–¡ Customizing END
#==============================================================================
end

#==============================================================================
# â–  Input
#==============================================================================
module Input
  module_function
  #--------------------------------------------------------------------------
  # ● 指定キー以外のキー入力判定
  #--------------------------------------------------------------------------
  def n_trigger?(num)
    if trigger?(num)
      return false
    elsif trigger?(A) or trigger?(B) or trigger?(C) or
          trigger?(X) or trigger?(Y) or trigger?(Z) or
          trigger?(L) or trigger?(R) or
          trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
        return true
    end
    return false    # 未入力または使用しないキーの場合
  end
  #--------------------------------------------------------------------------
  # ● キー変換テーブル(表示文字取得用)
  #--------------------------------------------------------------------------
  def key_converter(key)
    # ゲームパッドタイプ
    if $game_switches[TacticalSkill::KEY_TYPE_ID]
      case key
      when A
        return "A"
      when B
        return "B"
      when C
        return "C"
      when X
        return "X"
      when Y
        return "Y"
      when Z
        return "Z"
      when L
        return "R"
      when R
        return "L"
      end
    # キーボードタイプ
    else
      case key
      when A
        return "Z"
      when B
        return "X"
      when C
        return "C"
      when X
        return "A"
      when Y
        return "S"
      when Z
        return "D"
      when L
        return "Q"
      when R
        return "W"
      end
    end
    case key
    when UP
      return "↑"
    when DOWN
      return "↓"
    when LEFT
      return "←"
    when RIGHT
      return "→"
    end
  end
end

#==============================================================================
# â–  Game_Battler
#==============================================================================
class Game_Battler
  attr_accessor   :tact_flag
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_tactical initialize
  def initialize
    initialize_tactical     # 原物
    @tact_flag = false
    @tact_skill_ok = false
  end
  #--------------------------------------------------------------------------
  # ● スキルの効果適用
  #     user  : スキルの使用者 (バトラー)
  #     skill : スキル
  #--------------------------------------------------------------------------
  alias skill_effect_tactical skill_effect
  def skill_effect(user, skill)
    if $scene.is_a?(Scene_Battle) and user.tact_flag
      skill_copy = $data_skills[skill.id].dup
      skill.power = skill.power * TacticalSkill::T_SKILL[skill.id][1] / 100
      skill.hit = 0 if skill.power == 0   # 威力0で命中しない補正
    end
    ret = skill_effect_tactical(user, skill)
    if $scene.is_a?(Scene_Battle) and user.tact_flag
      user.tact_flag = false
      $data_skills[skill.id] = skill_copy.dup
    end
    return ret
  end
end

#==============================================================================
# â–  Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  #--------------------------------------------------------------------------
  alias update_phase4_step2_tactical update_phase4_step2
  def update_phase4_step2
    update_phase4_step2_tactical
    # 初期化
    @active_battler.tact_flag = false
    #@miss_flag = false      # Miss時にアニメーションを変える時にコメント外す
  end
  #--------------------------------------------------------------------------
  # ● スキルアクション 結果作成
  #--------------------------------------------------------------------------
  alias make_skill_action_result_tactical make_skill_action_result
  def make_skill_action_result
    # 先に判定
    # 強制アクションでなければ
    unless @active_battler.current_action.forcing
      # SP 切れなどで使用できなくなった場合
      unless @active_battler.skill_can_use?(@active_battler.current_action.skill_id)
        # アクション強制対象のバトラーをクリア
        $game_temp.forcing_battler = nil
        # ステップ 1 に移行
        @phase4_step = 1
        return
      end
    end
    
    if @active_battler.is_a?(Game_Actor)
      if !TacticalSkill::T_SKILL[@active_battler.current_action.skill_id].nil?
        # タクティカルスキル発動
        make_tactical_skill_result
      end
    end
    if TacticalSkill::ALL_ATK and @tact_skill_ok
      if TacticalSkill::ALL_ATK_SK.include?(@skill.id)
        skill_copy = @skill.dup
        @skill.scope = 2
      end
    end
    make_skill_action_result_tactical   # 原物
    if TacticalSkill::ALL_ATK and @tact_skill_ok
      if TacticalSkill::ALL_ATK_SK.include?(@skill.id)
        @tact_skill_ok = false
        @skill = $data_skills[skill_copy.id] = skill_copy.id
      end
    end
    # Miss時にアニメーションを変える時にコメント外す
    #if @miss_flag
    #  @miss_flag = false
    #  unless TacticalSkill::T_SKILL[@skill.id][2].nil?
    #    @animation2_id = TacticalSkill::T_SKILL[@skill.id][2]
    #  end
    #end
  end
  #--------------------------------------------------------------------------
  # ● タクティカルスキル 結果作成
  #--------------------------------------------------------------------------
  def make_tactical_skill_result
    # 閃き時コマンドなし
    #return if @active_battler.flash_flag

    tact_skill = TacticalSkill::T_SKILL[@active_battler.current_action.skill_id][0]
    time = TacticalSkill::KEY_SEC * tact_skill.size * Graphics.frame_rate
    key_count = 0
    @active_battler.tact_flag = true
    # キー入力&カウントウィンドウ作成
    window_keycount = Window_KeyCount.new(tact_skill)
    window_counter = Window_KeyCounter.new
    #「戦闘位置補正」併用時にコメント外す
    #case $game_party.actors.size
    #when 1
    #  actor_x = 240
    #when 2
    #  actor_x = @active_battler.index * 240 + 120
    #when 3
    #  actor_x = @active_battler.index * 200 + 40
    #when 4
      actor_x = @active_battler.index * 1
    #end
    window_keycount.x = window_counter.x = actor_x

    for i in 0...time
      # キー入力に成功?
      if Input.trigger?(tact_skill[key_count])
        key_count += 1
        window_keycount.key_in
      elsif Input.n_trigger?(tact_skill[key_count])   # 違うキーを押した
        #@miss_flag = true      # Miss時にアニメーションを変える時にコメント外す
        # Miss時 SE演奏
        #Audio.se_play("Audio/SE/" + "ファイル名")
        break
      end
      # 全キー入力完了
      if key_count >= tact_skill.size
        window_keycount.text_in("Complete")
        # Complete時 SE演奏
        #Audio.se_play("Audio/SE/" + "ファイル名")
        @active_battler.tact_flag = false
        @tact_skill_ok = true if TacticalSkill::ALL_ATK
        break
      end
      # 進捗バーの更新
      window_counter.refresh((i*100/time).truncate)
      Graphics.update
      Input.update
    end
    # 何も入力しなかった => ミス
    if @active_battler.tact_flag
      window_keycount.text_in("Miss")
    end
    # Miss、Complete表示用のウェイト
    for i in 0...10
      Graphics.update
      @spriteset.update
    end
    window_keycount.dispose
    window_counter.dispose
  end
end

#==============================================================================
# â–  Window_Base
#==============================================================================
class Window_Base < Window
  #--------------------------------------------------------------------------
  # ● バー表示
  #       x       : x表示位置
  #       y       : y表示位置
  #       current : 進捗率(%)
  #--------------------------------------------------------------------------
  def draw_counter_bar(x, y, current)
    bitmap = RPG::Cache.windowskin(TacticalSkill::T_BAR_NAME)
    cw = bitmap.width * current / 100
    ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(x, y, bitmap, src_rect)
  end
end

#==============================================================================
# â–  Window_KeyCounter
#------------------------------------------------------------------------------
#  進捗率を表示するバー
#==============================================================================
class Window_KeyCounter < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  # THIS DEFINES THE WINDOW DISPLAYED
  def initialize
    super(0, 256, 150, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    self.z = 1            # バトラーよりも奥に表示
    refresh(0)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #       current = 進捗率(%)
  #--------------------------------------------------------------------------
  def refresh(current)
    self.contents.clear
    #draw_counter_bar(0, 0, 100-current)    # 進捗方向:←
    draw_counter_bar(0, 0, current)         # 進捗方向:→
  end
end

#==============================================================================
# â–  Window_KeyCount
#------------------------------------------------------------------------------
#  入力するキーを表示するウィンドウ。
#==============================================================================
class Window_KeyCount < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     key :キー配列
  #--------------------------------------------------------------------------
  def initialize(key)
    super(0, 220, 300, 80)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 160    # 半透明
    self.z = 0            # 進捗バーよりも奥に表示
    @key = key
    @key_count = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@key.size
      x = i * 32    # 文字間の間隔:32
      if i < @key_count
        self.contents.font.color = knockout_color
      else
        self.contents.font.color = normal_color
      end
      self.contents.draw_text(x, 0, 100, 32, Input.key_converter(@key[i]))
    end
  end
  #--------------------------------------------------------------------------
  # ● キーカウント
  #--------------------------------------------------------------------------
  def key_in
    @key_count += 1
    refresh
  end
  #--------------------------------------------------------------------------
  # ● テキスト表示
  #       text : テキスト
  #--------------------------------------------------------------------------
  def text_in(text)
    self.contents.clear
    self.contents.draw_text(0, 0, 100, 32, text, 1)
  end
end

Can anyone help, please?
 
Status
Not open for further replies.

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top