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
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()
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()
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)