Project1
标题:
求RTP精简脚本
[打印本页]
作者:
Yophs
时间:
2012-8-8 17:28
标题:
求RTP精简脚本
图书馆里的链接打开以后帖子没了,求RTP精简脚本
作者:
狱冥幻翼
时间:
2012-8-11 19:56
#encoding: utf-8
#==============================================================================
# ■ [PS0]RTP 精简
# RTP_RIP
#------------------------------------------------------------------------------
# 删除 RTP 中不需要的文件,减小游戏发布时的体积。
#==============================================================================
# [更新记录]
# - 2012.02.13 By Shy07
# * 初版(实验版本)
#------------------------------------------------------------------------------
# [使用方法]
# - 实验版本,适合默认脚本制作的 Ace 游戏。游戏制作完毕以后,将 RTP 文件夹
# 下的 Audio、Graphics 文件夹复制到游戏文件夹,提示文件夹重复选合并,提示文件
# 重复选不要复制。
# - 完成以上操作后复制这段脚本到游戏脚本中,运行。如果有提示文件无法移除,
# 可以手动删除;移除的文件在游戏文件夹的 BAK 文件夹下。
# - 运行完这段后记得把这段脚本删除或注释掉最后 RTP_RIP.remove_files 那一行。
# 发布游戏时把 Game.ini 里的 RTP=RPGVXAce 改成 RTP= 再用压缩工具打包(不要用
# Ace 制作发行包)。
# - 最后,这段脚本还不完善,运行以后一定要完整测试游戏,确认不缺少文件后,
# 再删除 BAK 文件夹。
#==============================================================================
#==============================================================================
# ■ String
#------------------------------------------------------------------------------
# String 类追加定义。
#==============================================================================
class String
#----------------------------------------------------------------------------
# ● API
#----------------------------------------------------------------------------
@@MultiByteToWideChar = Win32API.new('kernel32', 'MultiByteToWideChar', 'ilpipi', 'i')
@@WideCharToMultiByte = Win32API.new('kernel32', 'WideCharToMultiByte', 'ilpipipp', 'i')
#----------------------------------------------------------------------------
# ● UTF-8 转系统编码
#----------------------------------------------------------------------------
def u2s
i = @@MultiByteToWideChar.call(65001, 0 , self, -1, nil,0)
buffer = "\0" * (i*2)
@@MultiByteToWideChar.call(65001, 0 , self, -1, buffer, i)
i = @@WideCharToMultiByte.call(0, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
@@WideCharToMultiByte.call(0, 0, buffer, -1, result, i, nil, nil)
result.chop!
return result
end
#----------------------------------------------------------------------------
# ● 系统编码转 UTF-8
#----------------------------------------------------------------------------
def s2u
i = @@MultiByteToWideChar.call(0, 0, self, -1, nil, 0)
buffer = "\0" * (i*2)
@@MultiByteToWideChar.call(0, 0, self, -1, buffer, buffer.size / 2)
i = @@WideCharToMultiByte.call(65001, 0, buffer, -1, nil, 0, nil, nil)
result = "\0" * i
@@WideCharToMultiByte.call(65001, 0, buffer, -1, result, result.size, nil, nil)
result.chop!
return result
end
end
#==============================================================================
# ■ RTP_RIP
#------------------------------------------------------------------------------
# RTP 精简
#==============================================================================
module RTP_RIP
#--------------------------------------------------------------------------
# ● 常量
#--------------------------------------------------------------------------
FMs = ["bmp", "jpg", "png", "wav", "mp3", "ogg", "wma", "mid"]
PATH = ["Graphics/Animations/", "Graphics/Battlebacks1/",
"Graphics/Battlebacks2/", "Graphics/Battlers/",
"Graphics/Characters/", "Graphics/Faces/",
"Graphics/Parallaxes/", "Graphics/Pictures/",
"Graphics/Titles1/", "Graphics/Titles2/",
"Graphics/Tilesets/",
"Audio/BGM/", "Audio/BGS/", "Audio/ME/", "Audio/SE/"]
SYSTEM = ["Graphics/System/Balloon", "Graphics/System/BattleStart",
"Graphics/System/GameOver", "Graphics/System/IconSet",
"Graphics/System/Shadow", "Graphics/System/Window"]
# 模块函数
module_function
#--------------------------------------------------------------------------
# ● 获取全部文件
#--------------------------------------------------------------------------
def get_all_files
@old_dir = Dir.pwd.s2u
@resource_type = []
FMs.each do |fm|
@resource_type << fm
@resource_type << fm.upcase
end
@all_files = []
@path = ""
next_file(@path)
Dir.chdir(@old_dir)
end
#--------------------------------------------------------------------------
# ● 下一个文件
#--------------------------------------------------------------------------
def next_file(path)
Dir.chdir(@old_dir)
Dir.chdir(path) if path != ""
Dir["*"].each do |f|
if FileTest.directory?(f)
@path = @path + f + "/"
next_file(@path)
else
arr = f.split(/\./)
if @resource_type.include? arr.pop
fi = arr.shift
arr.each {|v| fi += "." + v }
@all_files << @path + fi
end
end
end
path_a = path.split(/\//)
@path = ""
(0...path_a.size - 1).each {|i| @path += path_a[i] + "/" }
Dir.chdir(@old_dir)
Dir.chdir(@path) if @path != ""
end
#--------------------------------------------------------------------------
# ● 检测是否空文件名
#--------------------------------------------------------------------------
def check_file(arr, filename, path = "")
arr << path + filename unless filename == ""
end
#--------------------------------------------------------------------------
# ● 获取事件列表文件列表
#--------------------------------------------------------------------------
def get_list_files(list)
arr = []
list.each do |cmd|
case cmd.code
when 101
check_file(arr, cmd.parameters[0], PATH[5])
when 132
check_file(arr, cmd.parameters[0].name, PATH[11])
when 133
check_file(arr, cmd.parameters[0].name, PATH[13])
#~ when 212 # 显示动画,暂不分析
when 231
check_file(arr, cmd.parameters[1], PATH[7])
when 241
check_file(arr, cmd.parameters[0].name, PATH[11])
when 245
check_file(arr, cmd.parameters[0].name, PATH[12])
when 249
check_file(arr, cmd.parameters[0].name, PATH[13])
when 250
check_file(arr, cmd.parameters[0].name, PATH[14])
#~ when 282 # 更改图块组,暂不分析
when 283
check_file(arr, cmd.parameters[0], PATH[1])
check_file(arr, cmd.parameters[1], PATH[2])
when 284
check_file(arr, cmd.parameters[0], PATH[6])
#~ when 301 # 战斗处理,暂不分析
when 322
check_file(arr, cmd.parameters[1], PATH[4])
check_file(arr, cmd.parameters[3], PATH[5])
when 323
check_file(arr, cmd.parameters[1], PATH[4])
#~ when 337 # 显示战斗动画,暂不分析
end
end
return arr
end
#--------------------------------------------------------------------------
# ● 获取动画文件列表
#--------------------------------------------------------------------------
def get_ani_files
@ani_files = []
load_data("Data/Animations.rvdata2").each do |ani|
if ani.nil?
@ani_files << []
else
arr = []
check_file(arr, ani.animation1_name, PATH[0])
check_file(arr, ani.animation2_name, PATH[0])
ani.timings.each {|timing| check_file(arr, timing.se.name, PATH[14]) }
@ani_files << arr
end
end
end
#--------------------------------------------------------------------------
# ● 获取角色文件列表
#--------------------------------------------------------------------------
def get_act_files
@act_files = []
load_data("Data/Actors.rvdata2").each do |act|
if act.nil?
@act_files << []
else
arr = []
check_file(arr, act.character_name, PATH[4])
check_file(arr, act.face_name, PATH[5])
@act_files << arr
end
end
end
#--------------------------------------------------------------------------
# ● 获取敌人文件列表
#--------------------------------------------------------------------------
def get_ene_files
@ene_files = []
load_data("Data/Enemies.rvdata2").each do |ene|
if ene.nil?
@ene_files << []
else
arr = []
check_file(arr, ene.battler_name, PATH[3])
@ene_files << arr
end
end
end
#--------------------------------------------------------------------------
# ● 获取敌群文件列表
#--------------------------------------------------------------------------
def get_trp_files
@trp_files = []
load_data("Data/Troops.rvdata2").each do |trp|
if trp.nil?
@trp_files << []
else
arr = []
trp.pages.each {|page| arr += get_list_files(page.list) }
@trp_files << arr
end
end
end
#--------------------------------------------------------------------------
# ● 获取图块文件列表
#--------------------------------------------------------------------------
def get_til_files
@til_files = []
load_data("Data/Tilesets.rvdata2").each do |til|
if til.nil?
@til_files << []
else
arr = []
til.tileset_names.each {|ts| check_file(arr, ts, PATH[10]) }
@til_files << arr
end
end
end
#--------------------------------------------------------------------------
# ● 获取公共事件文件列表
#--------------------------------------------------------------------------
def get_com_files
@com_files = []
load_data("Data/CommonEvents.rvdata2").each do |com|
if com.nil?
@com_files << []
else
@com_files << get_list_files(com.list)
end
end
end
#--------------------------------------------------------------------------
# ● 获取系统文件列表
#--------------------------------------------------------------------------
def get_sys_files
arr = []
data_system = load_data("Data/System.rvdata2")
check_file(arr, data_system.boat.character_name, PATH[4])
check_file(arr, data_system.ship.character_name, PATH[4])
check_file(arr, data_system.airship.character_name, PATH[4])
check_file(arr, data_system.title1_name, PATH[8])
check_file(arr, data_system.title2_name, PATH[9])
check_file(arr, data_system.title_bgm.name, PATH[11])
check_file(arr, data_system.battle_bgm.name, PATH[11])
check_file(arr, data_system.battle_end_me.name, PATH[13])
check_file(arr, data_system.gameover_me.name, PATH[13])
data_system.sounds.each {|sound| check_file(arr, sound.name, PATH[14]) }
@sys_files = arr + SYSTEM
end
#--------------------------------------------------------------------------
# ● 获取地图文件列表
#--------------------------------------------------------------------------
def get_map_files
map_num = Dir.glob("Data/Map***.rvdata2").size
@map_files = {}
(1...map_num).each do |i|
name = sprintf("Data/Map%03d.rvdata2", i)
map = load_data(name)
@map_files[name] = []
@map_files[name] += @til_files[map.tileset_id]
check_file(@map_files[name], map.bgm.name, PATH[11])
check_file(@map_files[name], map.bgs.name, PATH[12])
check_file(@map_files[name], map.battleback1_name, PATH[1])
check_file(@map_files[name], map.battleback2_name, PATH[2])
map.events.each_value do |value|
value.pages.each do |page|
check_file(@map_files[name], page.graphic.character_name, PATH[4])
@map_files[name] += get_list_files(page.list)
end
end
end
end
#--------------------------------------------------------------------------
# ● 链接文件列表
#--------------------------------------------------------------------------
def link_list
self.get_all_files
self.get_ani_files
self.get_act_files
self.get_ene_files
self.get_trp_files
self.get_til_files
self.get_com_files
self.get_sys_files
self.get_map_files
@linked_files = []
@ani_files.each {|arr| @linked_files += arr }
@act_files.each {|arr| @linked_files += arr }
@ene_files.each {|arr| @linked_files += arr }
@trp_files.each {|arr| @linked_files += arr }
@til_files.each {|arr| @linked_files += arr }
@com_files.each {|arr| @linked_files += arr }
@linked_files += @sys_files
@map_files.each_value {|value| @linked_files += value }
end
#--------------------------------------------------------------------------
# ● 移除文件
#--------------------------------------------------------------------------
def remove_files
self.link_list
arr = @all_files.uniq - @linked_files.uniq
begin;Dir.mkdir("BAK");rescue;end
File.open("BAK/list.txt", "wb") {|f| arr.sort.each {|i| f.write i+"\r\n" } }
arr.each do |f|
FMs.each do |fm|
if File.exist?(f + "." + fm)
from = f + "." + fm
to = "BAK/" + from.gsub(/\//, "_")
begin;File.rename(from, to);rescue;p from + "-移除失败";end
break
elsif File.exist?(f + "." + fm.upcase)
from = f + "." + fm.upcase
to = "BAK/" + from.gsub(/\//, "_")
begin;File.rename(from, to);rescue;p from + "-移除失败";end
break
end
end
end
msgbox_p "Done!"
exit
end
end
# 移除文件
#~ RTP_RIP.remove_files
复制代码
作者:
Shy07
时间:
2013-3-9 22:34
@victor0181
,我居然一搜就搜到了= =
@迷糊的安安
,能认可就认可吧,我是在后台手误把帖子删了,没什么用意
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1