The RPG Maker Resource Kit

RMRK RPG Maker Creation => RPG Maker General => General Scripting => Topic started by: Rune on April 25, 2007, 04:35:47 PM

Title: [RESOLVED] Enemy HP bars
Post by: Rune on April 25, 2007, 04:35:47 PM
Hi... I was wondering if you get enemy HP bars to appear near the bottom of the enemy itself...
Is this possible?

Thanks in advance ;)
Title: Re: Enemy HP bars
Post by: dollmage on May 04, 2007, 05:03:40 PM
use this script
[spoiler]class Window_Base < Window 
  #--------------------------------------------------------------------------
  # * Draw Slant Bar(by SephirothSpawn)
  #--------------------------------------------------------------------------
  def draw_slant_bar(x, y, min, max, width = 152, height = 6,
      bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
    # Draw Border
    for i in 0..height
      self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
    end
    # Draw Background
    for i in 1..(height - 1)
      r = 100 * (height - i) / height + 0 * i / height
      g = 100 * (height - i) / height + 0 * i / height
      b = 100 * (height - i) / height + 0 * i / height
      a = 255 * (height - i) / height + 255 * i / height
      self.contents.fill_rect(x + i, y + height - i, width, 1, Color.new(r, b, g, a))
    end
    # Draws Bar
    for i in 1..( (min / max.to_f) * width - 1)
      for j in 1..(height - 1)
        r = bar_color.red * (width - i) / width + end_color.red * i / width
        g = bar_color.green * (width - i) / width + end_color.green * i / width
        b = bar_color.blue * (width - i) / width + end_color.blue * i / width
        a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
        self.contents.fill_rect(x + i + j, y + height - j, 1, 1, Color.new(r, g, b, a))
      end
    end
  end
end


class Window_EnemyHP < Window_Base
 
  def initialize
    super(0, 0, 640, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.opacity = 0
    refresh
  end
 
  def refresh
    self.contents.clear
    for i in 0...$game_troop.enemies.size
      @enemy = $game_troop.enemies[i]
      @percent = (@enemy.hp * 100) / @enemy.maxhp
      unless @enemy.hp == 0
      draw_slant_bar(@enemy.screen_x - 55, @enemy.screen_y - 10, @enemy.hp, @enemy.maxhp, width = 75, height = 6, bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
      self.contents.draw_text(@enemy.screen_x - 39, @enemy.screen_y - 22, 100, 32, "#{@percent}" + "%")
    end
  end
end
end

class Scene_Battle
 
  alias raz_update update
  alias raz_update_phase5 update_phase5
  alias raz_update_phase4_step1 update_phase4_step1
  alias raz_update_phase4_step5 update_phase4_step5
  alias raz_enemy_hp_main main
 
   def main
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    @enemy_window = Window_EnemyHP.new
    @enemy_window.z = 95
    raz_enemy_hp_main
    @enemy_window.dispose
  end
 
  def update
    @enemy_window.update
    raz_update
  end

  def update_phase5
    # If wait count is larger than 0
    if @phase5_wait_count > 0
      # Decrease wait count
      @phase5_wait_count -= 1
      # If wait count reaches 0
      if @phase5_wait_count == 0
        @enemy_window.visible = false
        # Show result window
        @result_window.visible = true
        # Clear main phase flag
        $game_temp.battle_main_phase = false
        # Refresh status window
        @status_window.refresh
        @enemy_window.refresh
      end
      return
    end
   raz_update_phase5
end

def update_phase4_step1
  raz_update_phase4_step1
  @enemy_window.refresh
end

  def update_phase4_step5
    # Hide help window
    @help_window.visible = false
    # Refresh status window
    @status_window.refresh
    @enemy_window.refresh
    raz_update_phase4_step5
  end
end
[/spoiler]

(press f11 then above main the right click then insert then type on the small bar enemy hp bars)

dont forget to give "|SephirothSpawn|" cred's
Title: Re: Enemy HP bars
Post by: Rune on May 04, 2007, 05:29:35 PM
Ahh... good old Seph :D
Thanks a lot :D

[EDIT]
Is there a way to make the bar appear at the top of the enemy? It's just... you can't see the bar below some of my enemies... they're blocked out by the characters
Title: Re: Enemy HP bars
Post by: Irock on May 04, 2007, 08:38:19 PM
You would have to edit the script. It doesn't seem like it would be hard.
Title: Re: Enemy HP bars
Post by: Rune on May 04, 2007, 08:44:44 PM
I've already had a look at the script and using my basic scripting knowledge... can't find where the command is that positions the bar... (Damn me and my thickness)
Title: Re: Enemy HP bars
Post by: Falcon on May 04, 2007, 09:03:43 PM
Stop saying you have basic scripting knowledge, if you can't change a variable, you have no scripting knowledge.

You see this?
      draw_slant_bar(@enemy.screen_x - 55, @enemy.screen_y - 10, @enemy.hp, @enemy.maxhp, width = 75, height = 6, bar_color = Color.new(150, 0, 0, 255), end_color = Color.new(255, 255, 60, 255))
      self.contents.draw_text(@enemy.screen_x - 39, @enemy.screen_y - 22, 100, 32, "#{@percent}" + "%")


@enemy.screen_y - 10 and  -22 are the variables you probably want to change.
Title: Re: Enemy HP bars
Post by: Rune on May 04, 2007, 09:09:28 PM
O_o I must have missed that... thanks :D
Title: Re: Enemy HP bars [RESOLVED]
Post by: Falcon on May 04, 2007, 09:13:17 PM
If you do want to learn real scripting, and you get the basic concept of methods and whatnot, try to catch me on MSN sometime, (darklord360@gmail.com)
Title: Re: Enemy HP bars [RESOLVED]
Post by: Rune on May 04, 2007, 09:26:11 PM
Will do ;)