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.

CBS Attack Bar (Fairly Easy)

I need a a CBS Script.All it has to do is when i use attack in battle the player has to keep pressing the space bar so the player can hit the opponent.Theres should be bar in the left side of the screen. The more the player presses the space bar the quicker the bar fills.The player should only have 100 frames to do this, if they don't fill the bar in time their attack misses. Every tap of the spacebar fills 5% of the Bar

A Rough Screenshot edit:
http://i107.photobucket.com/albums/m310 ... led-14.jpg[/IMG]

The PIC:
http://i107.photobucket.com/albums/m310 ... led-15.png[/IMG]

Edit:This is the CBS i'm using from fomar

Code:
module Fomar
  
  Attack_Cost = 200
  Skill_Cost = 500
  Defend_Cost = 250
  Item_Cost = 300
  Flee_Attempt = 100
  Refresh_Rate = 7
  
  def self.attack
    return Attack_Cost
  end
  
  def self.skill
    return Skill_Cost
  end
  
  def self.defend
    return Defend_Cost
  end
  
  def self.item
    return Item_Cost
  end
  
  def self.critical_value(n)
    return (n == Attack_Cost or n == Skill_Cost or n == Defend_Cost or n == Item_Cost)
  end
  
end
Code:
class Game_BattleAction
  
  alias cbs_clear clear
  def clear
    unless (@kind == 0 and @basic == 1)
      cbs_clear
      return
    end
    @speed = 10
    @skill_id = 0
    @item_id = 0
    @target_index = -1
    @forcing = false
  end
  
end

class Game_Battler
  
  attr_accessor :stamina
  attr_accessor :vitality
  attr_accessor :max_stamina
  
  alias cbs_initialize initialize
  def initialize
    cbs_initialize
    @stamina = 0
    @vitality = 1
    @max_stamina = 750
  end
  
  def stamina_action_cost
    if (@current_action.kind == 0 and @current_action.basic == 1) or 
      ((@current_action.kind == 0 and @current_action.basic == 0) and 
      @current_action.target_index == -1)
      return
    end
    if @current_action.kind == 0 and @current_action.basic == 0
      @stamina -= Fomar.attack
    end
    if @current_action.kind == 1
      @stamina -= Fomar.skill
    end
    if @current_action.kind == 2
      @stamina -= Fomar.item
    end
    
  end
  
end

class Game_Enemy < Game_Battler
  
  alias cbs_make_action make_action
  def make_action
    return
  end
  
  def can_do_action?
    if @current_action.kind == 0 and @current_action.basic == 0
      return self.stamina >= Fomar.attack
    end
    if @current_action.kind == 1
      return self.stamina >= Fomar.skill
    end
    if @current_action.kind == 0 and @current_action.basic == 1
      return self.stamina >= Fomar.defend
    end
    if @current_action.kind == 0 and @current_action.basic == 3
      return false
    end
  end
  
end

class Window_BattleStatus < Window_Base
  def refresh
    self.contents.clear
    self.contents.font.size = 20
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      draw_actor_name(actor, actor_x, 0)
      draw_actor_hp(actor, actor_x, 25, 120)
      draw_actor_sp(actor, actor_x, 50, 120)
      draw_fomar_bar(actor_x, 80, ((actor.stamina * 100)/actor.max_stamina), 120)
      if @level_up_flags[i]
        self.contents.font.color = normal_color
        self.contents.draw_text(actor_x, 100, 120, 32, "LEVEL UP!")
      else
        draw_actor_state(actor, actor_x, 100)
      end
    end
  end
  
  def redraw_bars
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      actor_x = i * 160 + 4
      draw_fomar_bar(actor_x, 80, ((actor.stamina * 100)/actor.max_stamina), 120)
    end
  end
  
  def draw_fomar_bar(x, y, full = 100, width = 128)
    self.contents.fill_rect(x, y, width, 20, Color.new(0, 0, 0, 255))
    self.contents.fill_rect(x + 2, y + 2, width - 4, 16, Color.new(255, 255, 255, 255))
    width *= full
    width /= 100
    # full is a percentage
    self.contents.fill_rect(x +2, y + 2, width - 4, 16, Color.new(255, 0, 0, 255))
  end
end

class Scene_Battle
  
  alias cbs_main main
  def main
    @fleeing = false
    @flee_attempt = 0
    @refresh_rate = 0
    @enemy_decision = 0
    for actor in $game_party.actors
      actor.current_action.cbs_clear
    end
    cbs_main
  end
  
  alias cbs_update update
  def update
    if @refresh_rate == Fomar::Refresh_Rate
      @status_window.redraw_bars
      @refresh_rate = 0
    else
      @refresh_rate += 1
    end
    cbs_update
  end
  
  alias cbs_start_phase2 start_phase2
  def start_phase2
    @fleeing = false
    cbs_start_phase2
  end
  
  def update_phase2_escape
    @fleeing = true
    @flee_attempt = 0
    start_phase3
  end
  
  def end_phase2
    @party_command_window.active = false
    @party_command_window.visible = false
  end
  
  def start_phase3
    end_phase2
    @phase = 3
    @actor_index = 0
    @active_battler = $game_party.actors[0]
    $game_party.clear_actions
    unless @fleeing == true
      phase3_setup_command_window
    end
  end
  
  def phase3_setup_command_window
    phase3_make_command_window
    @party_command_window.active = false
    @party_command_window.visible = false
    @actor_command_window.active = true
    @actor_command_window.visible = true
    @actor_command_window.x = @actor_index * 160
  end
  
  def phase3_make_command_window
    unless @actor_command_window == nil
      @actor_command_window.dispose
    end
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @actor_command_window.y = 160
    @actor_command_window.back_opacity = 160
    unless @active_battler.inputable?
      @actor_command_window.disable_item(0)
      @actor_command_window.disable_item(1)
      @actor_command_window.disable_item(2)
      @actor_command_window.disable_item(3)
      return
    end
    unless @active_battler.stamina >= Fomar.attack
      @actor_command_window.disable_item(0)
    end
    unless @active_battler.stamina >= Fomar.skill
      @actor_command_window.disable_item(1)
    end
    unless @active_battler.stamina >= Fomar.defend
      @actor_command_window.disable_item(2)
    end
    unless @active_battler.stamina >= Fomar.item
      @actor_command_window.disable_item(3)
    end
  end
  
  alias cbs_update_phase3 update_phase3
  def update_phase3
    if judge
      return
    end
    cbs_update_phase3
    if @actor_command_window.active == true or @fleeing == true
      @enemy_decision += 1
      if @enemy_decision == 50
        @enemy_decision -= 50
        resolve = false
        for enemy in $game_troop.enemies
          enemy.cbs_make_action
          if enemy.can_do_action?
            resolve = true
          else
            enemy.current_action.clear
          end
        end
        if resolve == true
          @check_index = @actor_index
          start_phase4
          return
        end
      end
    end
    if @fleeing == true
      if Input.trigger?(Input::B)
        start_phase2
      end
      @flee_attempt += 1
      if @flee_attempt == Fomar::Flee_Attempt
        enemies_agi = 0
        enemies_number = 0
        for enemy in $game_troop.enemies
          if enemy.exist?
            enemies_agi += enemy.agi
            enemies_number += 1
          end
        end
        if enemies_number > 0
          enemies_agi /= enemies_number
        end
        actors_agi = 0
        actors_number = 0
        for actor in $game_party.actors
          if actor.exist?
            actors_agi += actor.agi
            actors_number += 1
          end
        end
        if actors_number > 0
          actors_agi /= actors_number
        end
        success = rand(100) < 50 * actors_agi / enemies_agi
        if success
          $game_system.se_play($data_system.escape_se)
          $game_system.bgm_play($game_temp.map_bgm)
          battle_end(1)
        else
          @flee_attempt -= Fomar::Flee_Attempt
        end
      end
    end
    if @active_battler != nil
      if Fomar.critical_value(@active_battler.stamina)
        i = @actor_command_window.index
        k = @actor_command_window.visible
        l = @actor_command_window.active
        phase3_make_command_window
        @actor_command_window.x = @actor_index * 160
        @actor_command_window.index = i
        @actor_command_window.visible = k
        @actor_command_window.active = l
      end
    end
    if @actor_command_window.active
      if Input.trigger?(Input::LEFT)
        @actor_index -= 1
        if @actor_index == -1
          @actor_index = $game_party.actors.size - 1
        end
        @active_battler = $game_party.actors[@actor_index]
        phase3_make_command_window
        @actor_command_window.x = @actor_index * 160
      end
      if Input.trigger?(Input::RIGHT)
        @actor_index += 1
        if @actor_index == $game_party.actors.size
          @actor_index = 0
        end
        @active_battler = $game_party.actors[@actor_index]
        phase3_make_command_window
        @actor_command_window.x = @actor_index * 160
      end
    end
    if @actor_command_window.active == true or @fleeing == true
      phase3_pass_time
    end
  end
  
  def phase3_pass_time
    for battler in $game_party.actors + $game_troop.enemies
      battler.stamina += battler.vitality
      if battler.stamina > battler.max_stamina
        battler.stamina = battler.max_stamina
      end
    end
  end
  
  alias cbs_update_phase4_step1 update_phase4_step1
  def update_phase4_step1
    if @action_battlers.size == 0
      @phase = 3
      for battler in $game_party.actors + $game_troop.enemies
        battler.stamina_action_cost
      end
      i = @actor_command_window.index
      phase3_make_command_window
      @actor_command_window.index = 1
      @actor_command_window.visible = true
      @actor_command_window.active = true
      @actor_index = @check_index
      @actor_command_window.x = 160 * @actor_index
      @active_battler = $game_party.actors[@actor_index]
      $game_party.clear_actions
      for enemy in $game_troop.enemies
        enemy.current_action.clear
      end
      return
    end
    cbs_update_phase4_step1
  end
  
  def phase3_next_actor
    @check_index = @actor_index
    start_phase4
    return
  end
  
  def phase3_prior_actor
    start_phase2
    return
  end
  
  def update_phase3_basic_command
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      phase3_prior_actor
      return
    end
    if Input.trigger?(Input::C)
      case @actor_command_window.index
      when 0
        if @active_battler.stamina < Fomar.attack
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        start_enemy_select
      when 1
        if @active_battler.stamina < Fomar.skill
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 1
        start_skill_select
      when 2
        if @active_battler.stamina < Fomar.defend
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        @active_battler.stamina -= Fomar.defend
        phase3_next_actor
      when 3
        if @active_battler.stamina < Fomar.item
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_system.se_play($data_system.decision_se)
        @active_battler.current_action.kind = 2
        start_item_select
      end
      return
    end
  end
  
end
 

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