메뉴

CogWheel Plug'n'Play Menu Bar by DerVVulfman@rmxp.org

by 백호 posted Feb 22, 2009
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
유명한 톱니바퀴성의 게이지 스크립트를 개량한 것입니다. (톱니바퀴성 게이지 스크립트가 게이지 하나당 100줄 가까이 먹으니......)  기존 게이지 스크립트 대신 사용하면 됩니다.


#==============================================================================
# ** COGWHEEL Plug 'n' Play Menu Bars (based on Syvkal's revisions)
#-------------------------------------------------------------------------------
# by DerVVulfman
# Version 1.1
# 06-28-06
#------------------------------------------------------------------------------
# This is a revision of Cogwheel's famous bargraph system, now set as an inser-
# table script to display bargraphs behind values in the menus.
#
# To prevent conflict with Cogwheel's RTAB system, two key definitions have been
# renamed: "gauge_rect" to "cw_gauge" & "gradation_rect" to "cw_grad_rect."
#
#
# Affected Systems:  Main Menu
#                    Skill Menu
#                    Status Menu
#                    Hero Select Menu (for Items & Skills)
#                    Equipment Menu
#                    BattleStatus Menu
#                   
# The system uses a series of CONSTANTS that can be edited here.  They control
# the basic gauge colors and the manner the gauge is filled:

  # Gauge Border Colors
    COG_COLOR1 = Color.new(0, 0, 0, 192)        # Outer Border
    COG_COLOR2 = Color.new(255, 255, 192, 192)  # Inner Border
  # Gauge Empty filler
    COG_COLOR3 = Color.new(0, 0, 0, 192)        # Half of Inner Shading
    COG_COLOR4 = Color.new(64, 0, 0, 192)        # Half of Inner Shading
  # Alignment
    COG_ALIGN1 = 1    # Type 1: (0: Left / 1: Center / 2: Right Justify)
    COG_ALIGN2 = 2    # Type 2: (0: Upper / 1: Central / 2: Lower)
    COG_ALIGN3 = 0    # FILL ALIGNMENT (0: Left Justify / 1: Right Justify)
  # Gauge Settings
    COG_GRADE1 = 1    # EMPTY  gauge (0: Side / 1: Vertical / 2: Slanted)
    COG_GRADE2 = 0    # FILLER gauge (0: Side / 1: Vertical / 2: Slanted)


#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Get EXP - numeric for calculations
  #-------------------------------------------------------------------------- 
  def now_exp
  return @exp - @exp_list[@level]
  end
  #--------------------------------------------------------------------------
  # * Get Next Level EXP - numeric for calculations
  #--------------------------------------------------------------------------
  def next_exp
  return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
  end
  #--------------------------------------------------------------------------
  # * End of Class
  #--------------------------------------------------------------------------
end


#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
 
 
  #--------------------------------------------------------------------------
  # * Draw EXP w/ Bars
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #--------------------------------------------------------------------------
  alias draw_actor_exp_original draw_actor_exp
  def draw_actor_exp(actor, x, y, width = 204)
    if actor.next_exp != 0
      rate = actor.now_exp.to_f / actor.next_exp
    else
      rate = 1
    end
    # Calculate Bar Gradiation
    if actor.next_exp != 0
      rate = actor.now_exp.to_f / actor.next_exp
    else
      rate = 1
    end
    # Adjust Bar Color based on Gradiation
    color1 = Color.new(80 * rate, 80 - 80 * rate ** 2, 80 - 80 * rate, 192)
    color2 = Color.new(240 * rate, 240 - 240 * rate ** 2, 240 - 240 * rate, 192)
    # Calculate Bar Width
    if actor.next_exp != 0
      exp = width * actor.now_exp / actor.next_exp
    else
      exp = width
    end
    # Draw Bar Graph
    cw_gauge(x, y + 25, width, 10, exp, color1, color2)
    # Call original EXP               
    draw_actor_exp_original(actor, x, y)
  end 
 
  #--------------------------------------------------------------------------
  # * Draw HP w/ Bars
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #--------------------------------------------------------------------------
  alias draw_actor_hp_original draw_actor_hp
  def draw_actor_hp(actor, x, y, width = 144)
    # Calculate Bar Gradiation
    if actor.maxhp != 0
      rate = actor.hp.to_f / actor.maxhp
    else
      rate = 0
    end
    # Adjust Bar Color based on Gradiation
    color1 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
    color2 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
    # Calculate Bar Width
    if actor.maxhp != 0
      hp = width * actor.hp / actor.maxhp
    else
      hp = 0
    end
    # Draw Bar Graph
    cw_gauge(x, y + 25, width, 10, hp, color1, color2)
    # Call original HP
    draw_actor_hp_original(actor, x, y, width)
  end

  #--------------------------------------------------------------------------
  # * Draw SP w/ Bars
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    width : draw spot width
  #--------------------------------------------------------------------------
  alias draw_actor_sp_original draw_actor_sp
  def draw_actor_sp(actor, x, y, width = 144)
    # Calculate Bar Gradiation
    if actor.maxsp != 0
      rate = actor.sp.to_f / actor.maxsp
    else
      rate = 1
    end 
    # Adjust Bar Color based on Gradiation
    color1 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
    color2 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
    # Calculate Bar Width
    if actor.maxsp != 0
      sp = width * actor.sp / actor.maxsp
    else
      sp = width 
    end
    # Draw Bar Graph
    cw_gauge(x + width * 0 / 100, y + 25, width, 10, sp, color1, color2)
    # Call original SP               
    draw_actor_sp_original(actor, x, y, width)
  end

  #--------------------------------------------------------------------------
  # * Draw Parameter w/ Bars
  #    actor : actor
  #    x    : draw spot x-coordinate
  #    y    : draw spot y-coordinate
  #    type  : parameter type (0-6)
  #--------------------------------------------------------------------------
  alias draw_actor_parameter_original draw_actor_parameter
  def draw_actor_parameter(actor, x, y, type)
    # Choose Color & Parameter Type
    case type
    when 0
      e1 = actor.atk
      c6 = Color.new(253, 53, 56, 192)
      c5 = Color.new(242, 2, 6, 192)
    when 1
      e1 = actor.pdef
      c6 = Color.new(238, 254, 124, 192)
      c5 = Color.new(228, 253, 48, 192)
    when 2
      e1 = actor.mdef
      c6 = Color.new(150, 37, 184, 192)
      c5 = Color.new(170, 57, 204, 192)
    when 3
      e1 = actor.str
      c6 = Color.new(253, 163, 33, 192)
      c5 = Color.new(254, 209, 154, 192)
    when 4
      e1 = actor.dex
      c6 = Color.new(255, 255, 255, 192)
      c5 = Color.new(222, 222, 222, 192)
    when 5
      e1 = actor.agi
      c6 = Color.new(124, 254, 155, 192)
      c5 = Color.new(33, 253, 86, 192)
    when 6
      e1 = actor.int
      c6 = Color.new(119, 203, 254, 192)
      c5 = Color.new(8, 160, 253, 192)
    end
    # Calculate Bar Gradiation
    e2 = 999
    if e1.to_f != 0
      rate = e1.to_f / e2.to_f
    else
      rate = 1
    end
    # Adjust Bar Color based on Gradiation & Parameter Type
    for i in 0..7
      r = c6.red * rate
      g = (c6.green - 10) * rate
      b = c6.blue  * rate
      a = c6.alpha
    end
    # Calculate Bar Width
    width = 168
    if e1.to_f != 0
      par = width * e1.to_f / e2.to_f
    else
      par = width
    end
    # Equipment Calc Fix   
    case type
    when 0
      if e1 == 0
        par = 0
      end
    when 1
      if e1 == 0
        par = 0
      end
    when 2
      if e1 == 0
        par = 0
      end
    end
    # Draw Bar Graph
    cw_gauge(x , y + 25, width, 7, par, c5, Color.new(r, g, b, a))
    # Call Original Parameter           
    draw_actor_parameter_original(actor, x, y, type)
  end

  #--------------------------------------------------------------------------
  # * Gauge Rectangle (New to Class)
  #--------------------------------------------------------------------------
  def cw_gauge(x, y, width, height, gauge, color1, color2)

    # Use Cogwheel PRESETS
    color3 = COG_COLOR1
    color4 = COG_COLOR2
    color5 = COG_COLOR3
    color6 = COG_COLOR4
    align1 = COG_ALIGN1
    align2 = COG_ALIGN2
    align3 = COG_ALIGN3
    grade1 = COG_GRADE1
    grade2 = COG_GRADE2
   
    # Create Rectangle Width based on gauge max.
    rect_width = width
   
    case align1
    when 1
      x += (rect_width - width) / 2
    when 2
      x += rect_width - width
    end
    case align2
    when 1
      y -= height / 2
    when 2
      y -= height
    end
    self.contents.fill_rect(x, y, width, height, color3)
    self.contents.fill_rect(x + 1, y + 1, width - 2, height - 2, color4)
    if align3 == 0
      if grade1 == 2
        grade1 = 3
      end
      if grade2 == 2
        grade2 = 3
      end
    end
    if (align3 == 1 and grade1 == 0) or grade1 > 0
      color = color5
      color5 = color6
      color6 = color
    end
    if (align3 == 1 and grade2 == 0) or grade2 > 0
      color = color1
      color1 = color2
      color2 = color
    end
    self.contents.cw_grad_rect(x + 2, y + 2, width - 4, height - 4, color5, color6, grade1)
    if align3 == 1
      x += width - gauge
    end
    self.contents.cw_grad_rect(x + 2, y + 2, gauge - 4, height - 4, color1, color2, grade2)
  end
 
  #--------------------------------------------------------------------------
  # * End of Class
  #--------------------------------------------------------------------------
end


#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap

  #--------------------------------------------------------------------------
  # * Gradation Rectangle
  #--------------------------------------------------------------------------
  def cw_grad_rect(x, y, width, height, color3, color4, align = 0)
  if align == 0
    for i in x...x + width
      red  = color3.red + (color4.red - color3.red) * (i - x) / (width - 1)
      green = color3.green +
              (color4.green - color3.green) * (i - x) / (width - 1)
      blue  = color3.blue +
              (color4.blue - color3.blue) * (i - x) / (width - 1)
      alpha = color3.alpha +
              (color4.alpha - color3.alpha) * (i - x) / (width - 1)
      color = Color.new(red, green, blue, alpha)
      fill_rect(i, y, 1, height, color)
    end
  elsif align == 1
    for i in y...y + height
      red  = color3.red +
              (color4.red - color3.red) * (i - y) / (height - 1)
      green = color3.green +
              (color4.green - color3.green) * (i - y) / (height - 1)
      blue  = color3.blue +
              (color4.blue - color3.blue) * (i - y) / (height - 1)
      alpha = color3.alpha +
              (color4.alpha - color3.alpha) * (i - y) / (height - 1)
      color = Color.new(red, green, blue, alpha)
      fill_rect(x, i, width, 1, color)
    end
  elsif align == 2
    for i in x...x + width
      for j in y...y + height
        red  = color3.red + (color4.red - color3.red) *
                ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        green = color3.green + (color4.green - color3.green) *
                ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        blue  = color3.blue + (color4.blue - color3.blue) *
                ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        alpha = color3.alpha + (color4.alpha - color3.alpha) *
                ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        color = Color.new(red, green, blue, alpha)
        set_pixel(i, j, color)
      end
    end
  elsif align == 3
    for i in x...x + width
      for j in y...y + height
        red  = color3.red + (color4.red - color3.red) *
              ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        green = color3.green + (color4.green - color3.green) *
              ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        blue  = color3.blue + (color4.blue - color3.blue) *
              ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        alpha = color3.alpha + (color4.alpha - color3.alpha) *
              ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
        color = Color.new(red, green, blue, alpha)
        set_pixel(i, j, color)
      end
    end
  end
 end
 
  #--------------------------------------------------------------------------
  # * End of Class
  #--------------------------------------------------------------------------
end