Project1
标题:
【VA】当我发现一个坑爹的脚本。。。。。
[打印本页]
作者:
阿尔西斯的马甲
时间:
2012-1-22 19:24
标题:
【VA】当我发现一个坑爹的脚本。。。。。
本帖最后由 阿尔西斯的马甲 于 2012-1-22 19:25 编辑
# 将bitmap对象输出成bmp文件 By MOMOMO
#话说明明是柳柳发布的喵。。。
# 翻译:bbschat 来自:www.66rpg.com
# 将Bitmap对象
# 转换成位图文件(24bit)输出。
#
# Bmp_File.make_bmp_file(bitmap, name[, path])
# bitmap:Bitmap对象
# name:保存文件名
# path:保存路径
#
# 或者,对Bitmap对象直接使用
# bitmap_obj.make_bmp_file(name[, path])
# 也可以达成同样的机能。
module Bmp_File
module_function
# 生成BMP文件
def make_bmp_file(bitmap, name, path="")
file_header = make_bmp_file_header(bitmap)
info_header = make_bmp_info_header(bitmap)
bitmap_data = make_bitmap_data(bitmap)
make_dir(path) if path != ""
file = File.open(path + name + ".bmp", "wb")
file.write(file_header)
file.write(info_header)
file.write(bitmap_data)
file.close
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
# 从Bitmap对象中生成文件头
def make_bmp_file_header(bitmap)
bf_type = ["BM"].pack("a2")
bf_size = [get_bf_size(bitmap)].pack("L")
bf_Reserved1 = [0].pack("S")
bf_Reserved2 = [0].pack("S")
bf_OffBits = [54].pack("L")
file_header = bf_type + bf_size + bf_Reserved1 + bf_Reserved2 + bf_OffBits
return file_header
end
# 从Bitmap对象中生成情报头
def make_bmp_info_header(bitmap)
bi_size = [40].pack("L")
bi_width = [get_bi_width(bitmap)].pack("L")
bi_height = [get_bi_height(bitmap)].pack("L")
bi_planes = [1].pack("S")
bi_bitcount = [24].pack("S")
bi_copmression = [0].pack("L")
bi_sizeimage = [0].pack("L")
bi_x_pixpermeter = [0].pack("L")
bi_y_pixpermeter = [0].pack("L")
bi_clrused = [0].pack("L")
bi_cirimportant = [0].pack("L")
info_header = bi_size + bi_width + bi_height + bi_planes + bi_bitcount +
bi_copmression + bi_sizeimage + bi_x_pixpermeter +
bi_y_pixpermeter + bi_clrused + bi_cirimportant
return info_header
end
# 从Bitmap对象中生成图像数据
def make_bitmap_data(bitmap)
w = bitmap.width
h = bitmap.height
w = (w / 4 + 1) * 4 if w % 4 != 0
data = []
for y in 0...h
for x in 0...w
color = bitmap.get_pixel(x, (h - 1) - y)
data.push(color.blue)
data.push(color.green)
data.push(color.red)
end
end
return data.pack("C*")
end
def get_bf_size(bitmap)
w = bitmap.width
w = (w / 4 + 1) * 4 if w % 4 != 0
h = bitmap.height
return w * h * 3
end
def get_bi_width(bitmap)
return bitmap.width
end
def get_bi_height(bitmap)
return bitmap.height
end
end
class Bitmap
def make_bmp_file(name, path="")
Bmp_File.make_bmp_file(self, name, path)
end
end
#==============================================================================
# 本脚本出自www.66rpg.com,转载请注明。
#==============================================================================
=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
#==============================================================================
# 本脚本出自www.66rpg.com,转载请注明。
#==============================================================================
module RPG
class Animation2
def initialize
@id = 0
@name = ""
@animation1_name = ""
@animation1_hue = 0
@animation2_name = ""
@animation2_hue = 0
@position = 1
@frame_max = 1
@frames = [RPG::Animation::Frame.new]
@timings = []
end
attr_accessor :id
attr_accessor :name
attr_accessor :animation_name
attr_accessor :animation_hue
attr_accessor :position
attr_accessor :frame_max
attr_accessor :frames
attr_accessor :timings
end
end
module RPG
class Animation2
class Timing
def initialize
@frame = 0
@se = RPG::SE.new("", 80)
@se_name = ""
@se_volume = 80
@se_pitch = 100
@flash_scope = 0
@flash_color = Color.new(255,255,255,255)
@flash_duration = 5
end
attr_accessor :frame
attr_accessor :se
attr_accessor :se_name
attr_accessor :se_volume
attr_accessor :se_pitch
attr_accessor :flash_scope
attr_accessor :flash_color
attr_accessor :flash_duration
end
end
end
$data_animations = load_data("Data/Animations.rvdata2")
$vx_ani = []
$sprite = Sprite.new
$sprite.bitmap = Bitmap.new(500, 400)
number = 1
for ani in $data_animations
number += 1
next if ani==nil
$sprite.bitmap.clear
$sprite.bitmap.draw_text(0, 0, 500, 400, number.to_s + " / " + $data_animations.size.to_s, 1)
tani = RPG::Animation2.new
tani.id = ani.id
tani.name = ani.name
tani.animation_name = ani.animation1_name+"66RPG"+ani.animation2_name
tani.animation_hue = ani.animation1_hue
width = 960
bmp1 = Cache.animation(ani.animation1_name, ani.animation1_hue)
bmp2 = Cache.animation(ani.animation2_name, ani.animation2_hue)
height = bmp1.height + bmp2.height
bmp = Bitmap.new(width, height)
bmp.blt(0, 0, bmp1, bmp1.rect)
bmp.blt(0, bmp1.height, bmp2, bmp2.rect)
bmp.make_png(ani.animation1_name+"66RPG"+ani.animation2_name)
tani.position = ani.position
tani.frame_max = ani.frame_max
tani.frames = ani.frames
for i in 0..15
for fram in tani.frames
fram.cell_data[i, 0] -= (100 - bmp1.height * 5/ 192) if fram.cell_data[i, 0] != nil and fram.cell_data[i, 0] > 100
end
end
tani.timings = []
for timing in ani.timings
tm = RPG::Animation2::Timing.new
tm.frame = timing.frame
tm.se_name = timing.se.name
tm.se_volume = timing.se.volume
tm.se_pitch = timing.se.pitch
tm.flash_scope = timing.flash_scope
tm.flash_color = timing.flash_color
tm.flash_duration = timing.flash_duration
tani.timings.push(tm)
end
$vx_ani.push(tani)
end
save_data($vx_ani, "vx_ani.6R")
p "done"
复制代码
你妹的rvdata2,你妹的格式!
作者:
忧雪の伤
时间:
2012-1-22 19:25
看不懂您在说啥。
作者:
阿尔西斯的马甲
时间:
2012-1-22 19:38
本帖最后由 阿尔西斯的马甲 于 2012-1-22 19:43 编辑
研究:。。。(研究?!!)。。。水区我记得没有自顶限吧。。。
柳柳这啃爹的脚本大概是把animation转成数据库(转个你妹的数据库要你妹的这么多时间?我终于明白RGE的产生原因了)。
另外用不断变动的数字显示,不断updategraphics解掉10秒限(话说这主意。。根本没法实际应用。主线程如果都卡了,你创建再多的分线程还能不都卡住没法update么)
这脚本被稍微改了一下才能用在VA上。
不断仿VA的计划又迈进了OHyeAH!
Autotiles.7z
(326.8 KB, 下载次数: 0)
2012-1-22 19:41 上传
点击文件名下载附件
顺便附上我做好的一点自动元件
‘
@aaalbx
骂66?为何这样说?我这是在骂EB涅
──阿尔西斯的马甲于2012-1-22 19:42补充以上内容’
作者:
怕鼠的猫
时间:
2012-1-22 19:53
"BM",这么底层的开头都有了………… 用解释性语言逐字节写入bmp文件,那还不是个悲剧吗?
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1