Ejemplo n.º 1
0
    def do_physics(self, OldPhysicsUser):
        if not self.physics: return ''
        #file = f'{get_def_path()}\\Actor\\Pack\\{self.physics}.sbactorpack'
        file = get_file_path(f'Actor\\Pack\\{self.physics}.sbactorpack')
        if os.path.exists(file):
            data = Sarc_file(file)
        else:
            print(f'Cant find base actor {file}')
            return ''

        #Removing old physics files from actorpack
        to_rem = []
        for file in self.data.data_writer.files:
            if 'Physics/' in file and not '.bphysics' in file:
                to_rem.append(file)
        for file in to_rem:
            del self.data.data_writer.files[file]

        PhysicsUser = ''
        for file in data.data_writer.files:
            if '.bphysics' in file and 'Actor/Physics/' in file:
                PhysicsUser = os.path.basename(file).split('.')[0]
                pio = get_raw_data(data.data_sarc, file)
                old_name = f'Actor/Physics/{OldPhysicsUser}.bphysics'
                new_name = f'Actor/Physics/{PhysicsUser}.bphysics'
                update_sarc(pio, self.data, old_name, new_name)
            elif 'Physics/' in file and not '.bphysics' in file:
                self.data.data_writer.files[file] = data.data_sarc.get_file(
                    file).data.tobytes()
        return PhysicsUser
Ejemplo n.º 2
0
    def get_recipe(self):
        template = 'Weapon_Shield_038'
        recipe = f'{self.name}.brecipe'
        path = f'cache\\{template}.sbactorpack'
        if not os.path.exists(path):
            #copyfile(f'{get_def_path()}\\Actor\\Pack\\{template}.sbactorpack', path)
            copyfile(get_file_path(f'Actor\\Pack\\{template}.sbactorpack'),
                     path)

        data = Sarc_file(path)
        pio = get_raw_data(data.data_sarc, f'Actor/Recipe/{template}.brecipe')

        if self.item1 and self.item1_n:
            pio.objects['Normal0'].params[
                'ItemName01'] = oead.FixedSafeString64(self.item1)
            pio.objects['Normal0'].params['ItemNum01'] = int(self.item1_n)
        if self.item1 and self.item1_n and self.item2 and self.item2_n:
            pio.objects['Normal0'].params[
                'ItemName02'] = oead.FixedSafeString64(self.item2)
            pio.objects['Normal0'].params['ItemNum02'] = int(self.item2_n)
        else:
            pio.objects['Normal0'].params['ItemNum02'] = 1
        if self.item1 and self.item1_n and self.item2 and self.item2_n and self.item3 and self.item3_n:
            pio.objects['Normal0'].params[
                'ItemName03'] = oead.FixedSafeString64(self.item3)
            pio.objects['Normal0'].params['ItemNum03'] = int(self.item3_n)
        else:
            pio.objects['Normal0'].params[
                'ItemName03'] = oead.FixedSafeString64('Item_Enemy_00')

        self.data.data_writer.files[
            f'Actor/Recipe/{recipe}'] = oead.aamp.ParameterIO.to_binary(pio)
 def get_actorpack_data(self):
     #file = f'{get_def_path()}\\Actor\\Pack\\{self.base}.sbactorpack'
     file = get_file_path(f'Actor\\Pack\\{self.base}.sbactorpack')
     if os.path.exists(file):
         return Sarc_file(file)
     else:
         print(f'Cant find base actor {file}')
         sys.exit()
Ejemplo n.º 4
0
    def do_anims(self):
        if 'Weapon_Lsword_' in self.name:
            template = 'Weapon_Lsword_019'
        else:
            template = 'Weapon_Sword_019'

        path = f'cache\\{template}.sbactorpack'
        if not os.path.exists(path):
            #copyfile(f'{get_def_path()}\\Actor\\Pack\\{template}.sbactorpack', path)
            copyfile(get_file_path(f'Actor\\Pack\\{template}.sbactorpack'),
                     path)

        data = Sarc_file(path)
        for file in self.data.data_writer.files:
            if '.baiprog' in file or '.baslist' in file or '.bas' in file:
                del self.data.data_writer.files[file]
        new_AI = ''
        new_name_baslist = ''
        for file in data.data_writer.files:
            if '.baiprog' in file:
                new_AI = get_internal_name('.baiprog', data)
                pio = get_raw_data(data.data_sarc, new_AI)
                self.data.data_writer.files[
                    new_AI] = oead.aamp.ParameterIO.to_binary(pio)
            elif '.baslist' in file:
                new_name_baslist = file.replace(template, self.name)
                pio = get_raw_data(data.data_sarc, file)
                raw_text = pio.to_text()
                raw_text = raw_text.replace(template, self.name)
                pio = oead.aamp.ParameterIO.from_text(raw_text)
                self.data.data_writer.files[
                    new_name_baslist] = oead.aamp.ParameterIO.to_binary(pio)
            elif '.bas' in file:
                new_name = file.replace(template, self.name)
                pio = get_raw_data(data.data_sarc, file)
                self.data.data_writer.files[
                    new_name] = oead.aamp.ParameterIO.to_binary(pio)
        #duplicate_bfres(f'{get_def_path()}\\Model\\{template}_Animation.sbfres', f'{self.pack_name}\\content\\Model\\{self.name}_Animation.sbfres', template, self.name)
        duplicate_bfres(
            get_file_path(f'Model\\{template}_Animation.sbfres'),
            f'{self.pack_name}\\content\\Model\\{self.name}_Animation.sbfres',
            template, self.name)
        return os.path.basename(new_AI).split('.')[0], os.path.basename(
            new_name_baslist).split('.')[0]
 def __init__(self, pack_name, shop, items):
     self.items = items
     self.shop = shop
     self.pack_name = pack_name
     self.data = Sarc_file(self.init_oven())
     self.bshop = self.do_actorlink()
Ejemplo n.º 6
0
    def do_korok_mask(self):
        if not 'Head' in self.name: return
        template = 'Armor_176_Head'
        path = f'cache\\{template}.sbactorpack'
        if not os.path.exists(path):
            #copyfile(f'{get_def_path()}\\Actor\\Pack\\{template}.sbactorpack', path)
            copyfile(get_file_path(f'Actor\\Pack\\{template}.sbactorpack'),
                     path)

        data = Sarc_file(path)
        if 'Actor/AS/Head_Common_ColorChange.bas' in self.data.data_writer.files:
            ColorChange = True
        else:
            ColorChange = False
        #removing misc files
        if 'Actor/ASList/Head_ColorChangeOnly.baslist' in self.data.data_writer.files:
            del self.data.data_writer.files[
                'Actor/ASList/Head_ColorChangeOnly.baslist']
        for file in self.data.data_writer.files:
            if file == 'Actor/AS/Head_Common_ColorChange.bas': continue
            if '.bas' in file:
                del self.data.data_writer.files[file]
            if '.baiprog' in file or '.baslist' in file:
                del self.data.data_writer.files[file]

        for file in data.data_writer.files:
            if '.baiprog' in file:
                pio = get_raw_data(data.data_sarc,
                                   'Actor/AIProgram/Armor_Korok_Head.baiprog')
                self.data.data_writer.files[
                    'Actor/AIProgram/Armor_Korok_Head.baiprog'] = oead.aamp.ParameterIO.to_binary(
                        pio)

            elif '.baslist' in file:
                new_name = file.replace(template, self.name)
                pio = get_raw_data(data.data_sarc, file)
                if ColorChange:
                    pio.lists['ASDefines'].objects[
                        'ASDefine_2'] = copy.deepcopy(
                            pio.lists['ASDefines'].objects['ASDefine_0'])
                    pio.lists['ASDefines'].objects['ASDefine_2'].params[
                        'Name'] = oead.FixedSafeString64('ColorChange')
                    pio.lists['ASDefines'].objects['ASDefine_2'].params[
                        'Filename'] = oead.FixedSafeString64(
                            'Head_Common_ColorChange')
                raw_text = pio.to_text()
                raw_text = raw_text.replace(template, self.name)
                pio = oead.aamp.ParameterIO.from_text(raw_text)
                self.data.data_writer.files[
                    new_name] = oead.aamp.ParameterIO.to_binary(pio)

            elif '.bas' in file:
                new_name = file.replace(template, self.name)
                pio = get_raw_data(data.data_sarc, file)
                raw_text = pio.to_text()
                raw_text = raw_text.replace(template, self.name)
                pio = oead.aamp.ParameterIO.from_text(raw_text)
                self.data.data_writer.files[
                    new_name] = oead.aamp.ParameterIO.to_binary(pio)
        #duplicate_bfres(f'{get_def_path()}\\Model\\{template}_Animation.sbfres', f'{self.pack_name}\\content\\Model\\{self.name}_Animation.sbfres', template, self.name)
        duplicate_bfres(
            get_file_path(f'Model\\{template}_Animation.sbfres'),
            f'{self.pack_name}\\content\\Model\\{self.name}_Animation.sbfres',
            template, self.name)