def do_bfres(self): #path = f'{get_def_path()}\\Model\\' if get_endianness(): #files = [f'{path}{self.base}.sbfres', f'{path}{self.base}.Tex1.sbfres', f'{path}{self.base}.Tex2.sbfres'] files = [ get_file_path(f'Model\\{self.base}.sbfres'), get_file_path(f'Model\\{self.base}.Tex1.sbfres'), get_file_path(f'Model\\{self.base}.Tex2.sbfres') ] else: #files = [f'{path}{self.base}.sbfres', f'{path}{self.base}.Tex.sbfres'] files = [ get_file_path(f'Model\\{self.base}.sbfres'), get_file_path(f'Model\\{self.base}.Tex.sbfres') ] for file in files: if not os.path.exists(file): return for file in files: output = self.pack_name + '\\content\\Model\\' + file.split( '\\')[-1].replace(self.base, self.name) if not os.path.exists(output): with open(file, "rb") as f: content = oead.yaz0.decompress(f.read()) to_write = content.replace( self.base.replace('Weapon_', '').encode(), self.name.replace('Weapon_', '').encode()) to_write = oead.yaz0.compress(to_write) with open(output, "wb") as f: f.write(to_write)
def duplicate(self): base, name = self.base, self.name try: base, name = check_base(base, name, self.profile) except: pass #path = f'{get_def_path()}\\Model\\' #if get_endianness(): # base_bfres = [path + base + '.sbfres', path + base + '.Tex1.sbfres', path + base + '.Tex2.sbfres'] #else: # base_bfres = [path + base + '.sbfres', path + base + '.Tex.sbfres'] if get_endianness(): base_bfres = [get_file_path(f'Model\\{base}.sbfres'), get_file_path(f'Model\\{base}.Tex1.sbfres'), get_file_path(f'Model\\{base}.Tex2.sbfres')] else: base_bfres = [get_file_path(f'Model\\{base}.sbfres'), get_file_path(f'Model\\{base}.Tex.sbfres')] for file in base_bfres: if os.path.exists(file): output = self.pack_name + '\\content\\Model\\' + file.split('\\')[-1].replace(base, name) duplicate_bfres(file, output, old_bfres_name=base, new_bfres_name=name) #icon = get_def_path() + '\\UI\\StockItem\\' + self.base + '.sbitemico' icon = get_file_path(f'UI\\StockItem\\{self.base}.sbitemico') if os.path.exists(icon): output = self.pack_name + '\\content\\UI\\StockItem\\' + icon.split('\\')[-1].replace(self.base, self.name) duplicate_bfres(icon, output, old_bfres_name=self.base, new_bfres_name=self.name) #try_copy(f'{get_def_path()}\\UI\\StockItem\\{self.base}.01.sbitemico', f'{self.pack_name}\\content\\UI\\StockItem\\{self.name}.01.sbitemico') #icon_01_base = f'{get_def_path()}\\UI\\StockItem\\{self.base}.01.sbitemico' icon_01_base = get_file_path(f'UI\\StockItem\\{self.base}.01.sbitemico') icon_01_out = f'{self.pack_name}\\content\\UI\\StockItem\\{self.name}.01.sbitemico' duplicate_bfres(icon_01_base, icon_01_out, old_bfres_name=self.base, new_bfres_name=self.name)
def do_actorinfo(self): actors = get_res('Actors') A = 'ActorInfo.product.sbyml' source = f'cache\\{A}' #path = get_def_path() + '\\Actor' path = get_file_path(f'Actor\\{A}') if not os.path.exists(source): #copyfile(f'{path}\\{A}', source) copyfile(path, source) with open(source, "rb") as f: byml = oead.yaz0.decompress(f.read()) actorinfo = oead.byml.from_binary(byml) for weapon in self.weapons: actorinfo = weapon_iter(weapon, actorinfo, actors) if weapon.sheath == 'custom': actorinfo = sheath_iter(weapon, actorinfo) for armor in self.armors: actorinfo = armor_iter(armor, actorinfo, actors) with open(f'{self.pack_name}\\content\\Actor\\{A}', 'wb') as f: f.write( oead.yaz0.compress( oead.byml.to_binary(actorinfo, big_endian=get_endianness())))
def setup_ui_local(self): #hide self.korok_mask.hide() self.anims.hide() #config conf = Config() config = configparser.ConfigParser() config.read(conf.config_file) try: if config['DEFAULT']['is_bcml_settings'] == "True": conf.get_paths() conf.save_to_config() except: config['DEFAULT']['is_bcml_settings'] = "False" with open(conf.config_file, 'w') as f: # save config.write(f) #windows self.prompt_w.frame.setStyleSheet(self.frame.styleSheet()) # variables for elem in self.shops: self.shop_default = elem break #self.item1.setView(QtWidgets.QListView()) #Buttons self.Upgrade_armors.clicked.connect(lambda: validate_test(self)) self.Add_armors_to_items.clicked.connect(self.add_armors_to_items) self.Create_mod.clicked.connect(self.create_mod) self.Add_weapon.clicked.connect(self.add_weapon) self.Add_armor.clicked.connect(self.add_armor) self.Clear_list.clicked.connect(self.clear_list) self.Remove_from_mod.clicked.connect(self.remove_from_mod) self.Options.clicked.connect(self.options) self.patreon.clicked.connect(lambda: os.system( f'start https://www.patreon.com/user?u=32002965')) self.Random_Crafting.clicked.connect( lambda: random_crafting_requirements(self)) self.Random_Crafting_2.clicked.connect( lambda: random_crafting_requirements_2(self)) #self.patreon.hide() self.edit.clicked.connect(self.edit_click) #combo boxes self.items_weapons = deepcopy(self.items) for a in self.armors: del self.items_weapons[a] if 'Add' in self.Add_armors_to_items.text(): self.items = self.items_weapons medium_h = 25 big_h = 30 self.profile_2.addItems(self.wep_profiles) self.profile.addItems(self.armor_profiles) self.Lang.addItems(self.langs) #self.base_2.addItems(self.weapons) for w in self.weapons: icon_tmp = QIcon(f'res\\icons\\{self.weapons[w]}.png') self.base_2.addItem(icon_tmp, w) #self.base.addItems(self.armors) for a in self.armors: icon_tmp = QIcon(f'res\\icons\\{self.armors[a]}.png') self.base.addItem(icon_tmp, a) self.series.addItem("") for a in self.series_types: icon_tmp = QIcon(f'res\\icons\\{self.series_types[a]}.png') self.series.addItem(icon_tmp, a) #self.series.addItems(self.series_types) #for item in self.items: for item in self.items_rev: if 'Armor' in item: continue icon_tmp = QIcon(f'res\\icons\\{item}.png') self.item1.addItem(icon_tmp, self.items_rev[item]) self.item2.addItem(icon_tmp, self.items_rev[item]) self.item3.addItem(icon_tmp, self.items_rev[item]) self.item1_2.addItem(icon_tmp, self.items_rev[item]) self.item2_2.addItem(icon_tmp, self.items_rev[item]) self.item3_2.addItem(icon_tmp, self.items_rev[item]) if os.path.exists('res\\icons'): self.series.setIconSize(self.combobox_icon_size_big) self.base_2.setIconSize(self.combobox_icon_size_big) self.effect.setIconSize(self.combobox_icon_size) self.base.setIconSize(self.combobox_icon_size_big) self.item1.setIconSize(self.combobox_icon_size) self.item2.setIconSize(self.combobox_icon_size) self.item3.setIconSize(self.combobox_icon_size) self.item1_2.setIconSize(self.combobox_icon_size) self.item2_2.setIconSize(self.combobox_icon_size) self.item3_2.setIconSize(self.combobox_icon_size) self.sheath.addItems(self.sheaths) self.shop.addItems(self.shops) #self.effect.addItems(self.effects) for eff in self.effects: self.effect.addItem(QIcon(f'res\\{eff}.png'), eff) self.effect.adjustSize() self.item1_2.setMaxVisibleItems(medium_h) self.item2_2.setMaxVisibleItems(medium_h) self.item3_2.setMaxVisibleItems(medium_h) self.item1.setMaxVisibleItems(medium_h) self.item2.setMaxVisibleItems(medium_h) self.item3.setMaxVisibleItems(medium_h) self.base_2.setMaxVisibleItems(big_h) self.base.setMaxVisibleItems(big_h) self.sheath.setMaxVisibleItems(medium_h) self.effect.setMaxVisibleItems(medium_h) self.series.setMaxVisibleItems(medium_h) self.shop.setMaxVisibleItems(big_h) #radio buttons if get_endianness(): self.wiiu_radiobutton.setChecked(True) else: self.switch_radiobutton.setChecked(True) #autocompleters #self.base.setCompleter(QCompleter(self.armors)) self.magic.setCompleter(QCompleter(self.magic_types)) #self.base_2.setCompleter(QCompleter(self.weapons)) #menu bar self.actionOpen.triggered.connect(self.open_json) self.actionQuit.triggered.connect(lambda: self.close()) self.actionOptions.triggered.connect(self.options) self.actionSave.triggered.connect(lambda: json_to_file( f'jsons\\{self.pack_name.text()}.json', self.data)) self.actionSave_as.triggered.connect(self.save_as) self.actionReadme.triggered.connect(self.readme) #other windows self.sel_file = Select_file() self.sel_file.setStyleSheet(""" background-color: rgb(47, 49, 54); color: rgb(220, 220, 220); font: 10pt "Segoe MDL2 Assets";""") #rand self.check_mode() #resizing setFixedSize self.layout = QHBoxLayout() self.layout.addWidget(self.frame) self.centralwidget.setLayout(self.layout) pal = self.palette() pal.setColor(QPalette.Window, QColor(BG_COLOR[0], BG_COLOR[1], BG_COLOR[2])) self.setPalette(pal)
def set_sarc_endian(sarcwriter): if get_endianness(): SarcWriter.set_endianness(sarcwriter, oead.Endianness.Big) else: SarcWriter.set_endianness(sarcwriter, oead.Endianness.Little)
def create_pack(self): self.create_tree() data = self.data Weapons = [] Armors = [] for wep in data['Weapons']: new = Weapon(data, wep, pack_name=self.pack_name) Weapons.append(new) for armor in data['Armors']: new = Armor(data, armor, pack_name=self.pack_name) Armors.append(new) step = 100 / (len(Weapons) + len(Armors) + 6) #print('Creating actorpacks...') if self.progressbar: self.progressbar.setFormat('Creating actorpacks') if self.progressbar: self.progressbar.setValue(step) for wep in Weapons: if self.progressbar: self.progressbar.setFormat('Creating actorpacks: ' + wep.name_desc) if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) wep.create_weapon() for armor in Armors: if self.progressbar: self.progressbar.setFormat('Creating actorpacks: ' + armor.name_desc) if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) armor.create_armor() if self.progressbar: self.progressbar.setFormat('Creating actorinfo entries') if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) #print('Creating actorinfo entries...') actorinfo = Actorinfo(Weapons, Armors, self.pack_name) actorinfo.do_actorinfo() boot = BootupPack(Weapons, Armors, self.pack_name, self.lang) if data['Weapons']: #print('Creating Save flags...') if self.progressbar: self.progressbar.setFormat('Creating Save flags') if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) boot.insert_hashes() #print('Creating descriptions...') if self.progressbar: self.progressbar.setFormat('Creating descriptions...') if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) boot.insert_descriptions() #print('Inserting oven...') if self.progressbar: self.progressbar.setFormat('Inserting oven...') if self.progressbar: self.progressbar.setValue(self.progressbar.value() + step) #oven = ShopData(self.pack_name, 'TwnObj_AncientOven_A_01', data) #oven.create_shop() create_shops(self.pack_name, self.data) if not get_endianness(): create_folder(f'{self.pack_name}\\01007EF00011E000') move(f'{self.pack_name}\\content', f'{self.pack_name}\\01007EF00011E000\\romfs') #print('Done') if self.progressbar: self.progressbar.setFormat( f'Mod {os.path.basename(self.pack_name)} created successfully') if self.progressbar: self.progressbar.setValue(100)