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())))
Example #4
0
    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)