krkr基础教程9

 

打包游戏

该教程为水螅制作,未经允许,请勿转载

首先要说一下的是kr的文件读取顺序,手边有krkr的同学可以打开自己的system文件夹,在里边找到一个叫做Initialize.tjs的文件,用记事本打开它,然后往下拉往下拉可以看到这么几行(kag版本不同以下文字大概会有少许出入不过格式都是这样的……):

Storages.addAutoPath(System.exePath + "tools/") if debugWindowEnabled; // exePath 以下の tools/
Storages.addAutoPath(System.exePath + "video/"); // exePath 以下の video/
Storages.addAutoPath("data/"); // data フォルダ
Storages.addAutoPath("video/"); // video フォルダ
Storages.addAutoPath("others/"); // その他
Storages.addAutoPath("rule/"); // ルール画像フォルダ
Storages.addAutoPath("sound/"); // 効果音フォルダ
Storages.addAutoPath("bgm/"); // BGM フォルダ
Storages.addAutoPath("fgimage/"); // 前景画像フォルダ
Storages.addAutoPath("bgimage/"); // 背景画像フォルダ
Storages.addAutoPath("scenario/"); // シナリオフォルダ
Storages.addAutoPath("image/"); // そのほかの画像フォルダ
Storages.addAutoPath("system/"); // システムフォルダ
Storages.addAutoPath("voice/"); // ボイスフォルダ
Storages.addAutoPath("face/");?? // フェイスフォルダ
Storages.addAutoPath("init/");?? // 初期化用フォルダ
Storages.addAutoPath("sysscn/"); // システム用シナリオ
Storages.addAutoPath("main/"); // システム用シナリオ
Storages.addAutoPath("evimage/");
Storages.addAutoPath("thum/");
Storages.addAutoPath("uipsd/");

// パッチアーカイブの検索と使用
// もしこれらの名前を持ったアーカイブが実行可能ファイルと
// 同じ場所にあった場合、それを優先して使う
useArchiveIfExists("video.xp3");
useArchiveIfExists("others.xp3");
useArchiveIfExists("rule.xp3");
useArchiveIfExists("sound.xp3");
useArchiveIfExists("bgm.xp3");
useArchiveIfExists("fgimage.xp3");
useArchiveIfExists("bgimage.xp3");
useArchiveIfExists("scenario.xp3");
useArchiveIfExists("image.xp3");
useArchiveIfExists("system.xp3");
useArchiveIfExists("voice.xp3");
useArchiveIfExists("face.xp3");
useArchiveIfExists("init.xp3");
useArchiveIfExists("sysscn.xp3");
useArchiveIfExists("main.xp3");
useArchiveIfExists("evimage.xp3");
useArchiveIfExists("thum.xp3");
useArchiveIfExists("uipsd.xp3");

这个东西,就是krkr运行时会自动去读取的文件,越靠下的名字就越优先读取,xp3比文件夹优先,patch.xp3比其他xp3优先(patch.xp3的添加在更下边几行我没复制上来)

如果你要krkr读取自己指定名字的文件夹或者xp3里的文件,那就是在这里修改。

当然大部分人都像我一样是懒得改它的……就算对这个文件一无所知也不妨碍进行游戏打包,我之所以要讲一下这个的原因是经常有人给自己的xp3取了奇奇怪怪的名字之后问我为啥不能读取……答案就是想要读取你得在这部分手动添上那名字才行。

然后开始打包的正式流程:

首先你有个游戏工程文件夹,就当作他的名字是game吧,这个文件夹请尽量放在路径中没有中文没有空格没有其他特殊字符的位置,如果你用的是中文版krkrrel打包kagexpress的话一般路径中有中文也没啥,其他版本的话请务必注意这点……

game文件夹里应该包含的有:

1.krkr.exe(可能你已经将它改名为其他名字了,不过这不妨碍,你知道是它就行了)

2.游戏资料文件夹们,一般来说大家默认建立工程的话就是一个data文件夹,不过当然也有人喜欢用多个文件夹,总之只要是Initialize.tjs里添加过的文件夹就都可以。如果最后你要打包的是xp3格式的话,这里的每个文件夹都需要单独打包成一个xp3文件,当然那个名字也是需要在Initialize.tjs里边添加过的

3.你自己测试运行游戏时生成的savedata文件夹,那个也可能没有,总之不用管它

4.tools文件夹,里边包含的一定要有的是打包工具krkrrel.exe和krdevui.dll,如果你不打算打包成exe格式而是要打包成xp3格式的话,这个文件夹不放在game文件夹里边而是随便放在别的什么地方也没关系

下边开始打包,首先要确定的是,没打包之前,你双击你的exe游戏是可以正常运行的(废话)

然后打开krkrrel.exe,它会弹出让你选择文件夹的对话框,选择你要打包的文件夹,注意是上边的第二项包含的那些文件夹而不是game文件夹。如果你有多个文件夹需要打包,先选择其中的一个,之后你需要把他们每个都依次打包一遍

接下来你会看到这个界面,如果用的是日版的krkrrel看到的就是日文界面,不过内容都一样(废话)

p3
如果你的tools文件夹里有加密插件xp3enc.dll的话就会看到最下边这个选项,如果没有的话最下边那个选项就不可见。

xp3enc.dll需要自己编译,算法可以随自己爱好来写(写完记得用个小游戏先测试……我就写过会导致音乐全部放不出来的失败品|||||||||),网上也有提供写好的下载,在日站看到过,在kcddp论坛也看到过,不过使用公开的插件当然安全性也比较低一点……

因为有人问到加密插件怎么写,所以就把这个帖子的链接放上来,已经讲的很清楚了我就不多说啥了……http://kcddp.keyfc.net/bbs/viewthread.php?tid=454&extra=page%3D4

回到打包,上边那界面选项就按默认的就可以了,然后可以点旁边那一页“文件”,比较简单我就不截图了,那一页就是选择哪些文件类型被打包哪些被压缩哪些不被打包的,这个随个人爱好选择就可以,不想费神就用默认即可,当然不管怎么懒都还是要确认下自己游戏运行需要的文件是否被放在打包里的……

然后是输出页

p1

“xp3形式文件包”是指把你现在选择的文件夹生成一个xp3文件,这样最后给玩家的可运行游戏就是krkr.exe和包含游戏资料的一个或数个xp3文件。比如总是使用默认的我最后完成品就是krkr.exe和一个data.xp3

“exe形式可执行文件”是指把你现在选择的文件夹和你的krkr.exe合并为一个exe文件,这样给玩家的就是一个单独的exe文件,没有其他文件就可以运行

输出文件那里一定要填上完整路径+要输出的文件名(包含后缀),然后点生成就可以了。

如果点了‘exe可执行文件’,那么会多出这么一页:

p2
这里可以设定打包成exe格式时游戏exe的各种参数,里边那个‘只从xp3文件包读取’在这种情况下是无用的,不要点,因为你现在的模式是生成exe模式……

如果使用xp3格式的话,修改exe参数是用tools文件夹里的krkrconf.exe,那个和这个页面长得一样,我就不截图了……(‘只从xp3文件包读取’是在这种情况下才有作用的)

总之屏蔽控制台,换图标等等对exe的设定都是在这里

如果你选择的是打包成exe格式的话,那么点完生成后就会生成一个exe文件,双击那个文件就可以运行游戏了——就是说你可以直接发布了

如果你选择的是打包成xp3格式,那么把你的游戏资料文件夹全部分别打包成xp3文件然后把那些xp3文件和krkr.exe放在一起,双击krkr.exe就可以运行了——此时就可以发布了。

如果使用的xp3格式,需要特别注意的是,startup.tjs这个文件如果没放在data.xp3里,就需要单独放在exe旁边,把它放在了其他名字的xp3里krkr是找不到的,因为我在第一篇教程里就说过了,kag执行文件的顺序是startup.tjs->Initialize.tjs,就是说Initialize.tjs里边添加的路径在寻找startup.tjs和Initialize.tjs的时候还没有被添加上,Initialize.tjs的位置可以通过在startup.tjs里修改它的载入路径来改变,所以最重要的就是startup.tjs必须要放在内核默认会寻找文件的地方。

如果按照上边这样放好后双击exe文件发现不能运行,请从头检查

1。未打包时游戏可否正常运行

2。打包生成的文件名是否是容许的文件名

3。打开krkrrel时选择的文件夹是否选错了

4。startup.tjs被放在哪里了

最后要说的是使用加密插件的事情……

如果选择使用加密插件,krkrrel在打包xp3文件时会用xp3enc.dll将文件加密,这样打包好的游戏,你需要在游戏文件夹中放入解密插件,通常是tpm后缀的文件,名字倒是没啥限制,一般都叫xp3dec.tpm,krkr内核默认在开始运行时先寻找exe旁边有没有后缀tpm的文件,如果有就有先读取它,这样再读其他文件就可以对他们解码了,如果你用加密插件打了包但是没有在exe旁边放上对应的tpm解密插件,那么krkr也会无法读懂你的文件的……

注意,xp3enc.dll和xp3dec.tpm的内容必须是对应的……一把钥匙一把锁一个萝卜一个坑(喂)……总之就是这个意思,缺了任何一方或者对应不正确都是不行的……

但是……现在针对krkr的解密工具也很方便……如果你把tpm就那么放在外边,针对krkr的解密工具能够直接读取它来解密……之前大家一般会用别的软件比如molebox把tpm和exe捆在一起来一定程度防止拆包,但是xp3的解包程序也是不断升级的,现在我一般采用重编译krkrexe来一定程度上防止拆包,但是对于没什么c++基础的人来说比较难,就不在这里详细介绍了。

因为有人提到了于是我在这里强调一下,molebox是一个封包用的软件,不是krkr自带的工具……去哪里找请问度娘……

另外值得注意的是,如果在krkrconf.exe里选择了关闭控制台,但是又用molebox打包了一遍exe,那么控制台就又会开启|||||||

针对这个问题米粒子做了去debug版的exe来用以打包,下载地址如下:

http://kcddp.keyfc.net/bbs/viewthread.php?tid=1316&extra=page%3D1&frombbs=1

突然想起来还有打补丁的部分没有说,虽然这部分不说也没啥,不过为了整个教程的完整性我还是稍微说一下吧……

如我上边所说的,越在后边添加的文件读取路径,kr就会越优先读取,所谓优先读取的意思是如果你写了一句‘image storage='image1'’,kr执行到这里就会开始在所有的文件读取路径中寻找这个叫做image1的文件,他先从优先度高的地方寻找,找到了就停止找了,所以如果有两个同名文件在不同文件夹存在,那么优先度高的文件夹里的那个文件才会被使用,另一个就永远不会被使用了。

而在Initialize.tjs添加文件读取路径的最后,它是这么写的(我给加上中文注释吧):

useArchiveIfExists("patch.xp3");
//添加patch.xp3

for(var i = 2; ; i++)
{
if(Storages.isExistentStorage(System.exePath + "patch" + i + ".xp3"))
?? Storages.addAutoPath(System.exePath + "patch" + i + ".xp3>");
else
?? break; 
}
//检索patch2.xp3存在不存在,如果存在则添加为文件搜索的路径,如果2存在则添加后顺序检索3,如果2不存在则停止检索,以后数字皆如此

以上代码说明了4个要点

1.patch.xp3比其他路径的优先度要高,patch数字.xp3如果存在则比patch.xp3的优先度要高

2.patch数字.xp3后边的数字越大优先度越高

3.patch1.xp3是不被检索也就是不能作为补丁使用的

4.如果patch数字.xp3后边的数字不是连续的而是中断的,比如2,3,4,6,7,8,那么中断后的数字的文件(在例子里就是patch6.xp3、patch7.xp3、patch8.xp3)就不会被添加进路径,即无法作为补丁

补丁的打包方式和游戏普通xp3文件包的打包方式是一样的,就只是把修改后的新版本文件单独放在一个文件夹里然后打包成名为patch.xp3的文件包而已,普通xp3用了加密插件的话补丁也要用。



TOP

访客数: 3128241
aa