1 Converter Charcter RMVX para RMXP. 12/8/2012, 21:57
FrozenGraveyard
Membro Honorário I
Introdução
Esse Script converte Charsets do RMVX para o RMXP.
Sendo eles tanto 12x8 ou 3x4 frames.
Como usar
Abra a demo perceba que vai ter uma pasta chamada Chars, abra ela certifique de que as duas pasta
chamadas 12x8 e 3x4 estão ai, se não crie elas.
Na pasta 12x8 você colocara as imagens dos chars que são 12x8 frames.
Na pasta 3x4 você colocara as imagens dos chars que são 3x4 frames.
Rode o Game, ira aparecer uma mensagem, na maioria das vazes de erro não se preocupe esta tudo certo.
Agora vá ate a pasta Converted, veja que tem varias pastas nela abra elas e veja os char convertido.
Script
Demo
Click
Créditos
game_guy - por criar.
Fantasist - Por ensinar o autor como obter os arquivos da pasta, e como usar bitmap para png código.
66rpg - por algo.
Splash - por fazer um mini tutorial.
Origem do Script - Click
Esse Script converte Charsets do RMVX para o RMXP.
Sendo eles tanto 12x8 ou 3x4 frames.
Como usar
Abra a demo perceba que vai ter uma pasta chamada Chars, abra ela certifique de que as duas pasta
chamadas 12x8 e 3x4 estão ai, se não crie elas.
Na pasta 12x8 você colocara as imagens dos chars que são 12x8 frames.
Na pasta 3x4 você colocara as imagens dos chars que são 3x4 frames.
Rode o Game, ira aparecer uma mensagem, na maioria das vazes de erro não se preocupe esta tudo certo.
Agora vá ate a pasta Converted, veja que tem varias pastas nela abra elas e veja os char convertido.
Script
- Código:
#===============================================================================
#===============================================================================
# Vx To Xp Char Converter
# Version 1.0
# Author game_guy
#-------------------------------------------------------------------------------
# Intro
# Converts the little vx guys to xp format.
#
# Features
# Converts the 12x8 frame chars (ones with 8 people)
# Converts the 3x4 frame chars (the single person)
#
# Instructions
# Just place character files in the Chars/12x8 folder for 12x8 chars.
# Place files in Chars/3x4 folder for 3x4 chars.
# Then run the game, it'll convert it for you.
#
# Credits
# game_guy ~ for making it
# Fantasist ~ teaching me how to get files from folder, and how to use bitmap to
# png code
# 66rpg ~ for their bitmap to png code
#
#===============================================================================
=begin
==============================================================================
Bitmap to PNG By 轮回者
==============================================================================
对Bitmap对象直接使用
bitmap_obj.make_png(name[, path])
name:保存文件名
path:保存路径
感谢66、夏娜、金圭子的提醒和帮助!
==============================================================================
=end
module Zlib
class Png_File < GzipWriter
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
def make_png(bitmap_Fx,mode)
@mode = mode
@bitmap_Fx = bitmap_Fx
self.write(make_header)
self.write(make_ihdr)
self.write(make_idat)
self.write(make_iend)
end
#--------------------------------------------------------------------------
# ● PNG文件头数据块
#--------------------------------------------------------------------------
def make_header
return [0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a].pack("C*")
end
#--------------------------------------------------------------------------
# ● PNG文件情报头数据块(IHDR)
#--------------------------------------------------------------------------
def make_ihdr
ih_size = [13].pack("N")
ih_sign = "IHDR"
ih_width = [@bitmap_Fx.width].pack("N")
ih_height = [@bitmap_Fx.height].pack("N")
ih_bit_depth = [8].pack("C")
ih_color_type = [6].pack("C")
ih_compression_method = [0].pack("C")
ih_filter_method = [0].pack("C")
ih_interlace_method = [0].pack("C")
string = ih_sign + ih_width + ih_height + ih_bit_depth + ih_color_type +
ih_compression_method + ih_filter_method + ih_interlace_method
ih_crc = [Zlib.crc32(string)].pack("N")
return ih_size + string + ih_crc
end
#--------------------------------------------------------------------------
# ● 生成图像数据(IDAT)
#--------------------------------------------------------------------------
def make_idat
header = "\x49\x44\x41\x54"
case @mode # 请54~
when 1
data = make_bitmap_data#1
else
data = make_bitmap_data
end
data = Zlib::Deflate.deflate(data, 8)
crc = [Zlib.crc32(header + data)].pack("N")
size = [data.length].pack("N")
return size + header + data + crc
end
#--------------------------------------------------------------------------
# ● 从Bitmap对象中生成图像数据 mode 1(请54~)
#--------------------------------------------------------------------------
def make_bitmap_data1
w = @bitmap_Fx.width
h = @bitmap_Fx.height
data = []
for y in 0...h
data.push(0)
for x in 0...w
color = @bitmap_Fx.get_pixel(x, y)
red = color.red
green = color.green
blue = color.blue
alpha = color.alpha
data.push(red)
data.push(green)
data.push(blue)
data.push(alpha)
end
end
return data.pack("C*")
end
#--------------------------------------------------------------------------
# ● 从Bitmap对象中生成图像数据 mode 0
#--------------------------------------------------------------------------
def make_bitmap_data
gz = Zlib::GzipWriter.open('hoge.gz')
t_Fx = 0
w = @bitmap_Fx.width
h = @bitmap_Fx.height
data = []
for y in 0...h
data.push(0)
for x in 0...w
t_Fx += 1
if t_Fx % 10000 == 0
Graphics.update
end
if t_Fx % 100000 == 0
s = data.pack("C*")
gz.write(s)
data.clear
#GC.start
end
color = @bitmap_Fx.get_pixel(x, y)
red = color.red
green = color.green
blue = color.blue
alpha = color.alpha
data.push(red)
data.push(green)
data.push(blue)
data.push(alpha)
end
end
s = data.pack("C*")
gz.write(s)
gz.close
data.clear
gz = Zlib::GzipReader.open('hoge.gz')
data = gz.read
gz.close
File.delete('hoge.gz')
return data
end
#--------------------------------------------------------------------------
# ● PNG文件尾数据块(IEND)
#--------------------------------------------------------------------------
def make_iend
ie_size = [0].pack("N")
ie_sign = "IEND"
ie_crc = [Zlib.crc32(ie_sign)].pack("N")
return ie_size + ie_sign + ie_crc
end
end
end
#==============================================================================
# ■ Bitmap
#------------------------------------------------------------------------------
# 关联到Bitmap。
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ● 关联
#--------------------------------------------------------------------------
def make_png(name="like", path="",mode=0)
make_dir(path) if path != ""
Zlib::Png_File.open("temp.gz") {|gz|
gz.make_png(self,mode)
}
Zlib::GzipReader.open("temp.gz") {|gz|
$read = gz.read
}
f = File.open(path + name + ".png","wb")
f.write($read)
f.close
File.delete('temp.gz')
end
#--------------------------------------------------------------------------
# ● 生成保存路径
#--------------------------------------------------------------------------
def make_dir(path)
dir = path.split("/")
for i in 0...dir.size
unless dir == "."
add_dir = dir[0..i].join("/")
begin
Dir.mkdir(add_dir)
rescue
end
end
end
end
end
module GameGuy
def self.vxconvert(file)
begin
char = GameGuy.character(file, 0)
rescue
$skipped += 1
return
end
width = char.width / 4
height = char.height / 2
vxwidth = width / 3
index = 0
xx = 0
yy = 0
unless FileTest.directory?("Converted/#{file}/")
Dir.mkdir("Converted/#{file}/")
end
loop do
bitmap = Bitmap.new(width + vxwidth, height)
rect1 = Rect.new(xx+vxwidth, yy, vxwidth, height)
bitmap.blt(0, 0, char, rect1)
rect2 = Rect.new(xx, yy, width, height)
bitmap.blt(vxwidth, 0, char, rect2)
bitmap.make_png("#{file} #{index}", "Converted/#{file}/")
bitmap.dispose
bitmap = nil
if index == 7
$converted += 1
break
end
index += 1
case index
when 0,4
xx = width*0
when 1,5
xx = width*1
when 2,6
xx = width*2
when 3,7
xx = width*3
end
if index == 4
yy = height
end
end
end
def self.svxconvert(file)
begin
char = GameGuy.scharacter(file, 0)
rescue
$skipped += 1
return
end
width = char.width / 3
height = char.height
bitmap = Bitmap.new(width * 4, height)
rect1 = Rect.new(width, 0, width, height)
bitmap.blt(0, 0, char, rect1)
rect2 = Rect.new(0, 0, width * 3, height)
bitmap.blt(width, 0, char, rect2)
unless FileTest.directory?("Converted/#{file}/")
Dir.mkdir("Converted/#{file}/")
end
bitmap.make_png("#{file}", "Converted/#{file}/")
$converted += 1
end
end
module GameGuy
@cache = {}
def self.load_bitmap(folder_name, filename, hue = 0)
path = folder_name + filename
if not @cache.include?(path) or @cache[path].disposed?
if filename != ""
@cache[path] = Bitmap.new(path)
else
@cache[path] = Bitmap.new(32, 32)
end
end
if hue == 0
@cache[path]
else
key = [path, hue]
if not @cache.include?(key) or @cache[key].disposed?
@cache[key] = @cache[path].clone
@cache[key].hue_change(hue)
end
@cache[key]
end
end
def self.character(filename, hue)
self.load_bitmap("Chars/12x8/", filename, hue)
end
def self.scharacter(filename, hue)
self.load_bitmap("Chars/3x4/", filename, hue)
end
end
begin
unless FileTest.directory?("Converted")
Dir.mkdir("Converted")
end
$time = Time.now
$converted = 0
$skipped = 0
@names = []
dir = Dir.new('Chars/12x8/')
dir.entries.each {|file| next unless file.include?('.png')
@names.push(file); GameGuy.character(file, 0)}
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
GameGuy.vxconvert(@names[i])
end
@names = []
dir = Dir.new('Chars/3x4/')
dir.entries.each {|file| next unless file.include?('.png')
@names.push(file); GameGuy.scharacter(file, 0)}
for i in [Tens de ter uma conta e sessão iniciada para poderes visualizar este link]
GameGuy.svxconvert(@names[i])
end
print "Converted #{$converted} files in #{Time.now - $time} seconds" + "\n" +
"Total Skipped Files: #{$skipped}"
exit
end
Demo
Click
Créditos
game_guy - por criar.
Fantasist - Por ensinar o autor como obter os arquivos da pasta, e como usar bitmap para png código.
66rpg - por algo.
Splash - por fazer um mini tutorial.
Origem do Script - Click