Não sabia de nenhum script assim (conheço scripts que tiram print do mapa inteiro, mas não isso), então fiz um:
#==============================================================================
# MBS - Printscreen
#------------------------------------------------------------------------------
# por Masked
#==============================================================================
($imported ||= {})[:mbs_printscreen] = true
#==============================================================================
# >> MBS
#==============================================================================
module MBS
#============================================================================
# >> Screenshot
#============================================================================
module Screenshot
#==========================================================================
# Configurações
#==========================================================================
# Tecla que chama o print
KEY = :F2
# Nome da pasta onde ficam os printscreen (pode estar vazio, nesse caso
# os prints serão salvos na pasta raíz do jogo)
FOLDER = 'Screenshots'
# Nome padrão dos arquivos (o nome dos arquivos será nome + n + .png)
BASENAME = 'print' # O nome dos arquivos será "printX.png"
# SE a ser tocada quando uma screenshot é tirada (pode ser vazio)
SE = 'Audio/SE/Chime2'
#==========================================================================
# Fim das configurações
#==========================================================================
end
end
#==============================================================================
# >> PNG
#------------------------------------------------------------------------------
# Qualquer classe que inclua este módulo deve redefinir o método 'get_rgba',
# 'width' e 'height', assim obtendo um método 'save_png', que quando chamado
# exporta o objeto como uma imagem PNG
#==============================================================================
module PNG
private
#----------------------------------------------------------------------------
# * Criação do header do arquivo
#----------------------------------------------------------------------------
def make_header(file)
# Número mágico
file.write([0x89].pack('C'))
# PNG
file.write([0x50, 0x4E, 0x47].pack('CCC'))
# Fim de linha estilo DOS para verificação de conversão DOS - UNIX
file.write([0x0D, 0x0A].pack('CC'))
# Caractere de fim de linha (DOS)
file.write([0x1A].pack('C'))
# Caractere de fim de linha (UNIX)
file.write([0x0A].pack('C'))
end
#----------------------------------------------------------------------------
# * Aquisição da soma mágica
#----------------------------------------------------------------------------
def checksum(string)
Zlib.crc32(string)
end
#----------------------------------------------------------------------------
# * Criação do chunk de cabeçalho
#----------------------------------------------------------------------------
def make_ihdr(file)
data = ''
# Largura
data += [self.width, self.height].pack('NN')
# Bit depth (???)
data += [0x8].pack('C')
# Tipo de cor
data += [0x6].pack('C')
data += [0x0, 0x0, 0x0].pack('CCC')
# Tamanho do chunk
file.write([data.size].pack('N'))
# Tipo de chunk
file.write('IHDR')
file.write(data)
# Soma mágica
file.write([checksum('IHDR' + data)].pack('N'))
end
#----------------------------------------------------------------------------
# * Criação do chunk de dados
#----------------------------------------------------------------------------
def make_idat(file)
data = ''
for y in 0...height
data << "\0"
for x in 0...width
color = self.get_rgba(x, y)
data << [color.red, color.green, color.blue, color.alpha].pack('C*')
end
end
# Desinflamento (jeito legal de dizer compressão...) dos dados
data = Zlib::Deflate.deflate(data)
# Tamanho do chunk
file.write([data.size].pack('N'))
# Tipo de chunk
file.write('IDAT')
# Dados (a imagem)
file.write(data)
# Soma mágica
file.write([checksum('IDAT' + data)].pack('N'))
end
#----------------------------------------------------------------------------
# * Criação do chunk final
#----------------------------------------------------------------------------
def make_iend(file)
# Tamanho do chunk
file.write([0].pack('N'))
# Tipo de chunk
file.write('IEND')
# Soma mágica
file.write([checksum('IEND')].pack('N'))
end
public
#----------------------------------------------------------------------------
# * Aquisição do largura da imagem
#----------------------------------------------------------------------------
def width
1
end
#----------------------------------------------------------------------------
# * Aquisição da altura da imagem
#----------------------------------------------------------------------------
def height
1
end
#----------------------------------------------------------------------------
# * Aquisição da cor RGBA na coordenada XY
#----------------------------------------------------------------------------
def get_rgba
Color.new(0,0,0,0)
end
#----------------------------------------------------------------------------
# * Conversão do bitmap em um arquivo .png
#----------------------------------------------------------------------------
def save_png(filename)
file = File.open(filename, 'wb')
# Criação do cabeçalho
make_header(file)
# Criação do primeiro chunk
make_ihdr(file)
# Criação dos dados
make_idat(file)
# Criação do final
make_iend(file)
file.close
end
end
#==============================================================================
# ** Bitmap
#==============================================================================
class Bitmap
alias mbswdht width
alias mbshght height
#----------------------------------------------------------------------------
# Inclusão do módulo PNG na classe Bitmap
#----------------------------------------------------------------------------
include PNG
#----------------------------------------------------------------------------
# * Aquisição da largura do bitmap
#----------------------------------------------------------------------------
def width
mbswdht
end
#----------------------------------------------------------------------------
# * Aquisição da altura do bitmap
#----------------------------------------------------------------------------
def height
mbshght
end
#----------------------------------------------------------------------------
# * Aquisição da cor RGBA na coordenada XY
#----------------------------------------------------------------------------
def get_rgba(x, y)
get_pixel(x, y)
end
end
#==============================================================================
# ** Scene_Base
#==============================================================================
class Scene_Base
alias mbsscnbsupdt update
#----------------------------------------------------------------------------
# * Atualização do processo
#----------------------------------------------------------------------------
def update
mbsscnbsupdt
save_screenshot if Input.trigger?(MBS::Screenshot::KEY)
end
#----------------------------------------------------------------------------
# * Salvamento de uma screenshot
#----------------------------------------------------------------------------
def save_screenshot
folder = MBS::Screenshot::FOLDER
basename = MBS::Screenshot::BASENAME
Dir.mkdir(folder) unless FileTest.directory?(folder)
n = Dir.entries(folder).inject(1) do |r, v|
v =~ /^#{basename}\d+\.png$/ ? r + 1 : r
end
bitmap = Graphics.snap_to_bitmap
Graphics.brightness = 0
until Graphics.brightness == 255
Graphics.brightness += 10
Graphics.update
end
bitmap.save_png("#{folder}/#{basename}#{n}.png")
Audio.se_play(MBS::Screenshot::SE)
end
end
Qualquer coisa avise.