Fórum iBlue
 SFont rmxp Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Fórum iBlue
 SFont rmxp Buddy_Group

Bem Vindos ao iBlue GAMES!

Registre-se para obter acesso especial em todo conteúdo presente no Fórum!
Tenha um bom uso do nosso fórum, e seja ativo!





Somos ÚNICOS, somos o SEU fórum


Você não está conectado. Conecte-se ou registre-se

Ver o tópico anterior Ver o tópico seguinte Ir para baixo  Mensagem [Página 1 de 1]

T-Lord

1 SFont rmxp Empty SFont rmxp Dom 13 Jan 2013 - 16:29

T-Lord
Administrador
SFont RMXP
Criador: Trickster
Introdução

Este script adiciona suporte SFont para RMXP.

Características

- Permite o uso de imagens que podem substituir as fonts.
- As imagens ficam no diretório Graphics/SFonts.
- Para quem está cansado de usar uma font com formato limitado pode personalizar a vontade pela imagem.


Screenshots

 SFont rmxp AssistClique para Expandir.
 SFont rmxp Imagem_zps84620932

Imagem de Font exemplo:

 SFont rmxp AssistClique para Expandir.
 SFont rmxp Arial_Red_zpse1cbd6df


Script
SFont RMXP
Código:
#=============================================================================
# * SFonts
#=============================================================================
# Trickster
# Version 1.0
# 12.19.07
#=============================================================================
# Introduction
#  - This script adds SFont support for rmxp. An sfont is a image file with
#    characters already drawn onto it. The top row of pixels in this image shows
#    where the characters are and where the breaks are.
# Setting up images
#  - The top left hand pixel (0, 0) is the skip color and tells if a column
#    of pixels is empty or contain data
#  - Images should be placed in Graphics/SFonts
#  - For more reference see the example image Arial_Red
# To Use
#  - You can use this script in one of two ways
#    - 1) Set <Bitmap>.sfont to an SFont object then call <Bitmap>.draw_text
#    - 2) Call <SFont>.render(<String>) and then blt it to a Bitmap object
# Documentation
#  - SFont.new(<String/Bitmap>, <Array>, <Integer/String>)
#  - Where the first parameter is a filename (in Graphics/SFonts) or a Bitmap
#    object containing the Font data
#  - the second parameter is an Array of all of the characters in order in the
#    file the default is specified in @@glyphs below you
#  - the last parameter is either the width that should be used for the space
#    character or the character whose width you want to use for the space
#    character the default is " which is the width of the " character if "
#    character is not in the glyph then the height of the bitmap will be used
# Credits
#  - John Croisant for the original code for Rubygame which I used as a base for
#    this script
#  - Adam Bedore for the example sfont image more of his sfont work is given
#    here - http://www.zlurp.com/irq/download.html
# Websites
#  - Official SFont Page with sample fonts - http://www.linux-games.com/sfont
#  - SFont generator utility - http://www.nostatic.org/sfont
#  - SFont generator script for GIMP by Roger Feese
#      http://www.nostatic.org/sfont/render-sfont22.scm
#=============================================================================

module RPG
module Cache
  #--------------------------------------------------------------------------
  # * SFont Load
  #--------------------------------------------------------------------------
  def self.sfont(file)
    self.load_bitmap("Graphics/SFonts/", file)
  end
end
end

class SFont
  #--------------------------------------------------------------------------
  # * Class Variables
  #--------------------------------------------------------------------------
  @@glyphs = [
    "!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0",
    "1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@",
    "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P",
    "Q","R","S","T","U","V","W","X","Y","Z","[","\","]","^","_","`",
    "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p",
    "q","r","s","t","u","v","w","x","y","z","{","|","}","~"
    ]
  #--------------------------------------------------------------------------
  # * Get Glyphs
  #--------------------------------------------------------------------------
  def SFont.glyphs
    return @@glyphs
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(file, glyphs = @@glyphs, space = '"')
    if file.is_a?(String)
      bitmap = RPG::Cache.sfont(file)
    elsif file.is_a?(Bitmap)
      bitmap = file
    else
      raise(ArgumentError, "File Must be a String or Bitmap")
    end
   
    @height = bitmap.height
    @skip = bitmap.get_pixel(0, 0)
    @glyphs = {}
   
    x = 2
    glyphs.each {|char| x = load_glyph(bitmap, char, x)}
   
    unless glyphs.include?(' ')
      if space.is_a?(Numeric)
        space = space.to_i
      elsif space.is_a?(String)
        if glyphs.include?(space)
          space = @glyphs[space].width
        elsif !@glyphs['"'].nil?
          space = @glyphs['"'].width
        else
          space = bitmap.height
        end
      else
        raise(ArgumentError, "Space must be either a String or Numeric")
      end
      @glyphs[" "] = Bitmap.new(space, @height)
    end
    @glyphs.default = @glyphs[" "]
  end
  #--------------------------------------------------------------------------
  # * Text Size
  #--------------------------------------------------------------------------
  def text_size(text)
    width = 0
    text.each_byte {|byte| width += @glyphs["%c" % byte].width}
    return width
  end
  #--------------------------------------------------------------------------
  # * Render
  #--------------------------------------------------------------------------
  def render(text)
    width = text_size(text)
    bitmap = Bitmap.new(width, @height)
    x = 0
    text.each_byte do |byte|
      glyph = @glyphs["%c" % byte]
      bitmap.blt(x, 0, glyph, glyph.rect)
      x += glyph.width
    end
    return bitmap
  end
  #--------------------------------------------------------------------------
  # * Private: Load glyph
  #--------------------------------------------------------------------------
  private
  def load_glyph(bitmap, char, xi)
    while bitmap.get_pixel(xi, 0) == @skip && xi < bitmap.width
      xi += 1
    end
    return -1 if xi >= bitmap.width
    xf = xi
    while bitmap.get_pixel(xf, 0) != @skip && xf < bitmap.width
      xf += 1
    end
    return -1 if xf >= bitmap.width
   
    rect = Rect.new(xi, 0, xf - xi, bitmap.height)
    @glyphs[char] = Bitmap.new(xf - xi, bitmap.height)
    @glyphs[char].blt(0, 0, bitmap, rect)
   
    return xf+1
  end
end

Script
Bitmap
Código:
class Rect
  #--------------------------------------------------------------------------
  # * Strict Conversion to Array
  #--------------------------------------------------------------------------
  def to_ary
    return x, y, width, height
  end
  alias bounds to_ary
end

 
class Bitmap
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :sfont
  #--------------------------------------------------------------------------
  # * Draw Text
  #--------------------------------------------------------------------------
  alias_method :trick_sfont_bitmap_draw_text, :draw_text
  def draw_text(*args)
    if self.sfont == nil
      trick_sfont_bitmap_draw_text(*args)
    else
      align = 0
      case args.size
      when 2
        rect, text = args
        x, y, width, height = rect
      when 3
        rect, text, align = args
        x, y, width, height = rect
      when 5
        x, y, width, height, text = args
      when 6
        x, y, width, height, text, align = args
      end
      bitmap = sfont.render(text)
      if align == 1
        x += (width - bitmap.width) / 2
      elsif align == 2
        x += width - bitmap.width
      end
      y += (height - bitmap.height) / 2
      blt(x, y, bitmap, bitmap.rect)
    end
  end
end

Como usar

Dica:Se for preciso use Ctrl+Shift+F copie self.contents.draw_text e self.contents.blt e cole procure para agilizar a procura das linhas.
Em primeiro lugar é preciso copiar os scripts SFont e Bitmap para o seu projeto acima do Main é claro.
Em segundo lugar tu deve fazer é procular a linha em qualquer escript que tenha self.contents.draw_text,self.contents.blt e colar embaixo self.contents.sfont = SFont.new("Arial_Red").
Em terceiro tenha a pasta SFonts em seu projeto.
Arial_Red
é o nome da imagem de font, se for mudar o nome da imagem por exemplo
Font_FFT nomeie a imagem com esse nome e as todas as linhas que contém self.contents.sfont = SFont.new("Arial_Red") para self.contents.sfont = SFont.new("Font_FFT") colocando o seu nome de preferencia para o script reconhecer a imagem e certifique se de fazer a imagem ser como a do padrão.
Essa foi a forma que usei para funcionar aqui.

Demo

[Tens de ter uma conta e sessão iniciada para poderes visualizar este link]

PS: Caso queiram um projeto com varias fontes iguais as seu jogos preferidos diga que eu faço.

Perguntas Frequentes

Nenhuma

Créditos e Agradecimentos
Créditos ao Trickster que criou

http://www.zonetoony.net/

Ver o tópico anterior Ver o tópico seguinte Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos