From cc6de3db076d077cdedcab6183f8226fdb1a065a Mon Sep 17 00:00:00 2001 From: raphael60650 Date: Sat, 15 May 2021 21:04:17 +0200 Subject: [PATCH] too much edit to describe it --- assets/lecode-PAL.bin | Bin 80832 -> 69216 bytes main.pyw | 222 +++++++++++++++++++++++++++++++++++------- 2 files changed, 185 insertions(+), 37 deletions(-) diff --git a/assets/lecode-PAL.bin b/assets/lecode-PAL.bin index df024c48ae42614d51d6a194495c45a3e237d91d..150f5949225c299ff3051c5c60214c4c88bee19e 100644 GIT binary patch delta 23313 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 <}1*&0zYFGe!jvafB1AC5u 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 K@5t}p(fl7l&_O5w literal 80832 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 0: Cup_score[score].append(_course_config) + else: score = 0 + self.label_Action.config(text=f"Configuration de la course {_course_config['name']} (coupe {cup})...") self.progressbar_Action.step(1) @@ -596,9 +628,9 @@ class main(): f" {flag};"+\ f" \"{_course_config['name']}\";"+\ f" \"{_course_config['name']}\";"+\ - f" \"\"" + f" \"{sha1(_course_config['name'])}\"" - TEXT_DATA.append({"slot": format(0x7044 + text_index, '02x'), "name": _course_config['name']}) + TEXT_DATA.append({"slot": format(0x7044 + text_index, '02x'), "name": _course_config['name'], "score": score, "author": _course_config['author']}) text_index += 1 if _course_config["name"] == "/": @@ -609,11 +641,96 @@ class main(): self.label_Action.grid_forget() return + if False: + LE_CODE += f"\n\nC \"Star1\"" + rank_retro_course = {1: 0, 2: 0, 3: 0, "2+3": 0} + for rank in Cup_score: + LE_CODE += f"\nT 145;" + \ + f" T43;" + \ + f" 0x02;" + \ + f" \"star{rank}courses\";" + \ + f" \"star{rank}courses\";" + \ + f" \"{sha1(f'star{rank}courses')}\"" + + for course in Cup_score[rank]: + flag = "0x00" + if course["new"]: flag = "0x01" + else: rank_retro_course[rank] += 1 + LE_CODE += f"\nH {course['music']};" + \ + f" {hex(course['special'])};" + \ + f" 0x04;" + \ + f" \"{course['name']}\";" + \ + f" \"{course['name']}\";" + \ + f" \"{sha1(course['name'])}\"" + + LE_CODE += f"\nT 145;" + \ + f" T43;" + \ + f" 0x02;" + \ + f" \"2or3courses\";" + \ + f" \"2or3courses\";" + \ + f" \"{sha1('2or3courses')}\"" + + for course in Cup_score[2] + Cup_score[3]: + flag = "0x00" + if course["new"]: flag = "0x01" + else: rank_retro_course["2+3"] += 1 + LE_CODE += f"\nH {course['music']};" + \ + f" {hex(course['special'])};" + \ + f" 0x04;" + \ + f" \"{course['name']}\";" + \ + f" \"{course['name']}\";" + \ + f" \"{sha1(course['name'])}\"" + + + LE_CODE += f"\n\nC \"Star2\"" # Pas de rétro + + for rank in Cup_score: + LE_CODE += f"\nT 145;" + \ + f" T43;" + \ + f" 0x02;" + \ + f" \"nr{rank}courses\";" + \ + f" \"nr{rank}courses\";" + \ + f" \"{sha1(f'nr{rank}courses')}\"" + + for course in Cup_score[rank]: + if course["new"]: + LE_CODE += f"\nH {course['music']};" + \ + f" {hex(course['special'])};" + \ + f" 0x04;" + \ + f" \"{course['name']}\";" + \ + f" \"{course['name']}\";" + \ + f" \"{sha1(course['name'])}\"" + + LE_CODE += f"\nT 145;" + \ + f" T43;" + \ + f" 0x02;" + \ + f" \"nr2or3courses\";" + \ + f" \"nr2or3courses\";" + \ + f" \"{sha1('nr2or3courses')}\"" + + for course in Cup_score[2] + Cup_score[3]: + if course["new"]: + LE_CODE += f"\nH {course['music']};" + \ + f" {hex(course['special'])};" + \ + f" 0x04;" + \ + f" \"{course['name']}\";" + \ + f" \"{course['name']}\";" + \ + f" \"{sha1(course['name'])}\"" + + TEXT_DATA.append({"slot": format(0x7044 + text_index + 0, '02x'), "name": f"courses ★☆☆ ({len(Cup_score[1])})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 1, '02x'), "name": f"courses ★★☆ ({len(Cup_score[2])})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 2, '02x'), "name": f"courses ★★★ ({len(Cup_score[3])})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 3, '02x'), "name": f"courses ★★☆/★★★ ({len(Cup_score[2] + Cup_score[3])})", "score": 0, "author": "-"}) + + TEXT_DATA.append({"slot": format(0x7044 + text_index + 4, '02x'), "name": f"(sans rétro) courses ★☆☆ ({len(Cup_score[1]) - rank_retro_course[1]})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 5, '02x'), "name": f"(sans rétro) courses ★★☆ ({len(Cup_score[2]) - rank_retro_course[2]})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 6, '02x'), "name": f"(sans rétro) courses ★★★ ({len(Cup_score[3]) - rank_retro_course[3]})", "score": 0, "author": "-"}) + TEXT_DATA.append({"slot": format(0x7044 + text_index + 7, '02x'), "name": f"(sans rétro) courses ★★☆/★★★ ({len(Cup_score[2] + Cup_score[3]) - rank_retro_course['2+3']})", "score": 0, "author": "-"}) self.label_Action.config(text=f"Création du fichier CTFILE.txt...") self.progressbar_Action.step(1) shutil.copy("./assets/CTFILE-default.txt", f"{self.path}/files/.MKCreator/CTFILE.txt") - with open(f"{self.path}/files/.MKCreator/CTFILE.txt", "a") as CTFile: + with open(f"{self.path}/files/.MKCreator/CTFILE.txt", "a", encoding='utf-8') as CTFile: CTFile.write(LE_CODE) @@ -624,19 +741,20 @@ class main(): f"--DEST \"{self.path}/files/.MKCreator/ct_icons.tpl\" -x tpl.CMPR --overwrite") p.wait() - for file in ["Channel", "MenuMulti", "MenuSingle"]: - self.label_Action.config(text=f"Configuration des icones {file}.szs...") - self.progressbar_Action.step(1) + for file in ["Channel", "MenuMulti", "MenuSingle", "Race"]: + if file != "Race": + self.label_Action.config(text=f"Configuration des icones {file}.szs...") + self.progressbar_Action.step(1) - p = subprocess.Popen(f"wszst EXTRACT \"{self.path}/files/Scene/UI/{file}.szs\" --DEST \"./.tmp/{file}\"") - p.wait() + p = subprocess.Popen(f"wszst EXTRACT \"{self.path}/files/Scene/UI/{file}.szs\" --DEST \"./.tmp/{file}\"") + p.wait() - shutil.copy(f"{self.path}/files/.MKCreator/ct_icons.tpl", f"./.tmp/{file}/button/timg/ct_icons.tpl") - shutil.copy(f"{self.path}/files/.MKCreator/ct_icons.tpl", f"./.tmp/{file}/control/timg/ct_icons.tpl") + shutil.copy(f"{self.path}/files/.MKCreator/ct_icons.tpl", f"./.tmp/{file}/button/timg/ct_icons.tpl") + shutil.copy(f"{self.path}/files/.MKCreator/ct_icons.tpl", f"./.tmp/{file}/control/timg/ct_icons.tpl") - p = subprocess.Popen(f"wszst CREATE \"./.tmp/{file}\" --DEST \"{self.path}/files/Scene/UI/{file}.szs\" --overwrite") - p.wait() - shutil.rmtree(f"./.tmp/{file}") + p = subprocess.Popen(f"wszst CREATE \"./.tmp/{file}\" --DEST \"{self.path}/files/Scene/UI/{file}.szs\" --overwrite") + p.wait() + shutil.rmtree(f"./.tmp/{file}") for language in "EFGIS": self.label_Action.config(text=f"Configuration des icones {file}_{language}.szs...") @@ -650,19 +768,39 @@ class main(): p = subprocess.Popen(f"wbmgt decode \"{tmp_path}/message/Common.bmg\" --overwrite") p.wait() - with open(f"{tmp_path}/message/Common.txt", "a+") as CommonFile: + with open(f"{tmp_path}/message/Common.txt", "a+", encoding="utf-8") as CommonFile: for line in CommonFile.readlines(): for TEXT in TEXT_DATA: - print(line[len(f" {TEXT['slot']}"):]) if line[len(f" {TEXT['slot']}"):] == f" {TEXT['slot']}": + + starTEXT = " " + try: + star = int(TEXT['score']) + if star > 0: + starTEXT = ("★" * star) + ("☆" * (3 - star)) + starTEXT += " " + except: pass + if line != f"\n {TEXT['slot']}\t= {TEXT['name']}": pointer = CommonFile.tell() - CommonFile.write(f"\n {TEXT['slot']}\t= {TEXT['name']}") + if (file == "Race") & ("author" in TEXT): + CommonFile.write(f"\n {TEXT['slot']}\t={starTEXT}{TEXT['name']}\\npar {TEXT['author']}") + else: CommonFile.write(f"\n {TEXT['slot']}\t= {starTEXT}{TEXT['name']}") CommonFile.seek(pointer) TEXT_DATA.pop(TEXT) for TEXT in TEXT_DATA: - CommonFile.write(f"\n {TEXT['slot']}\t= {TEXT['name']}") + starTEXT = " " + try: + star = int(TEXT['score']) + if star > 0: + starTEXT = ("★" * star) + ("☆" * (3 - star)) + starTEXT += " " + except: pass + print(f"{TEXT['slot']}\t= {starTEXT}{TEXT['name']}") + if (file == "Race") & ("author" in TEXT): + CommonFile.write(f"\n {TEXT['slot']}\t= {starTEXT}{TEXT['name']}\\npar {TEXT['author']}") + else: CommonFile.write(f"\n {TEXT['slot']}\t= {starTEXT}{TEXT['name']}") p = subprocess.Popen(f"wbmgt encode \"{tmp_path}/message/Common.txt\" --overwrite --le-code") p.wait() @@ -676,12 +814,12 @@ class main(): self.label_Action.config(text=f"Patch de LE-CODE.bin...") self.progressbar_Action.step(1) - p = subprocess.Popen( + """p = subprocess.Popen( f"wlect patch ./assets/lecode-PAL.bin -od \"{self.path}/files/rel/lecode-PAL.bin\" --track-dir " + \ f"\"{self.path}/files/Race/Course\" --copy-tracks \"{self.path}/files/.MKCreator/Track/\" " + \ f"--copy-tracks \"{self.path}/files/.MKCreator/Track-Original/\" --le-define " + \ f"\"{self.path}/files/.MKCreator/CTFILE.txt\" --lpar ./assets/lpar-default.txt --overwrite") - p.wait() + p.wait()""" self.progressbar_Action.grid_forget() self.label_Action.grid_forget() @@ -771,12 +909,12 @@ class main(): draw.text((4, 4), "CT", (255, 165, 0), font=font) font = ImageFont.truetype("./assets/SuperMario256.ttf", 60) - draw.text((15-2, 80-2), "%03i" % index, (0, 0, 0), font=font) - draw.text((15+2, 80-2), "%03i" % index, (0, 0, 0), font=font) - draw.text((15-2, 80+2), "%03i" % index, (0, 0, 0), font=font) - draw.text((15+2, 80+2), "%03i" % index, (0, 0, 0), font=font) + draw.text((5-2, 80-2), "%03i" % index, (0, 0, 0), font=font) + draw.text((5+2, 80-2), "%03i" % index, (0, 0, 0), font=font) + draw.text((5-2, 80+2), "%03i" % index, (0, 0, 0), font=font) + draw.text((5+2, 80+2), "%03i" % index, (0, 0, 0), font=font) - draw.text((15, 80), "%03i" % index, (255, 165, 0), font=font) + draw.text((5, 80), "%03i" % index, (255, 165, 0), font=font) return cup_icon @@ -796,12 +934,18 @@ class main(): self.save_config() - def new_track(self, path, name, cup_index, course_index, is_new, music_type, track_type): + def new_track(self, path, name, cup_index, course_index, is_new, music_type, track_type, track_author = ""): if os.path.exists(path): _formated_name = name.replace(" ", "") if (_formated_name != "") and (_formated_name != "/"): if music_type in track2ID: if track_type in track2ID: + if not(path.isascii()): + try: + _path = path + path = unidecode.unidecode(path) + os.rename(_path, path) + except: pass if not (os.path.exists(f"{self.path}/files/.MKCreator/Track/")): os.makedirs(f"{self.path}/files/.MKCreator/Track/") @@ -813,13 +957,15 @@ class main(): f"--autoadd-path \"{self.path}/files/.MKCreator/auto-add/\"") p.wait() elif extension == ".szs": - shutil.copy(path, f"{self.path}/files/.MKCreator/Track/{name}.szs") + if path != f"{self.path}/files/.MKCreator/Track/{name}.szs": + shutil.copy(path, f"{self.path}/files/.MKCreator/Track/{name}.szs") self.config["cup"][str(cup_index)]["courses"][str(course_index)] = { "name": name, "music": track2ID[music_type][0], "special": track2ID[track_type][1], "new": is_new, + "author": track_author } self.save_config() self.select_cup(cup_index) @@ -865,11 +1011,11 @@ class main(): if course_id == 0: cup_id = len(self.config["cup"]) - new_icon = self.generate_cup_icon(cup_id) + new_icon = self.generate_cup_icon(cup_id - 8) cup_name = "CT%03i" % cup_id self.new_cup(cup_id, new_icon, cup_name) - self.new_track(path, name, cup_id, course_id, True, special_slot, special_slot) + self.new_track(path, name, cup_id, course_id, True, special_slot, special_slot, "Inconnu") self.progressbar_Action.grid_forget() self.label_Action.grid_forget() @@ -880,9 +1026,11 @@ class main(): #TODO: Vérifier les overwrites pour éviter les bugs #TODO: Améliorer la modification des sous-fichiers des szs -#TODO: Warning sur les dossier à accent !!! impossible d'importer une course depuis l'un d'eux ! + Installer les outils wszst, ... - +#TODO: Warning Installer les outils wszst, ... +#TODO: Bouton réinitilialisé le jeu +#DONE: Les .fix, .hp & .le sont automatiquement supprimés dans les noms des courses +#DONE: L'importation de plusieurs courses verra ses icônes de CT commencer à 1 Main = main() mainloop() \ No newline at end of file