提取游戏《Limbus Company》(边狱公司)内素材

授人以鱼,不如授人以渔。

目录

注意事项

寻找音频文件

.bytes转为.fsb

必备工具

步骤

解决乱码

必备工具

步骤

提取.fsb文件

必备工具

可备工具

步骤


注意事项

文章关于出现乱码的处理方法和与编码相关的部分有误,已于2023/3/10更正。

相关工具会传到网盘。链接如下(如果没链接那就是过期还没更新/文章没更新)。

BGM:点击此处

解包工具合集(不包含uestdio,assetstdio):点击此处

网易云链接:点击此处

此文章主要是讲解如何提取游戏内的音频文件,所以默认各位会使用assetstdio,并且已经解包出了texture2D和sprite等文件夹下的图片素材。不会这一步的可以参考本人其他文章。

AssetStdio使用例

寻找音频文件

电脑用户直接load folder就行。(进入游戏后下载的文件在C盘的unity文件夹下(具体哪个路径忘了,顺着appdata/loacllow找准没错),游戏文件夹下的文件不全,两个文件夹加起来才是全部的游戏文件。如果你发现有哪个文件或者贴图找不到的话,记得两个文件夹都解包出来看一遍)

如果你是手机用户,也不用为了解包在电脑上再下一次游戏。可以把手机上的文件(路径搜projectmoon应该能搜到。可以只传游戏文件夹下的名字为_data的文件到电脑上)用数据线传到电脑上。由于手机上的_data文件都没有文件后缀,所以需要你自己一个个补上.asset后缀。(或者自己写个bat,详细可见此篇文章点击此处

补后缀只是图个直观易懂,不补也行。直接拖进assetstdio没影响。

以你游为例,音频文件类型均为TextAsset。用AssetsStdio的时候可以先预览,看看右边开头是不是RIFF,如果是的话那这就是你待会要处理的音频文件。

87229695f28e4d1b927375e5f355470d.png

.bytes转为.fsb

必备工具

UEStdio        支持十六进制转十进制计算器(网页版也可以,方便自己用就行。当然你自己写个也完全没问题)

步骤

会解决这个后面的就很简单了。

首先导出你要解包的文件(文件后缀应为.bytes),然后用UEStdio打开,如下图。

49a3782c61b04be99b286a4d6d3df805.png

 按ctrl+f搜索“fsb”,找到fsb第一次出现的位置,记住此时的地址。(图中为9900)

注:一般来说第一次出现fsb的位置应在某段开头,不是的话看看你是不是找错了。39d185b3b59a45818718428313212306.png

 然后你需要删除从开头RIFF一直到这段FSB之间的所有内容,通过十六进制计算器我们得到这个区间内一共有39168个字节。

为什么是十六进制而不是二进制八进制balabala?因为图中00009900h后面的这个h代表的就是十六进制(hex)。

714535c8c32946baa497df3913efd753.png

 0ce1ab9eb6e04eeaa09ade5db7678221.png

 重新回到并点击开头也就是RIFF那行,框里输入39168后回车,这样我们就删掉了从RIFF开始一直到fsb前一共39168字节的内容。

请确保此时FSB这三个字母在第一行的开头位置。

然后保存。再把文件后缀从.bytes改为.fsb即可。

多出来的.bak是改动即删掉RIFF那块结构前的备份文件,如果你不确定自己有没有搞错删错啥的可以先留着。

b876cf2a92ec43bc995dfa56505c4858.png

 f59a992e6850427880dbfcf5fa612ede.png

现在,你应该得到了一个后缀为.fsb的文件(或者还有一个.bak的备份文件)。那么这一步就算完成了。

解决乱码

附:注意,改这个会导致你电脑里同样是非Unicode编码的字符变成乱码,如果你电脑里文件名之类的包含的中文或者其他非英文字符多的话还是不要看这个步骤了。(主要是每次解包都要改设置重启有点麻烦)

当然想恢复也很简单,解包之后再把“使用Unicode UTF-8提供全球语言支持”这个选项去掉,每次解包前再把它勾上。详细请看下面的步骤。

你已经完成了最困难的一步,现在你所需的bgm都在.fsb文件中。但或许你在使用UEStdio的时候就已经发现了--那些乱码到底是三小玩意?

我试过FsbExtractor直接导出音频,可以得到.raw或.ogg。前者我试过用matlab的audioread函数得到音频样本和采样率,试过用github上的raw2wav直接转换,试过用linux虚拟机的sox直接播放音频,试过用audacity一个一个试采样率和解码格式得到样本,但无论是哪种方法最后都没法得到原曲;而后者更逆天,导出后直接无法播放甚至无法删除。无论是cmd输入rmdir还是直接shift+delete都没法删除,最后还是趁刚重启电脑还没反应过来才把它删了。

我试过用FMOD Stdio直接打开.fsb。我试过用GameExtractor直接导出.wav。我试过用UEStdio直接删去原文件名里的那些乱码,因为我怀疑是因为文件名乱码太多导致string数组越界才无法导出,而且这个问题我在vs里头就碰见过类似的(详细可见这篇文章)。

其实看到这里相信大家就应该已经意识到是哪出了问题,而且还很明确的知道该如何解决。而当我真正意识到这个问题是在看推特发现Mili要出新歌的时候。

看到Mil新歌“Between Two World"在3月5号发布,我就突然发现,自己平时老说什么”月计“”月计“。”月计“?ProjectMoon?诶,好像是个外国而且是个韩国公司来着?到这里我就意识到了问题--为什么会出现乱码?那当然是你的电脑不支持这些字符的编码,导致它无法正常显示才会变成乱码。那月计会把一堆名字混着乱码的文件打包进RIFF里吗?当然不可能。

个人推测,出现乱码是因为我们的编码和解码过程使用了不同的编码方式。大概率是因为你的电脑默认是gbk编码(cmd输入chcp查,如果是936那就是gbk中文编码),而gkb是不支持韩语的非汉字字符部分的,这导致你只能看到部分正常显示的韩文,而大部分都是以乱码的形式呈现。

其实当我发现解包出来的其他文件名也有韩文字符时,而且还混着一堆乱码时我就应该知道问题了,真正发现的时候真的想骂自己是真蠢。到这里大伙也知道问题该怎么解决了--直接改系统设置就完事了。

必备工具

FsbExtractor

步骤

先改系统设置,把非Unicode程序的语言改为韩语。

记得勾选“使用Unicode UTF-8....",重启后你的电脑就会从GBK编码转为UTF-8编码。如果发现打开cmd有乱码的话吧这个选项再去掉就行。

首选语言不知道有没有影响,因为我之前就有下过韩语的输入法,各位如果不放心的话也可以下一下。

5189384ca5f54ffa9e9866588abb7671.png

先不着急重启电脑。

这里以bgm.fsb作为例子。下载完fsbextractor后,自己创个快捷方式。方便后面的步骤。做完之后你的文件夹下应该是这个样子。

f56dbcf1653d485daef7bdec32b591f7.png

用FsbExtractor打开.fsb文件。

这里我没乱码的截图了,各位在电脑重启前这些文件名应该还是有乱码的。

记住现在文件名大概的情况,然后重启电脑。 

e5465d47e9664058838635385c3df8f2.png

再用fsbextractor打开.fsb文件,如果还是有乱码就过一会再重启(一般来说第一次重启后,文件名就已经能正常显示或者部分显示韩文了),一般重启1-3次文件名就没乱码了。

如果还是有乱码,那就去把系统里能改成韩语的都改成韩语,如下图。 

28ebc5412c7f4934b0a8964f60655df2.png

直到文件名全部都能正常显示,这一步就算大功告成了。

e5465d47e9664058838635385c3df8f2.png

提取.fsb文件

解决完乱码后,最困难的第二步就完成了。现在只需将.wav从.fsb中提取出来就大功告成了。

必备工具

fsb_aud_extr        fmod_extr

可备工具

quickbms

为什么有两个必备工具,这是因为有些.fsb只能被其中一个提取。我这里用的fsb_aud_extr,还没试过fmod_extr行不行。

quickbms在这里并不是必要的,当然你要用quickbms把.fsb都转为00000000.fsb也行。

双击quickbms后第一步是选择Script.bms(我不太记得有没有把这个文件放进压缩包里了...如果缺了说一声),第二步是选择你要处理的.fsb文件,第三步就是选择处理后得到的00000000.fsb文件的存放位置。

步骤

这步其实没啥了,先把.fsb拖到和fsb_aud_extr的同一个文件夹下。

shift+鼠标右键打开powershell,输入fsb后按tab自动补全,再输入.fsb的文件名(比如bgm_default.fsb或者00000000.fsb,只需要输入bgm或000,再按tab自动补全即可。前提是这个文件夹下没有同样关键字的文件)

da3bdf8a76624eb0b40d1cc5c6e937ec.png

fe1f3149b2054bc9a6a7b5fdaf3ecccb.png

此文到这就完结了,可喜可贺,可喜可贺。

 正于此地,愿您找到想要的书。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
RPGViewer图片资源提取工具 作者:Van 说明: 下载RPGViewer之后,不要忘记同时下载RPGViewerSupportFile。解压RPGViewer后,将RPGViewerSupportFile拷贝到解压之后的目录,然后选择“解压到当前文件夹”即可。 有需要的朋友可以做为研究之用 郑重声明 本程序提供的导入导出功能仅供个人学习研究之用,图像之版权属相关公司所有,请勿将提取的图片或导入修改后的图象文件用于其它用途 功能简介 一、浏览 执行文件菜单中的打开。如果你是第一次查看这个游戏,RPGViewer会弹出对话框让你选择游戏的路径,一般选择游戏主程序所在目录即可 之后就可以用浏览菜单或者浏览工具栏查看游戏中的图片了。 如果遇到不支持的图片格式或者读取图片时发生错误,RPGViewer会在状态栏显示相关的出错信息。 二、搜索 可以根据文件名查找图片。支持查找的游戏列表详见附录1 搜索支持模糊查找、区分大小写和正则表达式,正则表达式的具体定义参见附录3 三、导出(支持bmp、jpg、png和mng格式,mng格式的说明参见附录2。另外支持导出为三国群英传的SHP格式) RPGViewer提供三种导出功能: 1、当前帧 导出当前显示的图片 2、当前图片 当图片仅有一帧时,和导出“当前帧”相同。否则将导出该图片的所有帧。 3、所有图片 导出所有图片(!注意:如果图片有多帧,那么此功能会导出所有帧!) 注:有些导出图片的高度是负的,可能在某些图片浏览器中不能正常显示。建议使用Irfanview或PhotoShop进行查看和编辑 全部导出功能会将所有的图片导出到目标文件夹中,文件名依次为1-1.bmp,2-1.bmp... 四、导入(支持bmp、gif、jpg和png格式) 你可以导入bmp或者png(支持透明色和alpha通道)格式的图片(注:“导入”操作只是引入了一个替换的标记,此时并未进行实际的替换) 如果想取消对当前图片的替换可以使用“导入”菜单中的“还原” 全部图像都替换完之后,执行“导入”菜单中的“保存”,所作的替换就会生效 五、压缩包操作 可以提取游戏数据包中的所有文件,并支持部分游戏的文件替换。支持解包和替换的游戏列表详见附录1 附录1: 浏览和导出支持以下游戏: 大宇:轩辕剑系列(2代、3代、4代以及它们的外传)、轩辕伏魔录,仙剑1(DOS&WIN;版)、新仙剑、仙剑2、仙剑3和仙剑3外传 智冠:金庸群侠传(光盘&硬盘版)、武林群侠传、三国群侠传、天龙八部(部分) 奥汀:三国群英传1~6、幻世录1~2 宇峻:绝代双骄1~3、幻想三国志1、2 弘煜:风色幻想1、SP&2、3、4 光谱:富甲天下3、富甲天下4 汉堂:阿玛迪斯战记、天地劫-神魔至尊传、天地劫序传-幽城幻剑录、天地劫外章-寰神结 新瑞狮:吕布与貂蝉、反三国志、天河传说 目标:秦殇、秦殇前传-复活 金山:新剑侠情缘、月影传说、剑侠情缘2、地雷战、决战朝鲜 KOEI:三国志1~5(头像文件)、三国志6~11、SanInternet、SanBattleField、英杰传系列、 太阁4~5,信长之野望3Win版、信长之野望6(头像文件)、信长之野望7~12、 真三国无双3、 水浒传天命之誓&天导108星、成吉思汗4、王国兴亡录 TGL:神奇传说——远征奥德赛1&2、神奇传说1~3、战国美少女1&2 Falcom:伊苏1、伊苏2(部分图片调色板不对)、英雄传说6(部分)、失落的羽翼、圣界的奇迹、绯苍幻想曲 ego:圣魔大战、新圣魔大战、艾伦希亚战记、红泪、苍月、魔法少年、永远的羁绊、我的美丽天使、秘境传说、乱世奇缘 KEY:Kanon、AIR KID:梦之翼、Never7、Ever17、秋之回忆1~3、秋之回忆-想君 ELF:龙骑士4、同级生2(DOS&Win;版)、下级生 Illusion:欲望的血液4、尾行2、尾行3、BattleRaper2、人工少女2、波动少女1.5、波动少女2 SoftMax:西风狂诗曲 NWC:英雄无敌2、英雄无敌3 EIDOS:盟军敢死队-使命召唤&深入敌后 UBI:英雄无敌5测试版 其它:郑问之三国志 字体:三国志2~5、San9&10;(存为png格式可以保留alpha通道)、MagicWin 导入支持以下游戏: 三1~5头像,三6~10,三11的头像,英杰传系列,大航海4,信长7、8、11、12,成吉思汗4,王国兴亡录 地雷战 三国群英传1~3的PAK文件(仅限于其中的SHP格式)(注:未经严格测试,替换前请一定要备份,以避免不必要的损失) 部分支持信长12和三国志11的bin文件的导入 注: 曹操传的meff不支持导入 查找和解包支持以下游戏: 大宇:CPK(仙剑3和仙剑3外传) 奥汀:PAK(三国群英传1~3、幻世录1、幻世录2)、PCK(三国群英传4&5) 宇峻:*Combat.dat、*Man.dat、*Role.dat(幻想三国志1、2) 弘煜:BMP、FACE、MANBMP、MAPBMP(风色幻想1&SP;)、PAK(风色幻想2)、JBF(风色幻想3&4) 汉堂:DAT(幽城幻剑录、寰神结) TGL:PAC(神奇传说3、远征奥德赛1&2)、PAK(战国美少女2) Falcom:YS(伊苏1)、ED6_DT??.dat(英雄传说6) ego:DAT、TPF(乱世奇缘) KID:DAT ELF:ARC illusion:PP SoftMax:ZMK(西风狂诗曲) NWC:AGG(英雄无敌2)、LOD(英雄无敌3) EIDOS:DIR(盟军敢死队) UBI:PAK(英雄无敌5测试版) 替换支持以下游戏: 奥汀:PAK(三国群英传1~3) 附录2: mng导出格式简介 此格式对应多帧的PNG图片,效果类似于GIF动画,但支持RGB+alpha通道并且无损压缩。可以使用IrfanView、XnView查看,GIMP编辑(相关支持软件可以去http://www.libpng.com/pub/mng/mngapps.html查看) MNG IE插件:http://entropymine.com/jason/mng4ie/(可以到http://free.ys168.com/?pigspy下载,里面提供了注册文件reg.dat和卸载文件unreg.dat) 装了该插件之后可以直接用IE打开mng文件 注1、此导出格式仅适用于生成动画(具体包括:轩辕剑的tsw图片,绝代双骄2&3、幻想三国志1&2的战斗和法术图片,金山的ASF.PAK,西风狂诗曲的OBC文件) 注2、如果用这种格式保存帧数太多、图像范围太大的图片(比如全屏幕的法术),可能需要花较多的时间生成,同时生成的图片也可能会比较大) 注3、你可以使用相关工具进一步减少mng的尺寸(比如使用delta-PNG方式压缩) 注4、当提取当前帧时,会自动保存为png格式 附录3: 正则表达式 具体参见http://msdn2.microsoft.com/en-us/library/k3zs4axe(en-us,VS.80).aspx中的“Regular Expression Syntax” 一些正则表达式的例子: 严格匹配face:^face$ 模糊查找face:face 查找mFace???.shp的文件:mFace...\.shp$
<input type="text" id="searchInput" oninput="searchDatabase()" placeholder="武器"> <input type="text" id="1" placeholder="武器"> <input type="text" id="2" placeholder="武器"> <input type="text" id="3" placeholder="武器"> <div id="searchResult"></div> <script> // 您的数据列表 var arr_YXwuqi = [ ["亘古之守望", "凯旋骑士", "天堂之刃", "天堂之刃★", "弗鲁梅格之剑", "战场余晖", "星辰之剑", "红辰光巨剑", "红辰光巨剑★", "红长剑★", "通魔战刃", "鱼肠剑"], ["不朽巨人", "创世巨人", "屠戮角斗斧", "帝王战斧", "泣血巨人", "狂魔之斧", "皇族长柄斧", "红角斗士之斧★", "红雷矢巨斧", "红雷矢巨斧★", "裂狱", "黄昏"] ]; function searchDatabase() { // 获取输入框的值 var keyword = document.getElementById("searchInput").value; // 在数据列表中搜索匹配的数据 var searchResults = []; for (var i = 0; i < arr_YXwuqi.length; i++) { for (var j = 0; j < arr_YXwuqi[i].length; j++) { if (arr_YXwuqi[i][j].includes(keyword)) { searchResults.push(' ' + arr_YXwuqi[i][j]); } } } // 显示搜索结果 var searchResultElement = document.getElementById("searchResult"); if (searchResults.length > 0) { searchResultElement.innerHTML = "搜索结果:" + generateClickableResults(searchResults); } else { searchResultElement.innerHTML = "未找到匹配的数据"; } } function generateClickableResults(results) { var clickableResults = ""; for (var i = 0; i < results.length; i++) { clickableResults += "<span onclick='fillInput(\"" + results[i] + "\")'>" + results[i] + "</span>"; } return clickableResults; } function fillInput(value) { document.getElementById("searchInput").value = value; } </script>实现代码里的四个input输入框独立实现输入关键字,对数据列表搜索相关内容,并且点击结果可以直接传到input输入框中
07-25
要实现四个输入框独立实现输入关键字、搜索数据列表并将结果点击后传递到相应的输入框中,您可以进行以下修改: ```html <input type="text" id="searchInput" oninput="searchDatabase('searchInput')" placeholder="武器"> <input type="text" id="1" oninput="searchDatabase('1')" placeholder="武器"> <input type="text" id="2" oninput="searchDatabase('2')" placeholder="武器"> <input type="text" id="3" oninput="searchDatabase('3')" placeholder="武器"> <div id="searchResult"></div> <script> // 您的数据列表 var arr_YXwuqi = [ ["亘古之守望", "凯旋骑士", "天堂之刃", "天堂之刃★", "弗鲁梅格之剑", "战场余晖", "星辰之剑", "红辰光巨剑", "红辰光巨剑★", "红长剑★", "通魔战刃", "鱼肠剑"], ["不朽巨人", "创世巨人", "屠戮角斗斧", "帝王战斧", "泣血巨人", "狂魔之斧", "皇族长柄斧", "红角斗士之斧★", "红雷矢巨斧", "红雷矢巨斧★", "裂狱", "黄昏"] ]; function searchDatabase(inputId) { // 获取输入框的值 var keyword = document.getElementById(inputId).value; // 在数据列表中搜索匹配的数据 var searchResults = []; for (var i = 0; i < arr_YXwuqi.length; i++) { for (var j = 0; j < arr_YXwuqi[i].length; j++) { if (arr_YXwuqi[i][j].includes(keyword)) { searchResults.push(' ' + arr_YXwuqi[i][j]); } } } // 显示搜索结果 var searchResultElement = document.getElementById("searchResult"); if (searchResults.length > 0) { searchResultElement.innerHTML = "搜索结果:" + generateClickableResults(searchResults, inputId); } else { searchResultElement.innerHTML = "未找到匹配的数据"; } } function generateClickableResults(results, inputId) { var clickableResults = ""; for (var i = 0; i < results.length; i++) { clickableResults += "<span onclick='fillInput(\"" + results[i] + "\", \"" + inputId + "\")'>" + results[i] + "</span>"; } return clickableResults; } function fillInput(value, inputId) { document.getElementById(inputId).value = value; } </script> ``` 现在,每个输入框都可以独立地输入关键字并搜索数据列表。搜索结果将显示在 `searchResult` 元素中,并且可以通过点击结果将其传递到相应的输入框中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值