天命之子Live2D提取 - 2021重制版

@Pelom  November 30, 2021

前言

前几天想用加速器玩外服某游戏时,发现该游戏居然锁区了
本着不白下加速器的精神,就下了天命之子看看又出了什么新的live2d
等游戏加载好后才发现Kakao与天命之子已经停止合作了,而且账号换绑的时间已经过了,于是我的账号就这么没了(虽然也没怎么玩)
于是我一气之下开始拆包,发现资源文件的打包方式发生了改变,原来的方法已经行不通了
一番搜索之后,在巴哈姆特找到了拆包程序

预先准备

  • Destiny Child PCK Manager

步骤

  1. 打开手机或模拟器,live2d文件位于Android/data/com.NextFloor.DestinyChild/files/asset/character,角色文件为以c开头,以.pck为后缀名。全选此类文件(使用搜索功能或手动选取)并移动至电脑。
  2. 将所有文件拖到Destiny Child PCK Manager里的PCK.exe上,等待程序运行结束(因为文件数较多,建议分几次提取)。
  3. 提取出来的文件命名没有意义,其中.dat文件即为live2d文件的model.json文件,直接修改后缀名即可打开。按照其中的描述整理其他文件(各类型按文件名中的数字顺序处理即可)。写了个python批量处理

    import os
    import json
    
    if __name__ == '__main__':
        dirList = os.listdir('DC/')
        for dir in dirList:
            pre = 'DC/' + dir + '/'
            try:
                os.remove(pre + '_header')
            except(FileNotFoundError):
                pass
            fileList = os.listdir(pre)
            for file in fileList:
                if file.split('.')[-1] == 'dat':
                    os.rename(pre + file, pre + 'model.json')
                    break
            if not os.path.exists(pre + 'model.json'):
                continue
            with open(pre + 'model.json', "r", encoding="utf-8") as f:
                modelJson = json.load(f)
                modelJson['model'] = 'model.moc'
            with open(pre + 'model.json', "w", encoding="utf-8") as f:
                json.dump(modelJson, f, indent=4, separators=(',', ':'))
            expCnt = 0
            pngCnt = 0
            mtnIt = iter(modelJson['motions'])
            for file in fileList:
                if file == 'model.json':
                    continue
                suc = file.split('.')[-1]
                if suc == 'moc':
                    os.rename(pre + file, pre + 'model.moc')
                elif suc == 'txt':
                    os.rename(pre + file, pre + modelJson['motions'][next(mtnIt)]   [0]['file'])
                elif suc == 'exp':
                    a = modelJson['expressions'][expCnt]['file']
                    os.rename(pre + file, pre + modelJson['expressions'][expCnt]    ['file'])
                    expCnt = expCnt + 1
                elif suc == 'png':
                    os.rename(pre + file, pre + 'texture_0' + str(pngCnt) + '.  png')
                    pngCnt = pngCnt + 1
            print("完成%s" % (dir))
        input("全部完成!")
  4. 顺手写了个网页来展示:天命之子Live2D图鉴
    不过因为是挂在github上的,而且图片占比比较多,因此可能比较慢

下载


添加新评论

  1. X2

    学习了

    Reply
  2. 专门感谢

    专程感谢博主!满足了我两年的心愿!!!

    Reply
  3. 小白

    大佬大佬,怎么用live2dviewrEx看呀

    Reply
  4. 感谢&疑问

    请问大佬,您在GitHub上做的天命之子图鉴网页下载后能离线本地运行吗,如果可以具体要如何操作呢?纠结一天了。求大佬解惑,小白谢过

    Reply
    1. @感谢&疑问

      能够
      在本地查看会触及浏览器的同源策略,导致无法读取文件,解决方法是在本地搭建服务器
      一个简单的方案是,在vscode中安装Live Server插件,相关使用方法在网上有很多

      Reply
      1. 感谢&疑问
        @Pelom

        非常感谢!

        Reply
  5. 无名

    大佬能发一下live2d资源到百度网盘吗

    Reply
  6. 无名

    手机弄不了,没电脑

    Reply
  7. cocomoo

    收藏下载,真棒! 感谢了!!

    Reply
  8. 信平

    您好,请问NikkeSpine应该如何部署?我尝试clone到本地服务器运行,打开的网页没有模型

    Reply
  9. yana

    请问为何在网页中看的动作很流畅,但放入l2dviewer中重复动作之间却有明显的卡顿?

    Reply