欢迎光临散文网 会员登陆 & 注册

Switch平台的Arcaea打包与解包(Python)

2023-03-16 22:11 作者:Zaid_J  | 我要投稿


解包(Unpack)


#Arcaea Switch unpacker

#将py文件,arc.pack,arc.json放于同一文件夹中,运行py文件即可生成pack文件夹。

#有bug务必联系我!

import json

import os


JSON=open("arc.json")

JSON=json.load(JSON)

JSON=JSON["Groups"]

PACK=open("arc.pack","rb")


for group in JSON:

    if not os.path.exists("pack/"+group["Name"]):

        os.makedirs("pack/"+group["Name"])


    for entry in group["OrderedEntries"]:

        offset = entry["Offset"]

        length = entry["Length"]

        originalfilename = entry["OriginalFilename"]

        PACK.seek(offset,0)

        data=PACK.read(length)

        PATH="pack/"+group["Name"]+"/"+originalfilename

        if not os.path.exists(os.path.dirname(PATH)):

            os.makedirs(os.path.dirname(PATH))

        output=open(PATH,"wb")

        output.write(data)

        print(PATH)


打包(Pack)

#Arcaea Switch packer

#将py文件与pack文件夹放于同一文件夹中,运行py文件即可生成arc.pack和arc.json。

#有bug务必联系我!

import os

import json

GLOBAL_OFFSET=0

Groups=[]

Dir=["startup","audio_init","buttons","mainmenu","topbar","base_shutters","jackets_large","jackets_small","packs","charts","songselect_bgs","character_sprites","not_large_png","not_large_jpg","not_audio_or_images","audio_wav","not_audio","Fallback"]


def hex_align(data,GLOBAL_OFFSET):

    data = bytearray(data)

    while len(data) % 16 != 0:

        data.append(0)

        GLOBAL_OFFSET+=1

    data = bytes(data)

    return data,GLOBAL_OFFSET


output_pack = open("arc.pack","wb+")


for i in Dir:

    if i not in os.listdir("pack"):

        os.mkdir("pack/"+i)


for d in os.listdir("pack"):

    group={}

    OrderedEntries = []

    group["Name"] = d

    group["Offset"] = GLOBAL_OFFSET


    for root,dirs,files in os.walk("pack/"+d):

        for f in files:

           entry={}

           PATH=os.path.join(root,f)

           file = open(PATH,"rb")

           data = file.read()

           entry["OriginalFilename"] = PATH.lstrip("pack/").lstrip(d).lstrip("/")

           entry["Offset"] = GLOBAL_OFFSET

           entry["Length"] = len(data)

           GLOBAL_OFFSET+=len(data)

           OrderedEntries.append(entry)

           data,GLOBAL_OFFSET=hex_align(data,GLOBAL_OFFSET)

           output_pack.write(data)

           print(PATH)


    group["Length"]=GLOBAL_OFFSET-group["Offset"]

    group["OrderedEntries"]=OrderedEntries

    Groups.append(group)


JSON={}

JSON["Groups"]=Groups

with open("arc.json","w",newline="\n") as output_json:

    output_json.write(json.dumps(JSON,indent=1))

    print("COMPLETE!")



Switch平台的Arcaea打包与解包(Python)的评论 (共 条)

分享到微博请遵守国家法律