Gradient Text and Color Pairs (RGSS)

Fri, 28 Dec 2007 18:16:59 -0500 - Author:

Here's a function I wrote a few days ago. It draws gradient text on a bitmap on RGSS. It works rather well.

def drawGradientText(bitmap,color1,color2,x,y,width,height,text,align=0,shadow=nil)
  return if width<=0 || height<=0
  tmp=Bitmap.new(width,height)
  tmp2=Bitmap.new(width,height)
  tmp.font.size=bitmap.font.size
  tmp.font.name=bitmap.font.name
  tmp.font.color=color2
  textsize=tmp.text_size(text)
  textheight=[textsize.height,1].max
  tmp.draw_text(0,0,width,height,text,align)
  textpos=(height/2)-(textheight/2)
  for i in 0...height
    if i<textpos
      opacity=0
    elsif i>=textpos+textheight
      opacity=255
    else
      ratio=((i-textpos)*1.0/textheight)
      ratio-=(0.5-ratio)*0.5
      opacity=ratio*255
      opacity=255 if opacity>255.0
      opacity=0 if opacity<0.0
    end
    tmp2.blt(0,i,tmp,Rect.new(0,i,width,1),opacity)
  end
  oldcolor=bitmap.font.color
  if shadow
   bitmap.font.color=shadow
   bitmap.draw_text(x+1,y+1,width,height,text,align)
  end
  bitmap.font.color=color1
  bitmap.draw_text(x,y,width,height,text,align)
  bitmap.font.color=oldcolor
  bitmap.blt(x,y,tmp2,Rect.new(0,0,width,height))
  tmp.dispose
  tmp2.dispose
end

The next function retrieves a pair of colors from a Window_Base, similar to Window_Base#text_color, for use in drawGradientText above.

def getColorPair(window,pairnum)
  pairnum=0 if pairnum<0 || pairnum>=8
  if window.windowskin && !window.windowskin.disposed? &&
     window.windowskin.width==128
   # RPG Maker VX Windowskin
   x=64+pairnum*8
   color1=window.windowskin.get_pixel(x,96)
   color2=window.windowskin.get_pixel(x,104)
   return [color1,color2]
  else
   color=window.text_color(pairnum)
   return [color,color]
  end
end