关于尘白禁区的spine动画还原

我提取了尘白禁区的所有spine文件。由于是ue4封装,spine的图集和动画文件被打包成.uexp文件。我使用emeditor打开此文件可以看到相应内容



可以看出其中spine动画文件的导出格式为json。
我尝试将内容拷贝出来,建立.atlas和json文件 试图还原spine动画。但没有成功。
有人知道应该如何将其中的内容提取还原吗?

sp_girl001.rar (2.2 MB)
我将提取出的文件打包上传在这里。希望有人可以尝试还原一下。

直接拆分出来拼就好了。。。。

1 个赞

我后面试了几次 也还原了。 可能最开始时复制内容时,文本编码不对导致的一直不成功。

写个脚本去拆分就好,手动雀氏容易出错

佬,能讲一下是怎么解包的吗

大佬 能讲一下怎么解包的吗 想提取一些立绘

用quickbms 然后用游戏对应的bms脚本。

Luigi Auriemma 你可以在这里下载quickbms工具

脚本我上传在这里。
unreal_tournament_4_0.4.27e_snowbreak.rar (3.0 KB)

使用脚本的时候需要解密的key 0xC14735FB5A872D2AFA76A5C38521AB8B8E21072C08525B913307608BD1182FA7

在这里下载umodel

下载umodel_acl_2.1,将它放在umodel同文件夹中运行
umodel_acl_2.1.rar (680.1 KB)

最后用这个工具提取图片、模型、以及动画

image
地址填写bms提取的资源地址。在工具里将UE版本设置为4.26 打开后 找到对应文件右键提取即可。

如果你会一些简单的3D。你会得到一个电子手办 XD

2 个赞

谢谢朋友,你和少姜佬一样,都是热心的大好人

发一发写的.uexp提取.atlas和.json的脚本,本来不想发的。然后一看.uexp的格式,啊,真的操蛋。提出来之后有几个json有小问题,懒得修了,直接手动修正。

import path from 'path'
import fs from "fs"

function scanDirectory(directory) {
    fs.readdirSync(directory).forEach(file => {
        const absolute = path.join(directory, file);
        if (fs.statSync(absolute).isDirectory()) {
            if (path.basename(absolute) !== 'Textures') {
                return scanDirectory(absolute);
            }
        } else if (path.extname(absolute) === '.uexp') {
            processUexpFile(absolute);
        }
    });
}

function processUexpFile(filePath) {
    const originalData = fs.readFileSync(filePath);
    let readPtr = 0, writePtr = 0;
    while (readPtr < originalData.length) {
        if (originalData[readPtr] !== 0x00) {
            originalData[writePtr++] = originalData[readPtr];
        }
        readPtr++;
    }
    let data = originalData.slice(0, writePtr);
    // console.log(dataString_temp);
    // dataString_temp.length = index
    // data = Buffer.from(dataString_temp, 'hex');
    // console.log(data);
    let dataStr = data.toString('utf8');

    let startAtlas = dataStr.search(/\n[a-zA-Z_]/);
    if (startAtlas !== -1) {
        startAtlas++; // Adjust to point to the character after '\n'
    }
    // console.log(startAtlas);
    const endAtlas = data.lastIndexOf(Buffer.from([0x69, 0x6E, 0x64, 0x65, 0x78, 0x3A, 0x20, 0x2D, 0x31])) + 10;
    dataStr = dataStr.slice(endAtlas)
    // const startJson = data.indexOf(Buffer.from([0x7B]), endAtlas);
    let startJson = dataStr.search(/(\{\n)|(\{\")/) + endAtlas
    if(startJson <= endAtlas) {
        startJson = data.indexOf(Buffer.from([0x7B]), endAtlas);
    }
    console.log(startJson);
    const endJson = data.lastIndexOf(Buffer.from([0x7D])) + 1;

    if (startAtlas < endAtlas && startJson < endJson) {
        const atlasData = data.slice(startAtlas, endAtlas);
        const jsonData = data.slice(startJson, endJson);
        
        const baseName = path.basename(filePath, path.extname(filePath));
        const dirName = path.dirname(filePath);

        fs.writeFileSync(path.join(dirName, baseName + '.atlas'), atlasData);
        fs.writeFileSync(path.join(dirName, baseName + '.json'), jsonData);
        console.log(path.join(dirName, baseName + '.atlas') + " 已保存");
        console.log(path.join(dirName, baseName + '.json') + " 已保存");
    }
}

// Replace '<your-directory>' with your directory path
scanDirectory('D:\\demo\\PUBG Dump');
1 个赞

谢谢muyi,muyi也是大好人~

1 个赞

请问下大佬解包游戏版本是多少?是不是最新版本的用不了?

是1.7最新版的

1 个赞

请问一下大佬,在使用bms后再用umod提取仍然会出现错误,这是怎么回事呢?

我找到了问题,原来是我没用管理员权限运行程序 :joy:

代码小白问下,这个脚本该怎么用呢?

gbt可以回答这个问题,也许你可以尝试下gbt。它是个很不错的工具

gpt是什么?去哪里下载?

大佬,提取为psk并导入blender后,眼睛部分我导入贴图后仍然未显示贴图,如何解决?