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.

[XP] FMBS XRXS Fully Working + Custom Enhancement

Tales of eternia Battle system FIX & ENHANCED


FMBS is a Full movement Battle System that mimics Tales of ... Battle system, i found bug on default script like state bug, Turn system on database states is useless but you can change it into this script. now everything is fixed i think ( item, state bug)

SCRIPT
STATE FIX VER 1.2 (more compatible and faster than before)
Code:
 

=begin

STATE_FIX and ADDONS Ver 1.2                  (Tested and edit on April 5th 2008)

                                                     BY iqbal_0k A.K.A B@!LWORLD

Requirements: -STATE_FIX part 2

              -FMBS SYSTEM BY XRXS

              

Credit & Thanks - XRXS for this great battle system          

 

1.2 Feature :

          - Removing gain sp pop_ups to increase performance

 

Feature

          - Flash damage to indicates battler loss / gain hp/sp

          - Pop'ups state name when incurs or removed

          - Adding BATTLE FRENZY effect

          - Adding REFLECT feature

          - Compatibility to other script (but still fmbs dude)

          - Damage display when poisoned, gain hp, loss sp, gain sp and much more

          - Compacting script to maintain in game performance

          - Add some unique state effect

          - Fix FMBS BUG like slip damage effect by poison, paralyze, can't act,

            silence

          - easy modification (For dummies)

=end

#===============================================================================

#                                CONFIGURATION

#===============================================================================

$gain_sp_in_normal_state = true

 

#Change text in the double quotes refers to state name in your database

POISON_NAME = "Poison" # slip damage ... 100% COMPLETED

REGEN_NAME = "Regen" #Recover hp in certain duration ... 100% COMPLETED

PARALYZE_NAME = "Paralyze" # Can't Move ... 100% COMPLETED

ENTANGLE_NAME = "Entangle" # States that prevent action jumping and running ... 100% COMPLETED

FLOAT_NAME = "Float" # makes you Float to avoid ground damage ... 100% COMPLETED

SP_DRAIN_NAME = "SP Drain" # Poison SP (Battle Only) ... 100% COMPLETED

SLEEP_NAME = "Sleep" #can't move and attack but the state will automaticly removed in random duration (Battle Only) ... 100% COMPLETED

DEMI_NAME = "Demi" #Drain hp much faster ... 100% COMPLETED

CURSE_NAME = "Curse" #Occasionally damage HP if act (Attack or defend) and prevent making attack combo ... 100% COMPLETED

SHIELD_NAME = "Shield" # May become invincible if battler guarding (the infincible effect mark with actor blink) ... 100% COMPLETED

BLESSING_NAME = "Bless" # recover SP More Faster in certain duration ... 100% COMPLETED

HEX_NAME = "Hex" # DAMAGE HP BY HALF and then the states are removed automaticly ... 100% COMPLETED

GHOST_NAME = "Ghost" # Occasionally invincible to any damage ... 100% COMPLETED

BERSERK_NAME = "Berserk" #You can't control this infected actor (controlled by AI) / change member in certain duration ... 100% COMPLETED

 

#DONT CHANGE THE LINE BELOW

#==========================================================================================================================================

$data_states = load_data("Data/States.rxdata")

$data_states.each_index do |index| $poison_state_id=index if ($data_states[index]!=nil and $data_states[index].name==POISON_NAME) end

$data_states.each_index do |index| $regen_state_id=index if ($data_states[index]!=nil and $data_states[index].name==REGEN_NAME) end

$data_states.each_index do |index| $paralyze_state_id=index if ($data_states[index]!=nil and $data_states[index].name==PARALYZE_NAME) end

$data_states.each_index do |index| $entangle_state_id=index if ($data_states[index]!=nil and $data_states[index].name==ENTANGLE_NAME) end

$data_states.each_index do |index| $float_state_id=index if ($data_states[index]!=nil and $data_states[index].name==FLOAT_NAME) end

$data_states.each_index do |index| $sleep_state_id=index if ($data_states[index]!=nil and $data_states[index].name==SLEEP_NAME) end

$data_states.each_index do |index| $sp_drain_state_id=index if ($data_states[index]!=nil and $data_states[index].name==SP_DRAIN_NAME) end

$data_states.each_index do |index| $demi_state_id=index if ($data_states[index]!=nil and $data_states[index].name==DEMI_NAME) end

$data_states.each_index do |index| $curse_state_id=index if ($data_states[index]!=nil and $data_states[index].name==CURSE_NAME) end

$data_states.each_index do |index| $shield_state_id=index if ($data_states[index]!=nil and $data_states[index].name==SHIELD_NAME) end

$data_states.each_index do |index| $blessing_state_id=index if ($data_states[index]!=nil and $data_states[index].name==BLESSING_NAME) end

$data_states.each_index do |index| $hex_state_id=index if ($data_states[index]!=nil and $data_states[index].name==HEX_NAME) end

$data_states.each_index do |index| $ghost_state_id=index if ($data_states[index]!=nil and $data_states[index].name==GHOST_NAME) end

$data_states.each_index do |index| $berserk_state_id=index if ($data_states[index]!=nil and $data_states[index].name==BERSERK_NAME) end

#==========================================================================================================================================

 

STATE FIX Ver 1.2 PART 2
Code:
 

#-------------------------------------------------------------------------------

=begin

STATE_FIX and ADDONS Ver 1.2

                                                     BY iqbal_0k A.K.A B@!LWORLD

                                                     

STATE_DATABASE 

 

Requirements: -STATE_FIX part 1

              -FMBS SYSTEM BY XRXS

              

Credit & Thanks - XRXS for this great battle system

 

1.2 Feature :

          - Removing gain sp pop_ups to increase performance

 

Feature

          - Flash damage to indicates battler loss / gain hp/sp

          - Pop'ups state name when incurs or removed

          - Adding BATTLE FRENZY effect

          - Adding REFLECT feature

          - Compatibility to other script (but still fmbs dude)

          - Damage display when poisoned, gain hp, loss sp, gain sp and much more

          - Compacting script to maintain in game performance

          - Add some unique state effect

          - Fix FMBS BUG like slip damage effect by poison, paralyze, can't act,

            silence

          - easy modification (For dummies)

=end

#-------------------------------------------------------------------------------

#===============================================================================

# ¦ Game_Battler

#===============================================================================

class Game_Battler

  def bail_poison

    self.damage = self.maxhp / 90

    if self.damage.abs > 0

      variation = [self.damage.abs * 35 / 170, 1].max

      self.damage += rand(variation) + rand(variation) - variation

    end

    self.hp -= self.damage

  end

  

  def bail_loss_sp

    self.damage = self.maxsp / 90

    if self.damage.abs > 0

      variation = [self.damage.abs * 35 / 170, 1].max

      self.damage += rand(variation) + rand(variation) - variation

    end

    self.sp -= self.damage

  end

    

  def bail_gain_sp

    self.damage = -self.maxsp / 90

    if self.damage.abs > 0

      variation = [self.damage.abs * 35 / 170, 1].max

      self.damage += rand(variation) + rand(variation) - variation

    end

    self.sp -= self.damage

  end

  

  def bail_regen

    self.damage = -self.maxhp / 90

    if self.damage.abs > 0

      variation = [self.damage.abs * 35 / 170, 1].max

      self.damage += rand(variation) + rand(variation) - variation

    end

    self.hp -= self.damage

  end

  

  def bail_hex

    self.damage = -self.hp / 50

    self.hp -= self.damage

  end

  

  def bail_demi

    self.damage = self.maxhp / 99

    self.hp -= self.damage

  end

  

end

 

#===============================================================================

# ¦ Scene_Battle mimics fmbs part 2

#===============================================================================

class Scene_Battle

  alias bail_states update_phase1

  def update_phase1

#-------------------------------------------------------------------------------

# STATE FIX

#-------------------------------------------------------------------------------

    #

    # SP RECOVERY, BLESSING AND SP DRAIN

    #

    @sp_recovery_duration  = 0 if @sp_recovery_duration == nil

    @sp_recovery_duration += 1

    @bless_duration = 0 if @bless_duration == nil

    @bless_duration += 1

    if @sp_recovery_duration >= SP_RECOVERY_FREQUENCY

      for battler in $game_party.actors + $game_troop.enemies

        if battler.state?($sp_drain_state_id)

          if battler.sp < battler.maxsp / 90

            battler.remove_state($sp_drain_state_id)

          else

              battler.bail_loss_sp

              battler.damage_pop = true

          end

        else

          if battler.state?($blessing_state_id)

            if @bless_duration <= rand(350)

              battler.sp += 1

            else

              battler.remove_state($blessing_state_id)

              @bless_duration = 0

            end

          else

            battler.bail_gain_sp if battler.sp < battler.maxsp and $gain_sp_in_normal_state == true

          end

        end

      @sp_recovery_duration = 0

      @status_window_needed_to_refresh = true

      end

    end

    

    #===========================================================================

    #SET LOOPING STATEMENT REQUIRED FOR STATE CHANGE

    for battler in $game_party.actors + $game_troop.enemies

    #===========================================================================  

 

=begin

    REGEN STATE

=end

        if battler.state?($regen_state_id)

          @hp_recover_freq = 10

          @hp_recover_duration  = 0 if @hp_recover_duration == nil

          @hp_recover_duration += 1

            if @hp_recover_duration >= @hp_recover_freq and @hp_recover_duration <= 1250

                if battler.hp < battler.maxhp / 90

                   battler.bail_regen

                   battler.damage_pop = true

                end

              @hp_recover_duration  = 0

              @status_window_needed_to_refresh = true

            else

               battler.remove_state($regen_state_id)

            end#end if               

        end

    

=begin

    POISON STATE

=end

            if battler.state?($poison_state_id)

                @hp_lost_poison = 50

                @hp_lost_duration  = 0 if @hp_lost_duration == nil

                @hp_lost_duration += 1

                @damagepopnya = battler.maxhp / 90

            if @hp_lost_duration >= @hp_lost_poison

                if battler.hp > @damagepopnya and battler.state?($poison_state_id)

                   battler.bail_poison

                   battler.damage_pop = true   

                else

                   battler.remove_state($poison_state_id)

                end

              @hp_lost_duration = 0

              @status_window_needed_to_refresh = true

            end#end if                      

            end#end if too

 

=begin

    PARALYZE STATE (it'll shaking heuheuuhe)

=end

  

    if battler.state?($paralyze_state_id) 

      @paralyze_duration = 0 if @paralyze_duration == nil

      @paralyze_duration  += 1

      if @paralyze_duration < 200

        battler.motion.knock_back_duration = 10

      else

        battler.remove_state($paralyze_state_id)

        @status_window_needed_to_refresh = true

      end

    end

 

=begin

  Entangle it prevent JUMPING and running

=end

    if battler.state?($entangle_state_id)

       battler.now_x_speed = 0

       battler.now_y_speed = 0

       battler.motion.dashing = false

    end  

 

=begin

  Float, makes you fly in air

=end

    if battler.state?($float_state_id)

       @float_duration = 0 if @float_duration == nil

       @float_duration  += 1

       if @float_duration <= 400

          battler.now_y_speed += 1

            if battler.now_y_speed > 3

                battler.now_y_speed = 0

            end

       else

          battler.remove_state($float_state_id)

       end   

    end      

 

=begin

  Sleep, cant act it will wake up in certain duration

=end

    if battler.state?($sleep_state_id)

       @sleep_duration = rand(1000) if @sleep_duration == nil

       @sleep_duration  += 1

       if @sleep_duration <= 1000

          battler.motion.do_down

          battler.motion.blowning = true

          battler.motion.knock_back_duration = 10

       else

          battler.motion.blowning = false

          battler.motion.clear

          battler.motion.do_jump

          battler.remove_state($sleep_state_id)

          @status_window_needed_to_refresh = true

       end

    end

    

=begin

    DEMI STATE

=end

            if battler.state?($demi_state_id)

                @hp_lost_duration  = 0 if @hp_lost_duration == nil

                @hp_lost_duration += 1

                if @hp_lost_duration  <= rand(350)

                   battler.bail_demi

                   battler.damage_pop = true

                else

                   battler.remove_state($demi_state_id)

                   @hp_lost_duration  = 0

                end

              @status_window_needed_to_refresh = true

            end#end if

 

=begin

    HEX STATE

=end

            if battler.state?($hex_state_id)

                   battler.bail_hex

                   battler.damage_pop = true

                   battler.remove_state($hex_state_id)

              @status_window_needed_to_refresh = true

            end#end if

            

=begin

    CURSED STATE

=end

            if battler.state?($curse_state_id)

                if rand(100) >= 75 and ( @handle_battler.motion.guarding? or

                  battler.motion.jub_attack_connect_f > 0)

                  battler.bail_poison

                  battler.damage_pop = true 

                  battler.motion.knock_back_duration = 2

                  @status_window_needed_to_refresh = true

                end

            end#end if            

            

=begin

    SHIELD STATE

=end

            if battler.state?($shield_state_id)

              if battler.motion.guarding? and rand(100) >= 90

                 battler.motion.hit_invincible_duration = 10 #makes battler invincible

                 battler.blink = true

              end

            end

            

=begin

    GHOST STATE

=end

            if battler.state?($ghost_state_id)

              if rand(100) >= 85

                 battler.motion.hit_invincible_duration = 10 #makes battler invincible

                 battler.blink = true

              end

            end            

      

=begin

    Berserk STATE

=end

            if @handle_battler.state?($berserk_state_id) and @handle_battler.is_a?(Game_Actor)

               if rand(1000) == 1

                 battler.remove_state($berserk_state_id)

               else

                 @handle_battler.ai.update

               end

             end

      end #end State Cycling

      bail_states

   end

 

  alias bail_state_handler update_handling

  def update_handling

    

# BERSERK STATE RESTRICTION    

    if @handle_battler.state?($berserk_state_id)

      if Input.trigger?(KEY_MEMBER_CHANGE)

        $game_system.se_play($data_system.buzzer_se)

      end

      if Input.trigger?(Input::DOWN) and @trigger_duration_key_down > 0

        $game_system.se_play($data_system.buzzer_se)

      end

      if Input.trigger?(KEY_ATTACK)

        $game_system.se_play($data_system.buzzer_se)

      end

      if Input.trigger?(KEY_SKILL)

        $game_system.se_play($data_system.buzzer_se)

      end

      if Input.trigger?(KEY_JUMP) or

        (Input.trigger?(Input::UP) and @trigger_duration_key_up > 0)

        $game_system.se_play($data_system.buzzer_se)

      end

      if Input.press?(KEY_GUARD) and !@handle_battler.motion.blowning

        $game_system.se_play($data_system.buzzer_se)

      end

    else

      bail_state_handler

    end

# END BERSERK STATE

  end

end

 

FMBS ITEM FIX
Code:
 

=begin

=begin

FMBS ITEM FIX ver 1.0

BY iqbal_0k A.K.A B@!LWORLD

 

Credit & Thanks 

        - XRXS for this great battle system

        - Verdeni in RMXP.ORG that find revival item bugs (thanks man)

 

FEATURE 1.0 (JUNE 9 2008) NEW

  - FIX ALL SCOPE for item (ALL ALLIES, ALL ALLIES HP 0, ALL ENEMIES)

    this will immediately make effect for all scope item

  - FIX REVIVAL ITEM bugs

  - FIX HELP WINDOW ITEM BUG after the actor/enemy selection (Help window still shown after using an item)

    

  HOW to use this script

  

  - Put This script above main and under all default FMBS script

=end

 

class Scene_Battle

  #--------------------------------------------------------------------------

  # * Frame Update (actor command phase : item selection)

  #--------------------------------------------------------------------------

  def update_phase3_item_select

    # Make item window visible

    @item_window.visible = true

    # Update item window

    @item_window.update

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # End item selection

      end_item_select

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # Get currently selected data on the item window

      @item = @item_window.item

      # If it can't be used

      unless $game_party.item_can_use?(@item.id)

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Play decision SE

      $game_system.se_play($data_system.decision_se)

      # Set action

      @active_battler.current_action.item_id = @item.id

      # Make item window invisible

      @item_window.visible = false

      # If effect scope is single enemy

      if @item.scope == 1

        # Start enemy selection

        start_enemy_select

        # if effect scope is for all enemies

      elsif @item.scope == 2

        @target_battlers = $game_troop.enemies

        # End item selection

        end_item_select

        #run item effect

        make_item_action_result

        @status_window_needed_to_refresh = true

      # If effect scope is single ally

      elsif @item.scope == 3 or @item.scope == 5

        # Start actor selection

        start_actor_select

      # If effect scope is for all ally's

      elsif @item.scope == 4

        @target_battlers = $game_party.actors

        # End item selection

        end_item_select

        #run item effect

        make_item_action_result

        @status_window_needed_to_refresh = true

      # If effect scope is for all ally's HP 0

      elsif @item.scope == 6 

        #cycling all actor to find the dead

        for @battler in $game_party.actors

          if @battler != nil and @battler.hp0?

            @target_battlers.push(@battler)

          end

        end

        # End item selection

        end_item_select

        #run item effect

        make_item_action_result

        @status_window_needed_to_refresh = true

      # is for self

      else

        # End item selection

        end_item_select

        #run item effect

        make_item_action_result

        #next Phase

        @phase = 4

        @phase4_step = 4

        update_phase4_step6

        # go back to menu      

        @phase = 1

        @status_window_needed_to_refresh = true

        @xcam_z_destination = 185

      end

      return

    end

  end

  

  alias bail_item_handling update_handling

  def update_handling

    bail_item_handling

    @help_window.visible = false if @help_window.visible == true

  end

  

  def Bailworld(scope)

    # Clear Target

    @target_battlers = []

    # If battler performing action is actor

    if @active_battler.is_a?(Game_Actor)

      # Branch by effect scope

      case scope

      

      when 1  # single enemy

        index = @active_battler.current_action.target_index

        @target_battlers.push($game_troop.smooth_target_enemy(index))

        

      when 2  # all enemies

        for enemy in $game_troop.enemies

          if enemy.exist?

            @target_battlers.push(enemy)

          end

        end

        

      when 3  # single ally

        index = @active_battler.current_action.target_index

        @target_battlers.push($game_party.smooth_target_actor(index))

        

      when 4  # all allies

        for actor in $game_party.actors

          if actor.exist?

            @target_battlers.push(actor)

          end

        end

        

      when 5  # single ally (HP 0) 

        index = @active_battler.current_action.target_index

        actor = $game_party.actors[index]

        if actor != nil and actor.hp0?

          @target_battlers.push(actor)

        end

        

      when 6  # all allies (HP 0)

        for actor in $game_party.actors

          if actor != nil and actor.hp0?

            @target_battlers.push(actor)

          end

        end

        

      when 7  # user

        @target_battlers.push(@active_battler)

      end

    end

  end  

  

  def make_item_action_result

    

    #Clear Help Window

    @help_window.visible = false

    

    #Get item

    @item = $data_items[@active_battler.current_action.item_id]

    # If unable to use due to items running out

    unless $game_party.item_can_use?(@item.id)

      # Shift to step 1

      @phase4_step = 1

      return

    end

    # If consumable

    if @item.consumable

      # Decrease used item by 1

      $game_party.lose_item(@item.id, 1)

    end

    # Display item name on help window

    # @help_window.set_text(@item.name, 1)

    

    # Set animation ID

    @animation1_id = @item.animation1_id

    @animation2_id = @item.animation2_id

    

    # Set common event ID

    @common_event_id = @item.common_event_id

    

    # Decide on target

    index = @active_battler.current_action.target_index

    target = $game_party.smooth_target_actor(index)

    

    # Set targeted battlers

    Bailworld(@item.scope)

    

    #Make Animation

    target.animation_id = @animation2_id  

    target.animation_hit = true

    

       for target in @target_battlers         

         # Apply item effect

         target.item_effect(@item)

       end

   end

end

 
ADDONS

DYNAMIC STATUS ICONS
Code:
 

=begin 

Dynamic Icon States ver BETA                         BY Iqbal_0k A.K.A B@!LWORLD

                                               ;;;;;;      TESTED & EDIT march 18 2008

 FAQ

 

 history 

   Ver Beta compiled and tested in march 18 2009

Feature (Ver Beta) :  - Change text based states to icon based states

                      - Dynamicly set displayed states icon inside the game with syntax "$max_icons = n" n = número that you want the most

                      - Automaticly removed next (infected) states

                      - Designed for FMBS Battle System by XRXS

                      - if state rating is higher than previous state then i change their position

  

    Credit & thanks

        - XRXS for his great Battle system (FMBS)

        - ... and you for using my script

    

FAQ        

 Q : instruction?

 A : Place this script above main and add this syntax "$max_icons = nil" in Scene_title below line 30

        

 Q : How To add new icons ?

 A : Simply just create in folder graphics\icons\your_states_icons_name_based_on_database.png

 

 Q : How To add or substract maximum states that will displayed and take effect?

 A : Go to line 42 or search $max_icons or you can call it via event script 

     ex : $max_icons = 4 (it means you changed maximum number of showing icon to 4)

 

 Q : can i used your states icon script?

 A : yeah my script is free for both commercial and free games (credit me please)

 

 Q : What is Compatibility ?

 A : - 41% works with sdk (i'm not sure, if you use the sdk, the game speed may decrease rapidly)

     - 99% works with FMBS battle System, default battle system

     - 90% works with cms

     - 70% work with exotic cbs-es, rtab (a little modify in their states window if they use command "draw_actor_state")

     - 70% work with abs, tbs (a little modify in their hud if they dont use command "draw_actor_state")

                SORRY for my bad english usually i write spanish and indonesian language

=end

#============================================================================================

#INITIALIZE WINDOW_BASE

#============================================================================================

class Window_Base < Window

  def mode_states_icon(battler, width, need_normal) #based from window_base

    states = [] #initialize the states arrays

    #here is the maximum number of icon, if you change it to > 6 then you'll need a little modify the hud/window itself (if in FMBS)

    $max_icons = 6 if $max_icons == nil #(for default rpg maker system use max_icon <= 4)

    

#DON'T TOUCH OR EDIT BELOW THIS LINE

#============================================================================================

 

    for i in battler.states

      if battler.hp != 0 then

        states.push($data_states[i]) #insert the states in array's

        if states[$max_icons] != nil#condition if states[$max_icons] not empty

          for j in battler.states

            if states[i] != states[$max_icons] and states[$max_icons] != states[j]

              battler.remove_state(i) #Kick the states out of battler body

            end

          end        

        end

      else

        for k in battler.states

          battler.remove_state(i)

          break

        end

        battler.add_state(1)

        states.push($data_states[1])

      end

    end

    return states # give value to caller script

  end

  

  def draw_actor_state(actor, x, y, width = 90) #based from window_base

    icon_state = mode_states_icon(actor, width, false) #take states from def

    iqbal = [] #initialize buffer array that used to convert inttostr

    for i in 0...icon_state.size  #Do loops

      iqbal.push(icon_state[i].name)

      bitmap = RPG::Cache.icon(iqbal[i])

      self.contents.blt(x + (24 * i), y + 4, bitmap, Rect.new(0, 0, 24, 24))

    end #end for

  end #end def

end #end class

ENHANCEMENT 1.7

TXT format (there not enough room for me to use spoiler  :crazy:)
CBE 1.7 B Script

Code:
 

NEW 1.7

- Tales of Abbys Style SKILL WINDOWS

- FORCE SKILL MODE

- FIX AI BUGS

- Make more option for customization

- FIX ENHANCED ESCAPE SYSTEM

- FIX Default Skill item on skill window class

- FIX Default Skill and Equip menu in battle

- Different ATTACK / SKILL MODE (SEMI, AUTO AND MANUAL)

 

OLD Version (DESCENDING)

- FIX Animated faces system problems

- ENHANCED ESCAPE SYSTEM

- More window control

- New Skill Name Window

- Improved AI in battle

- Fix enemy combo windows lag problems

- Fix Best performance bugs 

- Added enemy combo windows

- Added enemy name windows

- Modify Default RMXP Damage so it'll looks like tales of abbys damage

- Modify Combo hit display so it will be lagless and easy to customize

- Adding animation when level up, gain new skill (set this to 0 to disable this feature)

- Adding Outro Controls (Level up, Gain skill and enable battle status)

- Adding face's system like in tales of abys 

- Fix Battle status position

- Fix Camera move when hero is in berserk state

- Fix Showing enemy name bug's ("Fix Name Position")

- Fix victory bug when you used 4 battlers

- ALL actor now use victory pose when winning the battlers

- Many people requesting camera shift automaticly not with a key pressed

- Custom Battle HUD (You can choose up to 12 different style's)

- Fixed Self.Bitmap bugs

- Paused Battler before battle begin

- Improved custom escape

- Change distance position of enemy and hero

- Show enemy location when battle is starting

- Replace Escape timer with escape probability 

- Show enemy name pop up when battle is starting

- delete escape command in battle menu

- Change meteor boulder to escape

 

DEMO
Updated Item Fix 1.0, State Fix 1.1, Action Message 1.2
http://www.mediafire.com/?n20mcy9jl9q

A Demo with current CBE 1.7 b
http://www.mediafire.com/?c4ye1mktgxt

OlD DeMo
http://www.mediafire.com/?oy01js1xssj (UPDATED APRIL 9 2008)

SCREENSHOT

here's Screenies
Static.png

Author Notes
if you find another bug post it here with screenshot if possible.
 

Yazus

Member

completly awesome. At this rate, we will finally be able to use this script
fully and bugless!

Ziddu is somehow lame and it dun let me download the demo :( please reupload on mediafire and company :)
 
When I tried to enter to the Skills menu, it gave me an error because some "Loki_11910_2" icon was missing. You should fix that. But, it's great that someone finnally has fixed some problems with the script and has even added some extra features, well done ^^.
 
I got an Unable to found Sword2 or something, when trying to switch chars.
EDIT: Happened when some guy was about to use a skill.
 
those bug again, well when i had a time i'll upload my unique rtp package and my newer state fix version, seriously i'm still working for battle message in fmbs. just for now rename other animation in graphics\animation folder to sword2 (i'm sorry about this)
Note : if you had VX RTP copy Sword2 from InstallationDirectory\RGSS2\Graphics\Animation
         To your InstallationDirectory\RGSS\Graphics\Animation
(BUG FIXED DEMO MODIFIED)
 
I think you'll have to fix... the download link ^^u. I don't know if anyone else can download the latest version, but i can't download anything from that website. Could you upload the demo to another one?
 

revee

Member

hey, can FMBS:

- show the skill name when used the skill?
- different voices when used skill
- show animation?
- battle result just like tales of eternia?
thx
 
(if you do not know Spanish, this translates)
Gracias iqbal_0k  por mejorar el sistema FMBS_ITEM_FIX... por lo que veo el demo y tutorial que presente (uff hace un tiempo ya) a pasado por varios foros... jejeje... espero que las ultimas mejoras que realices sean espectaculares, por mi parte estoy desarrollando un tutorial mas avanzado y un demo con las ultimas mejoras que has realizado y algunos detalles que e encontrado ultimamente...

revee... Se pueden mostrar los nombres de los skill, pero como el sistema trabaja en base a skills (el sistema no reconoce ataques basicos o especial), te mostraria demasiados nombres y esto produciria lag, ademas de no ser muy atractivo a la vista. Tambien se pueden crear diferentes voces para cada ataque... solo debes revizar el script... y con respecto al battle result tipo tales of eternia o director cut, estoy trabajando en eso...

Seria un agrado que alguien mas se sumara en mejorar este sistema de batalla, pero por ahora estoy muy feliz de que alguien mas, aparte de mi, se apasionara tanto por este battle system... es un gran sistema que pocos usan por su grado de complejidad y la falta de informacion...

Bueno otra vez decir a iqbal_0k... gracias, sige con esa pasion... suerte...

Xaoooo pescao

                            -Hiliart ( Miembro del GD Spiral Dreams)-
 

revee

Member

Hiliart,
apesadumbrado, pero i doesn' t sabe cualquier cosa sobre la escritura, ¿Así pues, puede usted por favor demostrarme la escritura que necesario para cambiar las voces? y, y usted puede transferir cuentos de la fe, el extremo de la batalla parece apenas como juegos de los cuentos… esperaré su nueva versión parcial de programa avanzada… véale pronto(
(i translate this with babel fish ^^)
 
NEW ACTION MESSAGE FOR FMBS

ACTION BATTLE MESSAGE FOR FMBS

Instruction :
Put this below original fmbs script or above main
Code:
#-------------------------------------------------------------------------------
=begin
ACTION MESSAGE DATABASE VER 1.2 (Tested and edit on June 8th 2008)

                                                     BY iqbal_0k A.K.A B@!LWORLD
                                                     
Instruction : - Place above main and below other fmbs and my Addons Script
              - Set Your action message in part one

Credit & Thanks - XRXS for this great battle system

Feature :(april 7th 2008)
          - Add Action Message in battle (Not in Help windows)
          - Random message shown in battle
          - Easy Modification (for beginner scripter ... like me)
          - Custom Windowskin (you can change the windowskin on line 100)
          
STATIC VER 1.1 Feature : (april 10th 2008 : FINAL)
          - Fixed win message glitch
          - Added New Line (now maximum line is 3) may be increasing if you want it
          - Fixed skill Message Glitch
          - Added Global deactivated/ activated, use call script command on event ptocessing and write this
            without quotes "FMBS_BM = true/false" False will be deactivated the windows
          - added HASH SKILL (so different message on each skill will be shown, aren't that neat)
          - NOW Your Party and enemy can talk when they attack, win, escape or using skill (Just set the $btalk to false if you want only
            handle battler message that shown)
          - completely use Faces in graphics/faces2 directory
            If a battler is a enemy or other than 4 heroes then you must make picture of an enemy in your
            faces2\enemy Name.png (NOT CHAR NAME)
          - you can switched off the faces by using $i_like_cat = false

STATIC VER 1.2 Feature : (June 8th 2008)
          - Compacting script and make compatibility to other fmbs script
          - Correcting some minor bug
          - Not need custom FMBS part 2 anymore
          
BETA Tester : - Hendy_Bejo(Gamedevid) : thanks for Skill message Glitch info man          
=end      
#-------------------------------------------------------------------------------
#===============================================================================
# ¦ CONFIGURATION
#===============================================================================
# TOP : the window on top Center on screen (DEFAULT)
# CENTER : The window on center on screen
# BOTTOM : the window on botom Center on the screen

     #Battle message Position
     $battle_message_style = "CENTER"
     
     #active/deactive WINDOWS MESSAGE FEATURE
     $fmbs_bm = true
     
     #ENABLE BATTLER TALK (OTHER THAN HERO YOU CONTROLED (ENEMY and OTHER ALLY's))
     $btalk = true
     
     #ENABLE/DISABLE FACE Pics
     $i_like_cat = true
     
# EMD CONFIGURATION

#===============================================================================
# ¦ VOCABULARY
#===============================================================================
module FMBS_BM
  #FILL THIS FOR LINE 1
     MSG_JUMP = ["Haeyah", "Ha"]     
     #HERE SKILL MESSAGE (ID REFER FROM SKILL ID ON DATABASE)
     #syntax : 
     # id => ["your message here", "your n Message"]
     # if you add more skill then use this syntax
     # id => ["your message here", "your n Message"],
     #DONT FORGET TO FILL THE NEXT LINE ARRAY
     #0 => is the default message that shown if you're not initializing them
     #if you fill "" on first line {i.e (0=> [""],[""]) then the message boxes is only show your skill name}
     
     
     MSG_SKILL = {
     0 => ["", ""],
     1 => ["Hey, Are you okay ?", "Don't worry i'll heal you", "You're badly injured"],
     2 => ["Hey, Are you okay ?", "Don't worry i'll heal you", "You're badly injured"],
     3 => ["There\'s no way you can defeat us", "ONEGA HEALING"],
     4 => ["DEVINE HEALING !!!", "Do you really think that can hurt me?", "Is that you can do ?"],
     5 => ["This Damn Cursed, BEGONE !!!", "Cure", "You can\'t poison me"],
     83 => ["You\'ll never get away with this", "You\'re good for nothing", "Jump Attacl"],
     85 => ["Purrr...", "Brrrr...", "", ""],
     86 => ["Bzzzzz..", "zzzzzz...", "", ""],
     87 => ["Bzzzzz...", "Growl...", "", ""],
     88 => ["Growl", "Zonk", "", ""],
     89 => ["(Is Looking to Target Silently)", "....", ""],
     90 => ["Gahhh", "Wahhhh"],
     91 => ["Gahhh", "Wahhhh"],
     123 => ["Take This !", "Take That !", "Shooorya", "Heaeyah"]
     }
     MSG_SKILL_CHARGE = ["W00t"] #presshold
     MSG_ESCAPE = ["Not this time, PUNK'S", "FALL BACK, TEAM !!!"]
     MSG_WIN = ["HUURRAY, WE WON !", "That was soo cloose !. hmph"]
     MSG_ITEM = ["Let see what i have in my bag", "Hey, There it is", "Better to use it, now"]
     MSG_STAND_UP = ["Hup", "Haa!", "Hup!"]
     MSG_GUARD_BACK_STEP = ["Not a Chance!", "Missed!", "Where you attacking at?", "Are you Blind?"]
     MSG_GUARD = ["Worthless", "This Script Sucks!"]
     
  #FILL THIS FOR LINE 2
     MSG_JUMP2 = ["", ""]
  
     #HERE SKILL MESSAGE (ID REFER FROM SKILL ID ON DATABASE)
     #syntax : 
     # id => ["your message here", "your n Message"]
     # if you add more skill then use this syntax
     # id => ["your message here", "your n Message"],
     #DONT FORGET TO FILL THE ARRAY SAME AS PREV LINE
     #0 => is the default message that shown if you're not initializing them
     
     MSG_SKILL2 = {
     0 => ["", ""],
     1 => ["", "", "Come to me now !"],
     2 => ["", "", "Come to me now !"],
     3 => ["", ""],
     4 => ["", "", "You're Pathetic"],
     5 => ["", "", "with this now"],
     83 => ["", "", ""],
     85 => ["", "", "", ""],
     86 => ["", "", "", ""],
     87 => ["", "", "", ""],
     88 => ["", "", "", ""],
     89 => ["", "", ""],
     90 => ["", ""],
     91 => ["", ""],
     92 => ["", ""],
     123 => ["", "", "", ""]
     }
     MSG_SKILL_CHARGE2 = [""] #presshold
     MSG_ESCAPE2 = ["", "He is damn tough !"]
     MSG_WIN2 = ["At last", ""]
     MSG_ITEM2 = ["", "", ""]
     MSG_STAND_UP2 = ["", "", ""]
     MSG_GUARD_BACK_STEP2 = ["", "", "", ""]
     MSG_GUARD2 = ["", ""]
     
  #FILL THIS FOR LINE 3
     MSG_JUMP3 = ["", ""]
    
     #HERE SKILL MESSAGE (ID REFER FROM SKILL ID ON DATABASE)
     #syntax : 
     # id => ["your message here", "your n Message"]
     # if you add more skill then use this syntax
     # id => ["your message here", "your n Message"],
     #DONT FORGET TO FILL THE ARRAY SAME AS PREV LINE
     
     MSG_SKILL3 = {
     0 => ["", ""],
     1 => ["", "", "I\'ll Heal you right away"],
     2 => ["", "", "I\'ll Heal you right away"],
     3 => ["", ""],
     4 => ["", "", "Your damage was healed"],
     5 => ["", "", ""],
     83 => ["", "", ""],
     85 => ["", "", "", ""],
     86 => ["", "", "", ""],
     87 => ["", "", "", ""],
     88 => ["", "", "", ""],
     89 => ["", "", ""],
     90 => ["", ""],
     91 => ["", ""],
     92 => ["", ""],
     123 => ["", "", "", ""]
     }
     MSG_SKILL_CHARGE3 = [""] #presshold
     MSG_ESCAPE3 = ["", ""]
     MSG_WIN3 = ["", ""]
     MSG_ITEM3 = ["", "", ""]
     MSG_STAND_UP3 = ["", "", ""]
     MSG_GUARD_BACK_STEP3 = ["", "", "", ""]
     MSG_GUARD3 = ["", ""]   
  
  #NOTE SIZE FOR ALL MESSAGE MUST BE SAME
  #if you dont to write text simply write "" on the arrays
  #(P.S "Im too lazy to write em regullary, so we can call like FMBS_BM::btalk == true")
end

#MAIN WINDOWS
#
#==============================================================================
# ? Window_Battle_Message
#==============================================================================
class Battle_Message < Window_Base  
  def initialize
    super( 0, 0, 410, 100) #x, y, width, height
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 255
    @skin_name = "FFXII" #YOUR WINDOWSSKIN NAME
    self.windowskin = RPG::Cache.windowskin(@skin_name)
    self.contents.font.size = 24
    self.visible = false
    self.contents.clear
    refresh
  end
  
  def draw_actor_face2(actor, x, y)
    face = RPG::Cache.character("Faces2/" + actor.character_name, actor.character_hue)
    fw = face.width
    fh = face.height
    src_rect = Rect.new(0, 0, fw, fh)
    self.contents.blt(x - fw / 23, y - fh, face, src_rect)
  end
  
  def draw_enemy_face(x, y)
    face = RPG::Cache.character("Faces2/" + $cute_cat, 0) 
    fw = face.width
    fh = face.height
    src_rect = Rect.new(0, 0, fw, fh)
    self.contents.blt(x - fw / 23, y - fh, face, src_rect)
  end
  
  def refresh
    self.contents.clear
    self.contents.font.color = system_color
    self.contents.font.size = 20
    $bat = 0 if $bat == nil
    if $bat == 0 
      actor = $game_party.actors[0]
    elsif $bat == 1 
      actor = $game_party.actors[1]
    elsif $bat == 2
      actor = $game_party.actors[2]
    elsif $bat == 3
      actor = $game_party.actors[3]
    end
    
    if $fmbs_bm == true
      draw_actor_face2 (actor,0 ,65) if $bat != 4 and $i_like_cat == true
      draw_enemy_face (0 ,65) if $bat == 4 and $i_like_cat == true
      self.contents.draw_text(100, 0, 310, 28, $text_message, 0)if $text_message != nil #x, y, width, height, text, align
      self.contents.draw_text(100, 20, 310, 28, $text_message2, 0)if $text_message2 != nil #x, y, width, height, text, align
      self.contents.draw_text(100, 40, 310, 28, $text_message3, 0)if $text_message3 != nil #x, y, width, height, text, align
    end
  end  
end

part 2
Code:
#-------------------------------------------------------------------------------
=begin
Action MESSAGE Battle Processing VER 1.2 (Tested and edit on June 8th 2008)

                                                     BY iqbal_0k A.K.A B@!LWORLD
Requirements: 
              - FMBS SYSTEM BY XRXS
              - FMBS MESSAGE Part 2
              
Instruction : - Place above main and below other fmbs and my Addons Script
              - Set Your action message in part one

Credit & Thanks - XRXS for this great battle system

Feature :(april 7th 2008)
          - Add Action Message in battle (Not in Help windows)
          - Random message shown in battle
          - Easy Modification (for beginner scripter ... like me)
          - Custom Windowskin (you can change the windowskin on line 100)
          
STATIC VER 1.1 Feature : (april 10th 2008 : FINAL)
          - Fixed win message glitch
          - Added New Line (now maximum line is 3) may be increasing if you want it
          - Fixed skill Message Glitch
          - Added Global deactivated/ activated, use call script command on event ptocessing and write this
            without quotes "FMBS_BM = true/false" False will be deactivated the windows
          - added HASH SKILL (so different message on each skill will be shown, aren't that neat)
          - NOW Your Party and enemy can talk when they attack, win, escape or using skill (Just set the $btalk to false if you want only
            handle battler message that shown)
          - completely use Faces in graphics/faces2 directory
            If a battler is a enemy or other than 4 heroes then you must make picture of an enemy in your
            faces2\enemy Name.png (NOT CHAR NAME)
          - you can switched off the faces by using $i_like_cat = false

STATIC VER 1.2 Feature : (June 8th 2008)
          - Compacting script and make compatibility to other fmbs script
          - Correcting some minor bug
          - Not need custom FMBS part 2 anymore          
          
BETA Tester : - Hendy_Bejo(Gamedevid) : thanks for Skill message Glitch info man

=end     
#-------------------------------------------------------------------------------
#==============================================================================
# ¦ Scene_Battle
#==============================================================================
class Scene_Battle
  alias fmbs_bm_main main
  def main
    fmbs_bm_main
    @windows.dispose
  end
  
  alias bail_fmbs_bm_phs1 start_phase1
  def start_phase1
    bail_fmbs_bm_phs1
    @windows=Battle_Message.new
    if $text_message == nil or $text_message == ""
      @windows.visible = false
    else
      @windows.visible = true
    end    

    $battle_message_style = "TOP" if $battle_message_style == nil
    
    if $battle_message_style == "TOP"
       @windows.x = 120
       @windows.y = 0
    elsif $battle_message_style == "CENTER"
       @windows.x = 120
       @windows.y = 140
    elsif $battle_message_style == "BOTTOM"
       @windows.x = 120
       @windows.y = 380
    end
  end
  
  alias fmbs_bm_item_sel update_phase3_actor_select
  def update_phase3_actor_select
    fmbs_bm_item_sel
    if Input.trigger?(Input::C)
      if @item_window != nil
            if $fmbs_bm == true
              @proc = rand(FMBS_BM::MSG_ITEM.size)
              if @active_battler == $game_party.actors[0]
                  $bat = 0
                elsif @active_battler == $game_party.actors[1]
                  $bat = 1  
                elsif @active_battler == $game_party.actors[2]
                  $bat = 2
                elsif @active_battler == $game_party.actors[3]
                  $bat = 3
                else
                  $bat = 4
              end
              @windows.visible = true
              $text_message = FMBS_BM::MSG_ITEM[@proc].clone
              $text_message2 = FMBS_BM::MSG_ITEM2[@proc].clone
              $text_message3 = FMBS_BM::MSG_ITEM3[@proc].clone
              @duration = 10
              @windows.refresh
            end
      end
    end
  end  
    
  alias fmbs_bm_start_phase5 start_phase5
  def start_phase5
    fmbs_bm_start_phase5
    @windows.visible = false
  end
  
  alias fmbs_bm_update_phase5 update_phase5
  def update_phase5
    if @phase5_whiteout_duration >= 0
      @mulan = false if @mulan == nil
            if @mulan == false
             if $fmbs_bm == true
              @proc = rand(FMBS_BM::MSG_WIN.size)
              if @active_battler == $game_party.actors[0]
                  $bat = 0
                elsif @active_battler == $game_party.actors[1]
                  $bat = 1  
                elsif @active_battler == $game_party.actors[2]
                  $bat = 2
                elsif @active_battler == $game_party.actors[3]
                  $bat = 3
                else
                  $bat = 4
              end
              @windows.visible = true
              $text_message = FMBS_BM::MSG_WIN[@proc].clone
              $text_message2 = FMBS_BM::MSG_WIN2[@proc].clone
              $text_message3 = FMBS_BM::MSG_WIN3[@proc].clone
              @duration = 20
             end
            end
      
      @phase5_whiteout_duration -= 1
      if @phase5_whiteout_duration == 0
        @windows.refresh        
      elsif @phase5_whiteout_duration == -1
      end
      return
    end
    unless @phase5_voice_done
      @final_battler.motion.do_won_cry
      @phase5_voice_done = true
      @windows.visible = false
      $text_message = nil
      $text_message2 = nil
      $text_message3 = nil
      @mulan = true
    end
    xrxs_bs1_update_phase5
  end
   
  alias fmbs_bm_dynamic_handling update_handling
  def update_handling
    fmbs_bm_dynamic_handling
    if $fmbs_bm == true
      @whatever = 0  if @whatever == nil
      @duration = -1 if @duration == nil
      @duration -= 1 if @duration != nil and @duration > 0 and @windows.visible == true
      @windows.visible = false if @windows.visible == true and @duration == 0
      if @duration == 0
        $text_message = nil
        $text_message2 = nil
        $text_message3 = nil
      end
    end 

   #fix item help window glitch
    @help_window.visible = false if @help_window.visible == true
    
    if Input.press?(KEY_GUARD)
    else
      @whatever = 0  if @whatever != 0
    end
    
    if @escaping
      if @escape_time_now >= @escape_time_max
            if $fmbs_bm == true
              if @active_battler == $game_party.actors[0]
                  $bat = 0
                elsif @active_battler == $game_party.actors[1]
                  $bat = 1
                elsif @active_battler == $game_party.actors[2]
                  $bat = 2
                elsif @active_battler == $game_party.actors[3]
                  $bat = 3
                else
                  $bat = 4
                  $cute_cat = @active_battler.name
              end
              @proc = rand(FMBS_BM::MSG_ESCAPE.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_ESCAPE[@proc].clone
              $text_message2 = FMBS_BM::MSG_ESCAPE[@proc].clone
              $text_message3 = FMBS_BM::MSG_ESCAPE[@proc].clone
              @duration = 20
              @windows.refresh
            end
          end
        return
      end
    
    if Input.trigger?(KEY_MEMBER_CHANGE)
      @windows.visible = false
      @windows.refresh
      @status_window.refresh
    end
    
    if @handle_battler.dead?
      @windows.visible = false
      @windows.refresh
      return
    end
 
    frict_break = true
    air_resist  = true

    loop do
      #
      if Input.trigger?(KEY_ATTACK)
                 
        if @handle_battler.motion.now_jumps == 0
          if @handle_battler.motion.jub_attack_connect_f > 0
            if @handle_battler.motion.can_jub_attack3?
            else
            end
          elsif @handle_battler.motion.dashing
          elsif (@handle_battler.direction == 1 and Input.press?(Input::RIGHT)) or 
             (@handle_battler.direction ==-1 and Input.press?(Input::LEFT))
          elsif Input.press?(Input::UP)
          elsif Input.press?(Input::DOWN)
          else
          end
        else
        #
          if (@handle_battler.direction == 1 and Input.press?(Input::RIGHT)) or 
             (@handle_battler.direction ==-1 and Input.press?(Input::LEFT))
          elsif Input.press?(Input::UP)
          elsif Input.press?(Input::DOWN)
          elsif (@handle_battler.direction ==-1 and Input.press?(Input::RIGHT)) or 
                (@handle_battler.direction == 1 and Input.press?(Input::LEFT))
          else
          end
        end
      end

        
      #
      if Input.trigger?(KEY_JUMP) or
        (Input.trigger?(Input::UP) and @trigger_duration_key_up > 0)
        if @handle_battler.motion.now_jumps < @handle_battler.max_jumps
          if @handle_battler.motion.dashing            
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_JUMP.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_JUMP[@proc].clone
              $text_message2 = FMBS_BM::MSG_JUMP2[@proc].clone
              $text_message3 = FMBS_BM::MSG_JUMP3[@proc].clone
              @duration = 20
              @windows.refresh
            end
          else
            
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_JUMP.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_JUMP[@proc].clone
              $text_message2 = FMBS_BM::MSG_JUMP2[@proc].clone
              $text_message3 = FMBS_BM::MSG_JUMP3[@proc].clone
              @duration = 20
              @windows.refresh
            end
          end
        end
      end
    if @handle_battler.motion.guardable?
      #
      if Input.press?(KEY_GUARD) and !@handle_battler.motion.blowning
        if @handle_battler.motion.guarding? and 
           ((Input.trigger?(Input::LEFT) and @handle_battler.direction == 1) or
            (Input.trigger?(Input::RIGHT)and @handle_battler.direction ==-1))            
            
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_GUARD_BACK_STEP.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_GUARD_BACK_STEP[@proc].clone
              $text_message2 = FMBS_BM::MSG_GUARD_BACK_STEP2[@proc].clone
              $text_message3 = FMBS_BM::MSG_GUARD_BACK_STEP3[@proc].clone
              @duration = 20
              @windows.refresh
            end  
        else
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_GUARD.size)
              @whatever += 1
              @windows.visible = true              
              $text_message = FMBS_BM::MSG_GUARD[@proc].clone
              $text_message2 = FMBS_BM::MSG_GUARD2[@proc].clone
              $text_message3 = FMBS_BM::MSG_GUARD3[@proc].clone
              @windows.refresh if @whatever == 1
            end
        end
      end
    end
    if @handle_battler.motion.handling_priority == 0
      if @handle_battler.motion.blowning and
        ((Input.trigger?(Input::LEFT)  and @trigger_duration_key_right >= 0) or
         (Input.trigger?(Input::RIGHT) and @trigger_duration_key_left  >= 0))
      end
      if @handle_battler.motion.downing
        if Input.trigger?(Input::UP) or
           Input.trigger?(Input::DOWN) or
           Input.trigger?(Input::RIGHT) or
           Input.trigger?(Input::LEFT)
           
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_STAND_UP.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_STAND_UP[@proc].clone
              $text_message2 = FMBS_BM::MSG_STAND_UP2[@proc].clone
              $text_message3 = FMBS_BM::MSG_STAND_UP3[@proc].clone
              @duration = 20
              @windows.refresh
            end
        end
        break
      end

      if Input.trigger?(KEY_MENU)
        @windows.visible = false
        @windows.refresh
        return
      end

      if @handle_battler.motion.now_jumps == 0
        if Input.trigger?(Input::RIGHT) and @trigger_duration_key_right > 1
        elsif Input.trigger?(Input::LEFT) and @trigger_duration_key_left > 1
        end
        
        if Input.press?(Input::RIGHT)
        elsif Input.press?(Input::LEFT)
        elsif Input.press?(Input::DOWN)
        else
          if @handle_battler.motion.dashing
          else
          end
        end
      end
    end
    break
    end

    key = @handle_battler.motion.presshold_key
    if !key.nil? and Input.press?(key)
              
            if $fmbs_bm == true
              $bat = 0
              @proc = rand(FMBS_BM::MSG_SKILL_CHARGE.size)
              @windows.visible = true
              $text_message = FMBS_BM::MSG_SKILL_CHARGE[@proc].clone
              $text_message2 = FMBS_BM::MSG_SKILL_CHARGE2[@proc].clone
              $text_message3 = FMBS_BM::MSG_SKILL_CHARGE3[@proc].clone
              @duration = 20
              @windows.refresh
            end
    end

    if Input.trigger?(Input::UP)
    end
      if Input.trigger?(Input::DOWN)
    end
    if Input.trigger?(Input::RIGHT)
    end
    if Input.trigger?(Input::LEFT)
    end
  end
  
  def make_skill_action_result
    # get skill id
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # substract actor mp with skill cost
    @active_battler.sp += @skill.sp_cost
    # here it goes fmbs battle message for skill
    
            if $fmbs_bm == true 
             if @active_battler == @handle_battler
              if FMBS_BM::MSG_SKILL[@skill.id] == nil
                @proc = FMBS_BM::MSG_SKILL[0]
                @proc2 = FMBS_BM::MSG_SKILL2[0]
                @proc3 = FMBS_BM::MSG_SKILL3[0]
                @swt = rand(@proc.size)
                @temps = @proc[@swt]
                @temps2 = @proc2[@swt]
                @temps3 = @proc3[@swt]
                $bat = 0
                @windows.visible = true
                $text_message = @temps.clone + @skill.name.clone
                $text_message2 = @temps2.clone
                $text_message3 = @temps3.clone
                @duration = 20
                @windows.refresh
              else
                @proc = FMBS_BM::MSG_SKILL[@skill.id]
                @proc2 = FMBS_BM::MSG_SKILL2[@skill.id]
                @proc3 = FMBS_BM::MSG_SKILL3[@skill.id]
                @swt = rand(@proc.size)
                @temps = @proc[@swt]
                @temps2 = @proc2[@swt]
                @temps3 = @proc3[@swt]
                $bat = 0
                @windows.visible = true
                $text_message = @temps.clone
                $text_message2 = @temps2.clone
                $text_message3 = @temps3.clone
                @duration = 20
                @windows.refresh
              end
            elsif $btalk == true
                if @active_battler == $game_party.actors[1]
                  $bat = 1
                elsif @active_battler == $game_party.actors[2]
                  $bat = 2
                elsif @active_battler == $game_party.actors[3]
                  $bat = 3
                else
                  $bat = 4
                  $cute_cat = @active_battler.name
                end
                
              if FMBS_BM::MSG_SKILL[@skill.id] == nil
                @proc = FMBS_BM::MSG_SKILL[0]
                @proc2 = FMBS_BM::MSG_SKILL2[0]
                @proc3 = FMBS_BM::MSG_SKILL3[0]
                @swt = rand(@proc.size)
                @temps = @proc[@swt]
                @temps2 = @proc2[@swt]
                @temps3 = @proc3[@swt]
              else
                @proc = FMBS_BM::MSG_SKILL[@skill.id]
                @proc2 = FMBS_BM::MSG_SKILL2[@skill.id]
                @proc3 = FMBS_BM::MSG_SKILL3[@skill.id]
                @swt = rand(@proc.size)
                @temps = @proc[@swt]
                @temps2 = @proc2[@swt]
                @temps3 = @proc3[@swt]
              end
              
                if @temps == ""
                  @windows.visible = true
                  $text_message = @temps.clone + @skill.name.clone
                  $text_message2 = nil
                  $text_message3 = nil
                  @duration = 20
                  @windows.refresh
                else
                  @windows.visible = true
                  $text_message = @temps.clone
                  $text_message2 = @temps2.clone
                  $text_message3 = @temps3.clone
                  @duration = 20
                  @windows.refresh
                end
                
             else
                @windows.visible = false
                @windows.refresh if @windows.visible == true
             end
            end
    
    xrxs_bs1_make_skill_action_result
    # make help window not visible
    @help_window.visible = false
  end
end

please move this thread to line 2 for reserved add ons
 

revee

Member

Iqbal, do you know tales of faith?
can you make the victory scenes become like one?
and how to make different voices when used different skill?
(show it)
and the picture<<< i made it for FMBS... what do you think?
and help would be appriciated
 
No i havent playing that game, if you post some screen or a video i might work on it.
to make different voices you'll need to make a animation from rmxp database just blank animation with some se/me on it then go to FMBS part skill below configuration on my demo. i commented some comment how to hit an animation
 
Bumped Another update for Item FIX
Code:
This one fixed
     - SCOPE for all enemies, all actor, all actor hp 0 bugs
     - Help window still showing after using an item
this is the script
Code:
=begin
FMBS ITEM FIX ver 1.0
BY iqbal_0k A.K.A B@!LWORLD

Credit & Thanks 
        - XRXS for this great battle system
        - Verdeni in RMXP.ORG that find revival item bugs (thanks man)

FEATURE 1.0 (JUNE 9 2008) NEW
  - FIX ALL SCOPE for item (ALL ALLIES, ALL ALLIES HP 0, ALL ENEMIES)
    this will immediately make effect for all scope item
  - FIX REVIVAL ITEM bugs
  - FIX HELP WINDOW ITEM BUG after the actor/enemy selection (Help window still shown after using an item)
    
  HOW to use this script
  
  - Put This script above main and under all default FMBS script
=end

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Frame Update (actor command phase : item selection)
  #--------------------------------------------------------------------------
  def update_phase3_item_select
    # Make item window visible
    @item_window.visible = true
    # Update item window
    @item_window.update
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # End item selection
      end_item_select
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Get currently selected data on the item window
      @item = @item_window.item
      # If it can't be used
      unless $game_party.item_can_use?(@item.id)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Play decision SE
      $game_system.se_play($data_system.decision_se)
      # Set action
      @active_battler.current_action.item_id = @item.id
      # Make item window invisible
      @item_window.visible = false
      # If effect scope is single enemy
      if @item.scope == 1
        # Start enemy selection
        start_enemy_select
        # if effect scope is for all enemies
      elsif @item.scope == 2
        @target_battlers = $game_troop.enemies
        # End item selection
        end_item_select
        #run item effect
        make_item_action_result
        @status_window_needed_to_refresh = true
      # If effect scope is single ally
      elsif @item.scope == 3 or @item.scope == 5
        # Start actor selection
        start_actor_select
      # If effect scope is for all ally's
      elsif @item.scope == 4
        @target_battlers = $game_party.actors
        # End item selection
        end_item_select
        #run item effect
        make_item_action_result
        @status_window_needed_to_refresh = true
      # If effect scope is for all ally's HP 0
      elsif @item.scope == 6 
        #cycling all actor to find the dead
        for @battler in $game_party.actors
          if @battler != nil and @battler.hp0?
            @target_battlers.push(@battler)
          end
        end
        # End item selection
        end_item_select
        #run item effect
        make_item_action_result
        @status_window_needed_to_refresh = true
      # is for self
      else
        # End item selection
        end_item_select
        #run item effect
        make_item_action_result
        #next Phase
        @phase = 4
        @phase4_step = 4
        update_phase4_step6
        # go back to menu      
        @phase = 1
        @status_window_needed_to_refresh = true
        @xcam_z_destination = 185
      end
      return
    end
  end
  
  alias bail_item_handling update_handling
  def update_handling
    bail_item_handling
    @help_window.visible = false if @help_window.visible == true
  end
  
  def Bailworld(scope)
    # Clear Target
    @target_battlers = []
    # If battler performing action is actor
    if @active_battler.is_a?(Game_Actor)
      # Branch by effect scope
      case scope
      
      when 1  # single enemy
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_troop.smooth_target_enemy(index))
        
      when 2  # all enemies
        for enemy in $game_troop.enemies
          if enemy.exist?
            @target_battlers.push(enemy)
          end
        end
        
      when 3  # single ally
        index = @active_battler.current_action.target_index
        @target_battlers.push($game_party.smooth_target_actor(index))
        
      when 4  # all allies
        for actor in $game_party.actors
          if actor.exist?
            @target_battlers.push(actor)
          end
        end
        
      when 5  # single ally (HP 0) 
        index = @active_battler.current_action.target_index
        actor = $game_party.actors[index]
        if actor != nil and actor.hp0?
          @target_battlers.push(actor)
        end
        
      when 6  # all allies (HP 0)
        for actor in $game_party.actors
          if actor != nil and actor.hp0?
            @target_battlers.push(actor)
          end
        end
        
      when 7  # user
        @target_battlers.push(@active_battler)
      end
    end
  end  
  
  def make_item_action_result
    
    #Clear Help Window
    @help_window.visible = false
    
    #Get item
    @item = $data_items[@active_battler.current_action.item_id]
    # If unable to use due to items running out
    unless $game_party.item_can_use?(@item.id)
      # Shift to step 1
      @phase4_step = 1
      return
    end
    # If consumable
    if @item.consumable
      # Decrease used item by 1
      $game_party.lose_item(@item.id, 1)
    end
    # Display item name on help window
    # @help_window.set_text(@item.name, 1)
    
    # Set animation ID
    @animation1_id = @item.animation1_id
    @animation2_id = @item.animation2_id
    
    # Set common event ID
    @common_event_id = @item.common_event_id
    
    # Decide on target
    index = @active_battler.current_action.target_index
    target = $game_party.smooth_target_actor(index)
    
    # Set targeted battlers
    Bailworld(@item.scope)
    
    #Make Animation
    target.animation_id = @animation2_id  
    target.animation_hit = true
    
       for target in @target_battlers         
         # Apply item effect
         target.item_effect(@item)
       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