Good/Evil actors with bar
#1
Good/Evil actors with bar
by Leon Westbrooke
Mar 21 2007

This is a locked, single-post thread from Creation Asylum. Archived here to prevent its loss.
No support is given. If you are the owner of the thread, please contact administration.


Basically, this script allows your character to be good or evil based upon their actions, which you can set. The instructions are included in the script below.

NOTE: The screenshots are of an older version. the location of the words 'Good' and 'Evil' have been moved to where they are supposed to be.

Screenshots:
[Image: Goodss.jpg]
[Image: Evilss.jpg]

Code:
#===================================
#  Leon's Good and Evil script
#----------------------------------------------------------------------
#  Features:
#    Gives an actor the "good", "Neutral" or "evil" alignment, based
#    upon their actions.
#
#  Instructions:
#    Place above main, and below other scripts.
#    Use:  draw_alignment_bar(actor, x, y) in a script to draw the alignment bar.
#             x and y being the position of the bar, and actor being the syntax for the actor's information.
#
#  To use:
#    To add or subtract from their alignment, use: $game_actors[actor_id].alignment += x
#    To see if the actor's alignment is good, evil or neutral, use:
#       * Conditional Branch, tab 4, Script.
#       * For good, use $game_actors[actor_id].alignment  > 0
#       * For evil, use $game_actors[actor_id].alignment  < 0
#       * For neutral, use $game_actors[actor_id].alignment  == 0
#
#  Extra Information:
#    This script edits the original Window_Status script to add the good/evil.
#===================================

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Game_Actor
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Game_Actor < Game_Battler
  
  attr_accessor :alignment
  attr_accessor :alignment_name
  
  alias leon_alignment_bars_ga_setup setup
  
  def setup(actor_id)
    @alignment = 0
    @alignment_name = "Neutral"
    leon_alignment_bars_ga_setup(actor_id)
  end
  
  def alignment
    if @alignment > 0
      if @alignment > 100
        @alignment = 100
      end
      @alignment_name = "Good"
      return @alignment
    end
    if @alignment < 0
      if @alignment < -100
        @alignment = -100
      end
      @alignment_name = "Evil"
      return @alignment
    end
    @alignment_name = "Neutral"
    return @alignment
  end
    

end

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Window_Base
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Window_Base
  def draw_bar(x, y, min, max, width = 152, height = 6,
      bar_color = Color.new(0, 75, 0, 255), end_color = Color.new(0, 255, 0, 255))
    for i in 0..height
      self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
    end
    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
    for i in 1..( (min.to_f / 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
  
  def draw_backward_bar(x, y, min, max, width = 152, height = 6,
      bar_color = Color.new(75, 0, 0, 255), end_color = Color.new(255, 0, 0, 255))
    for i in 0..height
      self.contents.fill_rect(x + i, y + height - i, width + 1, 1, Color.new(50, 50, 50, 255))
    end
    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
    for i in 1..( (min.to_f / 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
  
  def draw_alignment_bar(actor, x, y)
    #x = 320 y = 147
    draw_bar(x, y, 0, 200, 200, 6)
    if actor.alignment > 0
      draw_bar(x + 100, y, actor.alignment, 100, 100, 6)
      actor.alignment_name = "Good"
    elsif actor.alignment < 0
      draw_backward_bar(x + 100, y, -1 * actor.alignment, 100, 100, 6)
      actor.alignment_name = "Evil"
    elsif actor.alignment == 0
      draw_bar(x + 100, y, actor.alignment, 100, 100, 6)
      actor.alignment_name = "Neutral"
    end
    draw_bar(x + 97, y - 2, 2, 2, 2, 10, Color.new(255, 255, 255, 255), Color.new(255, 255, 255,255))
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 5, y - 13, 120, 32, "E")
    self.contents.draw_text(x + 190, y - 13, 120, 32, "G")
  end
  
end


#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Window_Status
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
class Window_Status < Window_Base
  
  alias leon_alignment_bars_ws_refresh refresh
  
  def refresh
    leon_alignment_bars_ws_refresh
    if @actor.alignment > 100
      @actor.alignment = 100
    elsif @actor.alignment < -100
      @actor.alignment = -100
    end
    self.contents.font.color = system_color
    self.contents.draw_text(320, 112, 120, 32, "Alignment")
    draw_alignment_bar(@actor, 320, 147)
    self.contents.font.color = normal_color
    self.contents.draw_text(420, 112, 120, 32, @actor.alignment_name)
  end
end
}




Users browsing this thread: 1 Guest(s)