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.

GTBS v1.5.1.4 - A FFT Styled Battle System (5/19/2010)

Is there a way to take away the control of a hero from the player?

I'm trying to create a Berserk skill, that makes a unit stronger, but you can't control it...
 
I found a tuorial in the internent on how to set it up, so i got it working now, but yeah, your system looks cool. im learning how to display words and variables now so, i'll keep working on my system. But have you any idea how i can make it when a character attacks, and there is a critical hit, it will shake the screen and display  a Critical hit image (if i make it)

And also, is there a way to where i can increase the time that the screen displayes the battle start image, and the congradulations ant the end of the battle?
 
Mind posting the tutorial you found? Looks like we are all taking inspiration from FFT heh. Right now I'm working on adding other patterns for spells when targeting.
 
Here is a tutorial on how to set up a iso map, it takes a second, but you should get it

http://64.233.179.104/translate_c?hl=en&sl=fr&u=http://rpgcreative.forumpro.fr/scripts-pour-map-f60/gerer-de-la-3d-isometrique-t664.htm&prev=/search%3Fq%3DScript%2B2D_ISO%26hl%3Den%26rlz%3D1T4ADBF_enUS267US268

Started making iso maps:
http://img440.imageshack.us/img440/8407 ... guild2.png[/img]

Im also making iso sprites: (Here are edited heads)

http://img141.imageshack.us/img141/2026 ... eadkz3.png[/img]

http://img247.imageshack.us/img247/7422/narutoso0.png[/img]

and also, Gubid, can you supply a demo for what you have so far for the class change system?
 
Gubid":1gnzse8f said:
I am also working on a class changing system, but mine is the whole FFT menu system and everything.  Here are some screenshots of what I have.
http://i218.photobucket.com/albums/cc200/GubiD/FFT_Menu_List.jpg[/img]http://i218.photobucket.com/albums/cc200/GubiD/Job_Scene.jpg[/img]http://i218.photobucket.com/albums/cc200/GubiD/FFTMenu3.jpg[/img]http://i218.photobucket.com/albums/cc200/GubiD/FFTMenu2.jpg[/img]http://i218.photobucket.com/albums/cc200/GubiD/FFTMenu1.jpg[/img]
As for how to setup an iso map, here is what I found works best, at least to find the corners and build in from there.
This will also help you in sizing your maps accordingly.
The width of the ISO map should be the width+height of the passability map
The height of the ISO map should be the width+height of the passability map /2

The x width of the map passability map will still be "width" in for all corners and "height"/2 down for the starting corners. 
Are you able to set certain limits to what classes that'll be available for each of your characters?

Like if I wanted one character to only to choose classes which required a bow as a weapon(archer, hunter, sniper etc.), while my typical axe wielding fighter could become a Fighter, Barbarian or a Gladiator for instance.
 
Celvin,
No the system is based on a "tree structure" like that of FFT.  Basically that one class can lead to another, based on that class level.

Digidog,
Not sure what to do with that sprite.  My template is far different than that for animated battlers.  Please use the template provided in the demo to help you create an animated battler, once created, I can create you a demo.  As for the Job system, its fully complete yet.  (There is no way to increase in level) I will provide it when it is available.
 
My Bad, I download the non-anmiated version of it, but i downloaded the Animated version of it. I see the load of work i got ahead of me. I am still trying to figure out how to edit the script to where i can make to where if there is a critical hit does a "Shake Screen effect" and ddisplays an image saying critical hit. Please help me with that.

I modified the script a bit to make it appear more like FFTA 2:

Window_Status
#----------------------------------------------------------------------------
  # Draws Status menu and Damage Preview
  #----------------------------------------------------------------------------
class Windows_Status_GTBS < Window_Base
  attr_accessor :attacker
  attr_accessor :skill
  def initialize(actor = nil)
    super(640, 370, 550, 480)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Status.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Status')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    self.contents = Bitmap.new(width-32, height-32)
    @attacker = nil
    @actor = nil
    @skill = nil
    @face = Sprite.new
    refresh
  end
 
  def act
    return @actor
  end
 
  def visible=(bool)
    if @face != nil
      @face.visible = bool
    end
    super
  end
 
 
  def refresh(actor = nil)
    @actor = actor
    unless actor == nil
      self.visible = true
      file = sprintf("Graphics/Pictures/Faces/%s.png", actor.name)
      if FileTest.exist?(file)
        @face.bitmap = RPG::Cache.picture(sprintf('/Faces/%s',actor.name))
        @face.x = 0 #-@face.bitmap.width-5
        @face.y = 350
        #self.y +#
        @face.z = 1000
        @face.opacity = GTBS::CONTROL_OPACITY + 30
     
      else
        @face.bitmap = RPG::Cache.picture('/Faces/Blank')
        @face.x = 640-@face.bitmap.width-5
        @face.y = self.y + 40
        @face.z = 1000
        @face.opacity = GTBS::CONTROL_OPACITY + 30
      end
      x = 0
      y = 0
     
      self.contents.clear
      self.contents.font.color = normal_color
      name = actor.name.to_s
      if name.include?("[1]")
        name = name.delete"[1]"
      end
      self.contents.draw_text(x,y,200,32,name)
      unless actor.dead?
        atb = actor.atb/10
        if atb > 100
          atb = 100
        end
        if $game_system.cust_battle != "TEAM"
          self.contents.draw_text(x,y+72,200,32,sprintf("AT        %d",atb))
        end
      end
      self.contents.draw_text(x+80,y,138,32,actor.class_name,2)
      draw_actor_hp(actor, x, y+24)
      draw_actor_sp(actor, x, y+48)
      draw_actor_graphic(actor, x-40, y)
      if @attacker != nil
        if GTBS::PREVIEW_DAMAGE
          dmg_preview(@type, @attacker, @skill)
        end
      end
    else
      self.visible = false
      if @face != nil
        @face.visible = false
      end
      @attacker = nil
      @type = 0
      @skill = nil
    end
  end
 
  def dmg_preview(type, attacker, skill = nil)
    unless @actor == nil
      @attacker = attacker
      @type = type
      @skill = skill
      case type
      when 1 #attack
        hit = get_attack_result(attacker)
      when 2 #skill
        hit = get_skill_result(skill, attacker)
      when 3 #item
        hit = get_item_result(skill)  #skill is actually the item!
      end 
      unless hit == nil
        self.contents.draw_text(0, 96, 100, 32, "Hit %: " + hit[0].to_s)
        self.contents.draw_text(0+70, 96, 100, 32, hit[1].to_s + "(+/- " + hit[2].to_s + ")", 2)
      end
    end
  end

  
  def move_to(position)
    if position == "right"
      self.x = 640-self.width
    elsif position == "left"
      self.x = 0
    end
  end
    def update(actor = nil)
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
    #if actor != nil
      refresh(actor)
    #end
  end
 

  def get_attack_result(attacker)
    hit_chance = 0
    hit_damage = 0
    atk = [attacker.atk - @actor.pdef / 2, 0].max
    @actor.damage = atk * (20 + attacker.str) / 20
    @actor.damage *= @actor.elements_correct(attacker.element_set)
    @actor.damage /= 100
    if @actor.damage > 0
      if @actor.guarding?
        @actor.damage /= 2
      end
    end
    eva = 8 * @actor.agi / attacker.dex + @actor.eva
    hit = @actor.damage < 0 ? 100 : attacker.hit - eva
    if @actor.from_back?(attacker)
      hit += 10
    elsif !@actor.from_front?(attacker) #from sides
      hit += 5
    end
    hit = hit > 100 ? 100 : hit
    hit_chance = @actor.cant_evade? ? 100 : hit
    hit_damage = -@actor.damage
    amp = [@actor.damage.abs * 15 / 100, 1].max
    @actor.damage = nil
    return [hit_chance, hit_damage, amp]
  end
 
  def get_skill_result(skill, user)
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    if ((skill.scope == 3 or skill.scope == 4) and @actor.hp == 0) or
       ((skill.scope == 5 or skill.scope == 6) and @actor.hp >= 1)
      return [0,0]
    end
    power = skill.power + user.atk * skill.atk_f / 100
    if power > 0
      power -= @actor.pdef * skill.pdef_f / 200
      power -= @actor.mdef * skill.mdef_f / 200
      power = [power, 0].max
    end
    rate = 20
    rate += (user.str * skill.str_f / 100)
    rate += (user.dex * skill.dex_f / 100)
    rate += (user.agi * skill.agi_f / 100)
    rate += (user.int * skill.int_f / 100)
    @actor.damage = power * rate / 20
    @actor.damage *= @actor.elements_correct(skill.element_set)
    dmg = -@actor.damage /= 100
    eva = 8 * @actor.agi / user.dex + @actor.eva
    hit = @actor.damage < 0 ? 100 : hit - eva * skill.eva_f / 100
    hit = @actor.cant_evade? ? 100 : hit
    amp = [@actor.damage.abs * skill.variance / 100, 1].max
    @actor.damage = nil
    return [hit, dmg, amp]
  end
 
  def get_item_result(item)
    hit = item.hit
    if ((item.scope == 3 or item.scope == 4) and @actor.hp == 0) or
       ((item.scope == 5 or item.scope == 6) and @actor.hp >= 1)
      return [0,0]
    end
    recover_hp = @actor.maxhp * item.recover_hp_rate / 100 + item.recover_hp
    if recover_hp < 0
      recover_hp += @actor.pdef * item.pdef_f / 20
      recover_hp += @actor.mdef * item.mdef_f / 20
      recover_hp = [recover_hp, 0].min
    end
    recover_hp *= @actor.elements_correct(item.element_set)
    recover_hp /= 100
    dmg = recover_hp
    amp = 0
    return [hit, dmg, amp]
  end
end

Window_Battle
#-------------------------------------------------------------
#This displays the command window for character actions.
#-------------------------------------------------------------
class Commands_All < Window_Selectable
  def initialize
    super(520, 200, 120, 220)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/Commands_All.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('Commands_All')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
   

     
      end
   
    self.contents = Bitmap.new(width-32, height-32)
    @item_max = 6
    @column_max = 1
    self.index = -1
    @actor_display = Window_Actor_Display.new(height)
    refresh
  end
 
  def refresh(actor = nil)
    self.index = 0
    @actor = actor
    item = []
    @commands = []
    if @actor == nil
      return
    else
     
      @index = 0
      self.contents.dispose
      if GTBS::HIDE_INACTIVE
        @commands.push("Move") if !actor.moved?
        if !actor.perfaction?
          @commands.push("Attack")
          @commands.push(get_class(actor.class_id))
          @commands.push("Item")
        end
        @commands.push("Wait")
        @commands.push("Status")
      else
        s1 = "Move"
        s2 = "Attack"
        s3 = get_class(actor.class_id)
        s4 = "Item"
        s5 = "Wait"
        s6 = "Status"
        @commands = [s1, s2, s3, s4, s5, s6]
      end
      h = @commands.size * 32 + 32
      self.height = h
      self.contents = Bitmap.new(width - 32, height - 32)
      for i in 0...@commands.size
        command = @commands
        #item.push(command.size)
        draw_item(i, normal_color)
      end
      @item_max = @commands.size
      if !GTBS::HIDE_INACTIVE
        disable_item(0) if actor.moved?  ##disables move function is already moved
        if actor.perfaction?
          disable_item(1) ##attack
          disable_item(2) ##class skill
          disable_item(3) ##item
        end
      end
     
      @actor_display.refresh(actor)
    end
  end
 
  def data(i=-1)
    return "" if self.index == -1
    return @commands
  end
 
  def dispose
    if @actor_display
      @actor_display.dispose
    end
    if @back
      @back.bitmap = nil
      @back = nil
    end
    super
  end
 
  def visible=(bool)
    if @actor_display != nil
      @actor_display.visible = bool
      @actor_display.update
    end
    super(bool)
  end
 
  def help_window=(window)
    @help_window = window
    update_help
  end
 
  def update_help
    text = ""
    unless @actor == nil
      case self.data(@index)
      when "Move"
        text = 'Move to an available location'
      when "Attack"
        text = 'Attack a reachable square'
      when get_class(@actor.class_id)
        text = 'Performs class ability'
      when "Item"
        text = 'Use an item'
      when "Wait"
        text = 'Wait this turn'
      when "Status"
        text = 'Get detailed status information'
      end
    end
   
    @help_window.set_text(text)
  end
 
  def update_cursor_rect
    self.cursor_rect.set(0, (self.index*32), 85, 32)
  end
end

  #----------------------------------------------------------------------------
  # TBS_Window Revive - Used to revive dead actors when removed from map.
  #----------------------------------------------------------------------------
class TBS_Window_Revive < Window_Selectable
  def initialize
    dead = $scene.dead_actors
    h = 32*dead.size + 32
   
    bmp = Bitmap.new(1,1)
    w = bmp.text_size("Revive Who?").width
    for act in dead
      wd = bmp.text_size(act.name).width
      if wd > w
        w = wd
      end
    end
    w += 32
    super(0,0,w,h)
    self.visible = false
    self.index = -1
    refresh
  end
 
  def refresh
    dead = $scene.dead_actors
    h = 32*dead.size + 64
    bmp = Bitmap.new(1,1)
    w = bmp.text_size("Revive Who?").width
    for act in dead
      wd = bmp.text_size(act.name).width
      if wd > w
        w = wd
      end
    end
    w += 32
    bmp.dispose
    self.width = w
    self.height = h
    if self.contents != nil
      self.contents.clear
    end
   
    self.contents = Bitmap.new(w-32, h-32)
    y = 0
    self.contents.font.color = system_color
    self.contents.draw_text(0,y,width,32,"Revive Who?", 0)
    y +=32
    self.contents.font.color = normal_color
    for act in dead
      self.contents.draw_text(0,y,width,32,act.name)
      y+=32
    end
    @item_max = dead.size
  end
 
  def update_cursor_rect
    self.cursor_rect.set(0, (self.index*32+32), width-32, 32)
  end
end
 
  #----------------------------------------------------------------------------
  # Draw Actor Name in the window (only used for actors)
  #----------------------------------------------------------------------------
class Window_Actor_Display < Window_Base
  def initialize(y)
    super(0,0,120,60)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/Actor_Display.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('Actor_Display')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    self.contents = Bitmap.new(width - 32, height - 32)
    self.visible = false
   
  end
 
  def refresh(actor)
    self.contents.clear
    draw_actor_name(actor,0,0)
  end
 
  alias actor_display_update update
  def update
    actor_display_update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
  end
end

  #----------------------------------------------------------------------------
  # Draws Full Status Window
  #----------------------------------------------------------------------------
class Window_Full_Status < Window_Selectable
  def initialize
    super(0, 0, 640, 480)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Full_Status.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Full_Status')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = nil
    @pattern = 0
    @show_wait = 24
    refresh
  end
 
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(actor = nil)
    @actor = actor
    unless @actor == nil
      @pattern = @actor.pattern
      self.contents.clear
      draw_actor_graphic(@actor, 40, 112)
      draw_actor_name(@actor, 4, 0)
      draw_actor_class(@actor, 4 + 144, 0)
      draw_actor_level(@actor, 96, 32)
      draw_actor_state(@actor, 96, 64)
      draw_actor_hp(@actor, 96, 112, 172)
      draw_actor_sp(@actor, 96, 144, 172)
      draw_actor_parameter(@actor, 96, 192, 0)
      draw_actor_parameter(@actor, 96, 224, 1)
      draw_actor_parameter(@actor, 96, 256, 2)
      draw_actor_parameter(@actor, 96, 304, 3)
      draw_actor_parameter(@actor, 96, 336, 4)
      draw_actor_parameter(@actor, 96, 368, 5)
      draw_actor_parameter(@actor, 96, 400, 6)
      self.contents.font.color = system_color
      self.contents.draw_text(320, 48, 80, 32, "EXP")
      self.contents.draw_text(320, 80, 80, 32, "NEXT")
      self.contents.font.color = normal_color
      self.contents.draw_text(320 + 80, 48, 84, 32, @actor.exp_s, 2)
      self.contents.draw_text(320 + 80, 80, 84, 32, @actor.next_rest_exp_s, 2)
      self.contents.font.color = system_color
      self.contents.draw_text(320, 160, 96, 32, "equipment")
      draw_item_name($data_weapons[@actor.weapon_id], 320 + 16, 208)
      draw_item_name($data_armors[@actor.armor1_id], 320 + 16, 256)
      draw_item_name($data_armors[@actor.armor2_id], 320 + 16, 304)
      draw_item_name($data_armors[@actor.armor3_id], 320 + 16, 352)
      draw_item_name($data_armors[@actor.armor4_id], 320 + 16, 400)
    end
    return
  end
  alias full_status_update update
  def update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
    unless @actor == nil
      refresh(@actor) if @pattern != @actor.pattern
    end
    full_status_update
  end
end

  #----------------------------------------------------------------------------
  # Create Confirm command window
  #----------------------------------------------------------------------------

class Command_Confirm < Window_Selectable
  attr_accessor   :commands
  def initialize(text = "")
     super(0, 0, 240, 80)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/Command_Confirm.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('Command_Confirm')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    self.contents = Bitmap.new(width-32, height-32)
    self.x = 320 - (width/2)
    self.y = 240 - (height/2)
    self.index = -1
    @commands = ["Yes","No"]
    @item_max = @commands.size
    @column_max = 2
    refresh(text)
  end
 
  def reset_commands
    @commands = ["Yes","No"]
  end
 
  def refresh(text)
    self.index = 0
    self.contents.clear
    self.contents.draw_text(-10,0,240,24,text,1)
    for i in 0...@commands.size
      self.contents.draw_text((70+(50*i))-10, 20, 50, 24, @commands,1)
    end
    self.visible = true
  end
 
  alias upd_cmd_confrm update
  def update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    upd_cmd_confrm
  end
 
  def update_cursor_rect
    self.cursor_rect.set((70+(50 *@index))-10, 22, 50, 23)
  end
end
  #----------------------------------------------------------------------------
  # Draw Item window and contents
  #----------------------------------------------------------------------------

class TBS_Item < Window_Selectable
  attr_reader     :data
 
  def initialize
    super(140, 64, 320, 256)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Item_Skill.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Item_Skill')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
   
    refresh
    self.index = 0
  end
 
  def item
    return @data[self.index]
  end

  def refresh
    self.index = 0
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    for i in 1...$data_items.size
      if $game_party.item_number(i) > 0
        @data.push($data_items)
      end
    end
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end

  def draw_item(index)
    item = @data[index]
    case item
    when RPG::Item
      number = $game_party.item_number(item.id)
    when RPG::Weapon
      number = $game_party.weapon_number(item.id)
    when RPG::Armor
      number = $game_party.armor_number(item.id)
    end
    if item.is_a?(RPG::Item) and
       $game_party.item_can_use?(item.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
    self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  end
 
  alias gtbs_item_update update
  def update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
    gtbs_item_update
  end
   
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
  end
end

  #----------------------------------------------------------------------------
  # Draw Skill Window and contents
  #----------------------------------------------------------------------------

class TBS_Skill < Window_Selectable
  attr_reader     :data                    # データ

  def initialize(actor = nil)
    super(200, 64, 320, 256)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Item_Skill.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Item_Skill')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    unless actor == nil
      @actor = actor
      refresh
      self.index = 0
    end
  end

  def skill
    if @data == nil
      return nil
    else
      return @data[self.index]
    end
  end

  def refresh(actor)
    self.index = 0
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @actor = actor
    @data = []
    for i in 0...@actor.skills.size
      skill = $data_skills[@actor.skills]
      if skill != nil
        @data.push(skill)
      end
    end

    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end

  def draw_item(index)
    skill = @data[index]
    if @actor.skill_can_use?(skill.id)
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(skill.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
    self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  end
 
  alias tbs_skill_update update
  def update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
    tbs_skill_update
  end
 
  def update_help
    @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  end
end


  #----------------------------------------------------------------------------
  # Displays the battle options available for the BS type (ATB or TEAM)
  #----------------------------------------------------------------------------
class Battle_Option < Window_Selectable
  def initialize
    h = 3
    h = 4 if $game_system.cust_battle == "TEAM"
    super(260, 190, 120, (h*24)+32)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Battle_Option.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Battle_Option')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    @column_max = 1
    refresh
  end
 
  alias tbs_option_update update
  def update
    @back.visible = self.visible
    @back.x = self.x
    @back.y = self.y
    @back.update
    tbs_option_update
  end
 
  def data
    return @options
  end

  def refresh
    if $game_system.cust_battle == "TEAM"
      @options = ["End Turn", "Config", "Conditions", "Cancel"]
    else
      @options = ["Config", "Conditions", "Cancel"]
    end
    if self.contents != nil
      self.contents.clear
      self.contents = nil
    end
    self.contents = Bitmap.new(width - 32, @options.size * 24)
    for i in 0...@options.size
      self.contents.draw_text(2,i*24,100,24,@options)
    end
    @item_max = @options.size
  end
 
  def update_cursor_rect
    self.cursor_rect.set(0, (self.index*24), width-32, 24)
  end
end

class Window_EXP_Earn < Window_Selectable
  def initialize(attacker = nil, level = {})
    @attacker = attacker
    @level = level
    h = level.keys.size * 32 + 64
    super(120, 60, 352, h)
    @back = Sprite.new
    self.opacity = GTBS::CONTROL_OPACITY
    if FileTest.exist?('Graphics/Pictures/TBS_Exp_Gain.png')
      self.opacity = 0
      @back.bitmap = RPG::Cache.picture('TBS_Exp_Gain')
      @back.visible = false
      @back.opacity = GTBS::CONTROL_OPACITY
    end
    self.contents = Bitmap.new(width - 32, height-32)
    refresh
  end
 
  def refresh
    unless @attacker = nil
      if self.contents != nil
        self.contents.clear
      end
      h = @level.keys.size * 32 + 32
      self.contents.draw_text(0, 0, 320, 24, "-LEVEL-", 1)
      y = 32
      if @level.keys.size > 0
        for actor in @level.keys
          self.draw_actor_name(actor, 4, y)
          self.contents.font.color = system_color
          self.contents.draw_text(168, y, 24, 32, "Lv")
          self.contents.draw_text(228, y, 24, 32, " -→>")
          self.contents.font.color = normal_color
          lv1 = @level[actor][0].to_s
          self.contents.draw_text(192, y, 32, 32, lv1, 2)
          lv2 = @level[actor][1].to_s
          self.contents.draw_text(254, y, 32, 32, lv2)
          y += 32
        end
      end
      #self.update
    end
  end
end


http://img528.imageshack.us/img528/9020 ... guill5.png[/img]
 
No problem. 

The shake screen thing.. this would probably work best.  However this will apply to anything that can inflict a "critical" hit, be it spell or other..

Code:
class RPG::Sprite
  alias crit_dmg_scrn_shake damage
  def damage(value, critical)
    if critical
      $game_screen.start_shake(100,50,10)  #power= < 10, speed= <10, duration = frames/2
    end
    crit_dmg_scrn_shake(value, critical)
  end
end
I like the window updates.  Perhaps we will have to get these in as a possible skin option for the next release.  PM me.
 
I have been trying and editing the script for the longest to get rid of the help bar, i might just disable the window skin in the begiinng of the battle and display a black transparent bar on the top to make it look cool.

Thanks for answering all my tidious requests.
 
GubiD, can you also implement multiple attacks? Like a 3-shot machine gun or cross cut that deals two low damages?
I tried using Guillaume777's Multi-Slot + 2-Hand and Multi-Attack script of his but his Multi-Attack feature didn't work in your TBS...
 
If you want to disable the help from showing, simply comment out the lines under def windows_data that say.. "@windows["help"]". 

dung, I am working on making it compatible
 
Dung Beetle":2bvle7uh said:
GubiD, can you also implement multiple attacks? Like a 3-shot machine gun or cross cut that deals two low damages?
I tried using Guillaume777's Multi-Slot + 2-Hand and Multi-Attack script of his but his Multi-Attack feature didn't work in your TBS...

So was about to ask the same thing

could you also add a auto battle feature

Cool idea, but it would take the fun out of it, but by the way it sounds , it would require alot of script editing/modifications
 
Actually the AI is already there, just need to add the "intercept" ability to retake control once given, but... I have no plans to do that.  I think it would completely remove the "Tactical" sense of the system and you might as well be using a side view or front battle system, but that is just my opinion.  Anyway, I started work on the Guillaeme script along time ago.  I havent decided how to resolve it yet..
 

mahiko

Member

This might be a noobish question but, has anyone made a complete RPG using this or another tactical battle system? id really like to see how it goes.
 
Not that I am aware of.  There are a couple demo's of games that were just getting started, but that is all I have seen.
 
mahiko":15h6dgk7 said:
This might be a noobish question but, has anyone made a complete RPG using this or another tactical battle system? id really like to see how it goes.

To be fair, there really aren't many complete RPG Maker games period. One of the first pieces of advice you'll receive when starting your first game is "Don't bother starting an RPG" because rarely does one person have the free time and dedication to see it thru all the way. There are plenty of demos, but few finished games.

Thats why you aim abit smaller, not quite so grand. I know the game I'm making will be short, about 6-10 hours of gameplay. I know it will take me 4-5 months to finish, but thats ok ^_-
 

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