赞 | 5 |
VIP | 464 |
好人卡 | 4 |
积分 | 5 |
经验 | 14189 |
最后登录 | 2020-6-13 |
在线时间 | 972 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 458
- 在线时间
- 972 小时
- 注册时间
- 2007-12-31
- 帖子
- 2137
|
本帖最后由 liqunsz 于 2011-3-11 23:11 编辑
方法一
以下引用自
【RMXP新手教程】手把手教你RMXP by 天圣的马甲
制作可以发布的完整游戏包
游戏做完啦!在跟能玩到的就近的亲友们欢呼庆祝尖叫撒花绕场奔跑三周半一个月(……)之后,就到了将它们发布到网上共享的时间了。RMXP制作的游戏的发布工作,大概分为以下几步:
1、清点素材,归整默认素材至自己的游戏目录下
在第二章我们介绍导入素材的时候曾经说过,你放在自己游戏目录下的素材是和RM默认素材区分开来的。(你放在游戏目录下的素材前面的圆点是红色,RM默认素材前面的圆点是蓝色)在玩家运行你的游戏的时候,游戏执行文件只能从游戏目录下面读取素材,而那些默认的安装在你自己电脑里的素材是不会被读到的。说得更具体些:找到你的RPG Maker XP软件本身的安装目录,里面有个“RGSS”文件,点开里面的“Standard”,就能看到Audio和Graphics两个文件,然后你可以查看这两个文件,发现里面的东西就都是RM默认的那些音乐和图片素材。在你用RM制作游戏的时候,系统都是从制作软件目录下的这两个文件里读取默认素材的。但玩家们不装RMXP,就不可能有这些素材。因此如果你用了RM默认的素材(也就是前面有蓝色圆点的那些),你就需要把这些素材都拷贝到你的游戏目录下的对应文件里面。一定要确认你在游戏里用到的所有素材都已经是前面带红点的,才能够继续下一步。否则脱离RTP之后,如果有缺失的文件就很难检查出来了。
![]()
![]()
2、脱离RTP
如果到RMXP相关论坛的新手区兜一圈,大体上所有在发布上出的毛病都是基于这个“没脱离RTP的问题”。所谓RTP,就是指素材库,也就是你的游戏读取素材的路径。当你不设置素材库的时候,它会从游戏的目录里直接读取各类素材(所以上一步要求你把所有用到的素材都放到游戏目录下面)。如果不脱离RTP,而玩家的机器里又没有素材库的时候,就会显示“没有发现RGSS-RTP。”的提示,导致游戏无法运行。脱离RTP看似很复杂,设置起来却非常简单。首先如图示,点击你工程右上角“游戏”菜单,选择“选择RTP”选项,然后将三个RTP都设置为“无”。那个Standard就是上一步提到的在RMXP软件安装目录下的Standard文件夹,被软件用作素材库使用。这样设置之后,软件将不再从这个文件夹里读取素材。然后当你再次回到游戏里的时候,就会看到那些前面有蓝点的文件都不见了——因为RM已经不再会从默认目录里读取素材了,它读取的只是你游戏文件夹下的文件。
![]()
![]()
![]()
3、再次Debug检查是否漏缺文件
然后,再次的Debug就是必须的了,尤其是你在制作游戏的时候如果用了很多默认素材,又不确定自己是否拷贝齐全的情况下。在Debug的过程中任何素材的缺失都会导致游戏中途报错跳出,好在它报错的时候会提供给你游戏的路径和文件名,所以你可以立刻找到并且补上。因而其实我个人推荐你在一开始做游戏的时候就注意看着自己用了哪些素材,用上的同时就拷贝过来,以防最后整理发布的时候忘记。
![]()
4、添加DLL文件
这一步经常被很多Rmer给漏掉(包括我一开始做游戏的时候也忘记过……= =|||)。RMXP文件夹下的那个Game.exe需要一个辅助运行的DLL文件,它叫做RGSS102J.DLL。为了确定这个文件的版本,我们需要打开你的游戏的系统信息文件来进行确认。在你的游戏目录里有个Game.ini文件,可以用记事本打开。注意看那里的第二行,Libarary= 这行字的后面,就是你需要的这个DLL(要注意的是这个文件会根据你使用的RM的版本有所变化,请务必记得你要用你自己ini文件夹下记录的那个DLL文件)。那么在哪里找到这个文件呢?一般情况下,它的路径是C:\Windows\System32下面。如果你嫌找起来麻烦的话,可以直接下载我提供的这个。如果名字不一样的话改成同样的名字就可以了,内容没有什么实质区别:http://www.uushare.com/user/saintsky/file/2464674
将这个文件放进你的游戏目录下面,确认过素材齐全,然后把你不需要发布到网上的冗赘内容都删掉(压缩数据的时候会把游戏目录下的所有内容都压缩进去所以没用的东西都要删掉),就可以开始打包了。Game.ini文件必须留着,但是工程文件可以删掉。
![]()
5、压缩游戏数据
其实当你按照上述步骤弄完毕之后,直接把游戏打个压缩包就可以上传了。不过如果你的电脑里没有压缩软件,或者你想要让它看上去更加正规一点的话,可以使用RM自带的压缩游戏数据功能。选择“文件”——“压缩游戏数据”,显示出压缩窗口。在这里你可以选择制作压缩包的路径,并且也能选择是否加密你的游戏内容——加密之后,你的Graphics文件夹和Data文件夹都会消失,图片及数据会被做进一个加密文件里面,可以适度保护你的游戏里的隐藏内容(比如游戏CG和不想被盗用的原创素材等)。游戏压缩之后就会在你设定好的目录下面出现一个exe的解压缩文件。玩家只要打开这个文件,就可以像安装游戏一样直接解压缩出你的游戏,然后通过运行Game.exe进行游戏了。
![]()
![]()
6、发布上传
选一个好点的稳定的网盘,把你的游戏传上去然后放出地址让人下载吧=v=。如果你上传的是上面压缩出来的exe文件,最好是选择能够允许共享exe文件的网盘。
![]()
7、一点补充:给游戏打补丁
如果在发布游戏之后,有人找到了问题的话,也要立刻制作补丁发布上去。缺素材的话就要补素材这个不需要废话,但如果是游戏里面别处有了问题的话,就要发布数据补丁。没有加密的情况下,只要修改并保存游戏,将你的Data文件夹打包传给对方覆盖原文件夹的所有内容就行了。但若是加密的话,就必须重新压缩一次游戏数据,然后把那个包括了Graphics和Data的加密文件给对方传过去覆盖原文件。
方法二
RMXP 游戏发布素材提取器 by ROYROY,柳柳
效果
游戏制作完成之后把素材提取到自己游戏里面。
特别注意:
提取得不保证非常完整。素材肯定不会多,只可能少……缩减自己游戏体积专用
缩减的一些其他窍门:运行此脚本前,把没用的数据库动画,数据库图块都删了,能变小不少。
使用方法
插入脚本,运行。注意默认情况下会把安装目录下的RMXP素材库破坏,请看脚本开头注释
- #============================================================================
- # 本脚本来自www.66rpg.com,转载请保留此信息,使用……只能用一次
- # 核心作者:RoyRoy
- # 使用方法:
- # 1、首先输入RMXP的标准素材库地址,下面给出的是默认地址
- # 2、运行脚本就OK了。
- # ★★特别声明!!运用此脚本会删掉你给的路径的素材库★★请自己备份好★★★★
- #============================================================================
- RMXP = "C:/Program Files/RPG Maker XP/RGSS/Standard/" # 素材库地址
-
- module DumpRgss
- def self.dump
- @rgss_list = []
- @rgss_dir = {
- 'BGM' => 'Audio/BGM',
- 'BGS' => 'Audio/BGS',
- 'ME' => 'Audio/ME',
- 'SE' => 'Audio/SE',
- 'Animations' => 'Graphics/Animations',
- 'Autotiles' => 'Graphics/Autotiles',
- 'Battlebacks' => 'Graphics/Battlebacks',
- 'Battlers' => 'Graphics/Battlers',
- 'Characters' => 'Graphics/Characters',
- 'Fogs' => 'Graphics/Fogs',
- 'Gameovers' => 'Graphics/Gameovers',
- 'Icons' => 'Graphics/Icons',
- 'Panoramas' => 'Graphics/Panoramas',
- 'Pictures' => 'Graphics/Pictures',
- 'Tilesets' => 'Graphics/Tilesets',
- 'Titles' => 'Graphics/Titles',
- 'Transitions' => 'Graphics/Transitions',
- 'Windowskins' => 'Graphics/Windowskins'
- }
- base_data = ['Actors', 'Animations', 'Armors', 'Enemies', 'Items',
- 'Skills', 'Tilesets', 'Weapons']
- rgss_data = {
- 'menu_se' => 'SE',
- 'animation_name' => 'Animations',
- 'battler_name' => 'Battlers',
- 'battleback_name' => 'Battlebacks',
- 'character_name' => 'Characters',
- 'fog_name' => 'Fogs',
- 'icon_name' => 'Icons',
- 'panorama_name' => 'Panoramas',
- 'tileset_name' => 'Tilesets'
- }
- for fnbase in base_data
- rxdata = self.open_file(fnbase)
- for data in rxdata
- for data_key in rgss_data.keys
- begin
- data_value = eval('data.' + data_key)
- self.push_to_list(rgss_data[data_key], data_value)
- rescue
- end # begin
- end # for data_key
-
- # Animations.rxdata
- if fnbase == 'Animations'
- begin
- for timing in data.timings
- self.push_to_list('SE', timing.se)
- end # for timing
- rescue
- end # begin
- elsif fnbase == 'Tilesets'
- begin
- for autotile_name in data.autotile_names
- self.push_to_list('Autotiles', autotile_name)
- end # for timing
- rescue
- end # begin
- end
- end # for data
- end # for fnbase
-
- # System.rxdata
- rgss_data = {
- 'battleback_name' => 'Battlebacks',
- 'battler_name' => 'Battlers',
- 'windowskin_name' => 'Windowskins',
- 'gameover_name' => 'Gameovers',
- 'title_name' => 'Titles',
- 'battle_transition' => 'Transitions',
- 'title_bgm' => 'BGM',
- 'battle_bgm' => 'BGM',
- 'battle_end_me' => 'ME',
- 'gameover_me' => 'ME',
- 'cursor_se' => 'SE',
- 'decision_se' => 'SE',
- 'cancel_se' => 'SE',
- 'buzzer_se' => 'SE',
- 'equip_se' => 'SE',
- 'shop_se' => 'SE',
- 'save_se' => 'SE',
- 'load_se' => 'SE',
- 'battle_start_se' => 'SE',
- 'escape_se' => 'SE',
- 'actor_collapse_se' => 'SE',
- 'enemy_collapse_se' => 'SE'
- }
-
- rxdata = self.open_file('System')
-
- for data_key in rgss_data.keys
- begin
- data_value = eval('rxdata.' + data_key)
- self.push_to_list(rgss_data[data_key], data_value)
- rescue
- end # begin
- end # for data_key
-
- # CommonEvents.rxdata
- rxdata = self.open_file('CommonEvents')
-
- for data in rxdata
- begin
- self.dump_event_list(data.list)
- rescue
- end # begin
- end
-
- # Troops (events) data
- rxdata = self.open_file('Troops')
-
- for data in rxdata
- begin
- for page in data.pages
- self.dump_event_list(page.list)
- end # begin
- rescue
- end
- end
-
- # Map (events) data
- fldata = 'Data/MapInfos.rxdata'
- mapinfos = load_data(fldata)
- for mapinfo in mapinfos
- rxdata = self.open_file(sprintf('Map%03d', mapinfo[0]))
- begin
- self.push_to_list('BGM', rxdata.bgm)
- self.push_to_list('BGS', rxdata.bgs)
- rescue
- end # begin
- # Events
- for event in rxdata.events.values
- for page in event.pages
- begin
- self.push_to_list('Characters', page.graphic.character_name)
- self.dump_custom_move_list(page.move_route.list)
- self.dump_event_list(page.list)
- rescue
- end # begin
- end
- end
- end
-
- # Save
- @rgss_list.shift
- f = open('./dump_rgss.txt', 'w')
- begin
- for rgss in @rgss_list
- printf(f, '%s%s', rgss, "\n")
- end
- ensure
- f.close
- end
- p 'dump end'
- end
- def self.open_file(fndata)
- fldata = sprintf('Data/%s.rxdata', fndata)
-
- @rgss_list.push('')
- @rgss_list.push(sprintf('[%s]', fldata))
-
- return load_data(fldata)
- end
- def self.push_to_list(dir_key, value)
- # Audio/SE
- if value.is_a?(RPG::AudioFile)
- value = value.name
- end
-
- if value != ''
- flrgss = sprintf('%s/%s', @rgss_dir[dir_key], value)
- if File.exist?(RMXP+flrgss+".jpg")
- File.rename(RMXP+flrgss+".jpg",flrgss+".jpg")
- end
- if File.exist?(RMXP+flrgss+".bmp")
- File.rename(RMXP+flrgss+".bmp",flrgss+".bmp")
- end
- if File.exist?(RMXP+flrgss+".png")
- File.rename(RMXP+flrgss+".png",flrgss+".png")
- end
- if File.exist?(RMXP+flrgss+".wav")
- File.rename(RMXP+flrgss+".wav",flrgss+".wav")
- end
- if File.exist?(RMXP+flrgss+".mp3")
- File.rename(RMXP+flrgss+".mp3",flrgss+".mp3")
- end
- if File.exist?(RMXP+flrgss+".mid")
- File.rename(RMXP+flrgss+".mid",flrgss+".mid")
- end
- if File.exist?(RMXP+flrgss+".wma")
- File.rename(RMXP+flrgss+".wma",flrgss+".wma")
- end
- if File.exist?(RMXP+flrgss+".ogg")
- File.rename(RMXP+flrgss+".ogg",flrgss+".ogg")
- end
- #if @rgss_list.include?(flrgss)
- #flrgss = sprintf('>%s', flrgss)
- #end
- @rgss_list.push(flrgss)
- end
- end
- def self.dump_event_list(event_commands)
- for event_command in event_commands
- self.dump_event(event_command)
- end
- end
- def self.dump_event(event_command)
- parameters = event_command.parameters
- case event_command.code
- when 131
- self.push_to_list('Windowskins', parameters[0])
- when 132
- self.push_to_list('BGM', parameters[0])
- when 133
- self.push_to_list('ME', parameters[0])
- when 204
- case parameters[0]
- when 0
- self.push_to_list('Panoramas', parameters[1])
- when 1
- self.push_to_list('Fogs', parameters[1])
- when 2
- self.push_to_list('Battlebacks', parameters[1])
- end
- when 209
- dump_custom_move_list(parameters[1].list)
- when 222
- self.push_to_list('Transitions', parameters[0])
- when 231
- self.push_to_list('Pictures', parameters[1])
- when 241
- self.push_to_list('BGM', parameters[0])
- when 245
- self.push_to_list('BGS', parameters[0])
- when 249
- self.push_to_list('ME', parameters[0])
- when 250
- self.push_to_list('SE', parameters[0])
- when 322
- self.push_to_list('Characters', parameters[1])
- self.push_to_list('Battlers', parameters[3])
- end
- end
- def self.dump_custom_move_list(move_commands)
- for move_command in move_commands
- self.dump_custom_move(move_command)
- end
- end
- def self.dump_custom_move(move_command)
- parameters = move_command.parameters
- case move_command.code
- when 41
- self.push_to_list('Characters', parameters[0])
- when 44
- self.push_to_list('SE', parameters[0])
- end
- end
- end
- DumpRgss.dump
复制代码说明:不同脚本之间、尤其是不同作者脚本之间会有冲突,本站会对已知脚本冲突进行简单说明。测试新脚本请下载本站提供的测试文件或者新建工程测试。脚本不要贪多,否则可能会互相冲突对您的游戏造成未知的影响。如果脚本内或者本站内提供了解释,请务必完全看完解释后再使用 |
评分
-
查看全部评分
|