mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-04 19:58:26 +02:00
commit
0f2a8dbaae
10 changed files with 124 additions and 46 deletions
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -88,3 +88,11 @@
|
|||
/test/
|
||||
/distribution.txt
|
||||
/error.log
|
||||
/file/Common_RU.bmg
|
||||
/file/Common_U.bmg
|
||||
/file/Common_RQ.bmg
|
||||
/file/Common_RM.bmg
|
||||
/file/Common_Q.bmg
|
||||
/file/Common_M.bmg
|
||||
/file/Common_RJ.bmg
|
||||
/file/Common_J.bmg
|
||||
|
|
|
@ -20,18 +20,6 @@
|
|||
"strapA_608x456fr.png": "TEX.RGB565",
|
||||
"strapA_608x456ge.png": "TEX.RGB565",
|
||||
"strapA_608x456it.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456de.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456en.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456es.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456fr.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456ge.png": "TEX.RGB565",
|
||||
"strapB_16_9_832x456it.png": "TEX.RGB565",
|
||||
"strapB_608x456de.png": "TEX.RGB565",
|
||||
"strapB_608x456en.png": "TEX.RGB565",
|
||||
"strapB_608x456es.png": "TEX.RGB565",
|
||||
"strapB_608x456fr.png": "TEX.RGB565",
|
||||
"strapB_608x456ge.png": "TEX.RGB565",
|
||||
"strapB_608x456it.png": "TEX.RGB565",
|
||||
"savebanner.tpl.png": "TPL.RGB565",
|
||||
"ct_icons.tpl.png": "TPL.CMPR"
|
||||
}
|
||||
|
|
34
fs.json
34
fs.json
|
@ -25,22 +25,26 @@
|
|||
|
||||
|
||||
"Scene/UI/*_E.szs": {"/message/Common.bmg": "Common_E.bmg"},
|
||||
"Scene/UI/*_U.szs": {"/message/Common.bmg": "Common_E.bmg"},
|
||||
"Scene/UI/*_K.szs": {"/message/Common.bmg": "Common_K.bmg"},
|
||||
"Scene/UI/*_J.szs": {"/message/Common.bmg": "Common_J.bmg"},
|
||||
"Scene/UI/*_U.szs": {"/message/Common.bmg": "Common_U.bmg"},
|
||||
"Scene/UI/*_F.szs": {"/message/Common.bmg": "Common_F.bmg"},
|
||||
"Scene/UI/*_Q.szs": {"/message/Common.bmg": "Common_F.bmg"},
|
||||
"Scene/UI/*_Q.szs": {"/message/Common.bmg": "Common_Q.bmg"},
|
||||
"Scene/UI/*_G.szs": {"/message/Common.bmg": "Common_G.bmg"},
|
||||
"Scene/UI/*_I.szs": {"/message/Common.bmg": "Common_I.bmg"},
|
||||
"Scene/UI/*_S.szs": {"/message/Common.bmg": "Common_S.bmg"},
|
||||
"Scene/UI/*_M.szs": {"/message/Common.bmg": "Common_S.bmg"},
|
||||
"Scene/UI/*_M.szs": {"/message/Common.bmg": "Common_M.bmg"},
|
||||
|
||||
"Scene/UI/Race_E.szs": {"/message/Common.bmg": "Common_RE.bmg"},
|
||||
"Scene/UI/Race_U.szs": {"/message/Common.bmg": "Common_RE.bmg"},
|
||||
"Scene/UI/Race_K.szs": {"/message/Common.bmg": "Common_RK.bmg"},
|
||||
"Scene/UI/Race_J.szs": {"/message/Common.bmg": "Common_RJ.bmg"},
|
||||
"Scene/UI/Race_U.szs": {"/message/Common.bmg": "Common_RU.bmg"},
|
||||
"Scene/UI/Race_F.szs": {"/message/Common.bmg": "Common_RF.bmg"},
|
||||
"Scene/UI/Race_Q.szs": {"/message/Common.bmg": "Common_RF.bmg"},
|
||||
"Scene/UI/Race_Q.szs": {"/message/Common.bmg": "Common_RQ.bmg"},
|
||||
"Scene/UI/Race_G.szs": {"/message/Common.bmg": "Common_RG.bmg"},
|
||||
"Scene/UI/Race_I.szs": {"/message/Common.bmg": "Common_RI.bmg"},
|
||||
"Scene/UI/Race_S.szs": {"/message/Common.bmg": "Common_RS.bmg"},
|
||||
"Scene/UI/Race_M.szs": {"/message/Common.bmg": "Common_RS.bmg"},
|
||||
"Scene/UI/Race_M.szs": {"/message/Common.bmg": "Common_RM.bmg"},
|
||||
|
||||
"Boot/Strap/eu/Dutch.szs": {
|
||||
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456de",
|
||||
|
@ -60,6 +64,24 @@
|
|||
"/Textures(NW4R)/strapA_608x456": "strapA_608x456en",
|
||||
"/Textures(NW4R)/strapB_608x456": "strapA_608x456en"
|
||||
},
|
||||
"Boot/Strap/jp/jp.szs": {
|
||||
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapA_608x456": "strapA_608x456en",
|
||||
"/Textures(NW4R)/strapB_608x456": "strapA_608x456en"
|
||||
},
|
||||
"Boot/Strap/kr/Korean.szs": {
|
||||
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapA_608x456": "strapA_608x456en",
|
||||
"/Textures(NW4R)/strapB_608x456": "strapA_608x456en"
|
||||
},
|
||||
"Boot/Strap/ch/Chinese.szs": {
|
||||
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456en",
|
||||
"/Textures(NW4R)/strapA_608x456": "strapA_608x456en",
|
||||
"/Textures(NW4R)/strapB_608x456": "strapA_608cccx456en"
|
||||
},
|
||||
"Boot/Strap/eu/French.szs": {
|
||||
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456fr",
|
||||
"/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456fr",
|
||||
|
|
3
setup.py
3
setup.py
|
@ -27,6 +27,9 @@ include_files = [
|
|||
("./file/CourseSelectCup.brctr", "./file/CourseSelectCup.brctr"),
|
||||
("./file/course_name.brlyt", "./file/course_name.brlyt"),
|
||||
("./file/lecode-PAL.bin", "./file/lecode-PAL.bin"),
|
||||
("./file/lecode-USA.bin", "./file/lecode-USA.bin"),
|
||||
("./file/lecode-JAP.bin", "./file/lecode-JAP.bin"),
|
||||
("./file/lecode-KOR.bin", "./file/lecode-KOR.bin"),
|
||||
("./file/itemBoxNiseRtpa.brres", "./file/itemBoxNiseRtpa.brres"),
|
||||
("./file/lpar-default.txt", "./file/lpar-default.txt"),
|
||||
("./file/RKRace.breff", "./file/RKRace.breff"),
|
||||
|
|
|
@ -2,6 +2,7 @@ from tkinter import *
|
|||
from tkinter import messagebox, filedialog, ttk
|
||||
from threading import Thread
|
||||
import subprocess
|
||||
import glob
|
||||
import os
|
||||
|
||||
from .definition import *
|
||||
|
@ -46,7 +47,7 @@ def __init__(self):
|
|||
|
||||
Button(self.frame_game_path, text="...", relief=RIDGE, command=select_path).grid(row=1, column=2, sticky="NEWS")
|
||||
|
||||
self.frame_game_path_action = Frame(self.frame_game_path) # Action Extraire & Tout faire
|
||||
self.frame_game_path_action = Frame(self.frame_game_path) # Extract and do everything button
|
||||
self.frame_game_path_action.grid(row=2, column=1, columnspan=2, sticky="NEWS")
|
||||
self.frame_game_path_action.columnconfigure(1, weight=1)
|
||||
|
||||
|
@ -65,6 +66,7 @@ def __init__(self):
|
|||
self.translate("Ce dossier sera écrasé si vous installer le mod !\n" +
|
||||
"Êtes-vous sûr de vouloir l'utiliser ?")):
|
||||
self.path_mkwf = os.path.realpath(path + "/../../")
|
||||
else: return
|
||||
elif extension.upper() in ["ISO", "WBFS", "WIA", "CSIO"]:
|
||||
# Fiding a directory name that dosen't already exist
|
||||
directory_name, i = "MKWiiFaraphel", 1
|
||||
|
@ -86,14 +88,33 @@ def __init__(self):
|
|||
self.Progress(show=False)
|
||||
return
|
||||
|
||||
if os.path.exists(self.path_mkwf + "/files/rel/lecode-PAL.bin"):
|
||||
if glob.glob(self.path_mkwf + "/files/rel/lecode-???.bin"): # if a LECODE file is already here
|
||||
messagebox.showwarning(self.translate("Attention"),
|
||||
self.translate("Cette ROM est déjà moddé, " +
|
||||
"il est déconseillé de l'utiliser pour installer le mod"))
|
||||
|
||||
region_ID = {
|
||||
"J": "JAP",
|
||||
"P": "PAL",
|
||||
"K": "KOR",
|
||||
"E": "USA"
|
||||
}
|
||||
try:
|
||||
with open(self.path_mkwf + "/setup.txt") as f: setup = f.read()
|
||||
setup = setup[setup.find("!part-id = ")+len("!part-id = "):]
|
||||
self.original_game_ID = setup[:setup.find("\n")]
|
||||
except:
|
||||
messagebox.showwarning(self.translate("Attention"),
|
||||
self.transate("Impossible de trouver la région de votre jeu.\n"
|
||||
"la région PAL sera utilisé par défaut."))
|
||||
self.original_game_ID = "RMCP01"
|
||||
try: self.original_region = region_ID[self.original_game_ID[3]]
|
||||
except: self.original_region = "PAL"
|
||||
|
||||
self.frame_action.grid(row=3, column=1, sticky="NEWS")
|
||||
|
||||
except: self.log_error()
|
||||
finally:
|
||||
self.frame_action.grid(row=3, column=1, sticky="NEWS")
|
||||
self.Progress(show=False)
|
||||
|
||||
t = Thread(target=func)
|
||||
|
|
|
@ -89,18 +89,19 @@ def install_mod(self):
|
|||
"--add-lecode"], creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
|
||||
check=True, stdout=subprocess.PIPE)
|
||||
|
||||
self.Progress(statut=self.translate("Patch lecode-PAL.bin"), add=1)
|
||||
self.Progress(statut=self.translate("Patch lecode.bin"), add=1)
|
||||
|
||||
shutil.copytree("./file/Track/", self.path_mkwf+"/files/Race/Course/", dirs_exist_ok=True)
|
||||
if not(os.path.exists(self.path_mkwf+"/tmp/")): os.makedirs(self.path_mkwf+"/tmp/")
|
||||
filecopy("./file/CTFILE.txt", self.path_mkwf+"/tmp/CTFILE.txt")
|
||||
filecopy("./file/lpar-default.txt", self.path_mkwf + "/tmp/lpar-default.txt")
|
||||
filecopy("./file/lecode-PAL.bin", self.path_mkwf + "/tmp/lecode-PAL.bin")
|
||||
filecopy(f"./file/lecode-{self.original_region}.bin", self.path_mkwf + f"/tmp/lecode-{self.original_region}.bin")
|
||||
|
||||
subprocess.run(
|
||||
["./tools/szs/wlect", "patch", "./tmp/lecode-PAL.bin", "-od", "./files/rel/lecode-PAL.bin",
|
||||
"--track-dir", "./files/Race/Course/", "--move-tracks", "./files/Race/Course/", "--le-define",
|
||||
"./tmp/CTFILE.txt", "--lpar", "./tmp/lpar-default.txt", "--overwrite"],
|
||||
["./tools/szs/wlect", "patch", f"./tmp/lecode-{self.original_region}.bin", "-od",
|
||||
f"./files/rel/lecode-{self.original_region}.bin", "--track-dir", "./files/Race/Course/",
|
||||
"--move-tracks", "./files/Race/Course/", "--le-define", "./tmp/CTFILE.txt", "--lpar",
|
||||
"./tmp/lpar-default.txt", "--overwrite"],
|
||||
creationflags=CREATE_NO_WINDOW, cwd=self.path_mkwf, check=True, stdout=subprocess.PIPE)
|
||||
|
||||
shutil.rmtree(self.path_mkwf + "/tmp/")
|
||||
|
@ -111,13 +112,13 @@ def install_mod(self):
|
|||
if outputformat in ["ISO", "WBFS", "CISO"]:
|
||||
self.path_mkwf_format = os.path.realpath(self.path_mkwf + "/../MKWFaraphel." + outputformat.lower())
|
||||
subprocess.run(["./tools/wit/wit", "COPY", get_nodir(self.path_mkwf), "--DEST",
|
||||
get_nodir(self.path_mkwf_format), f"--{outputformat.lower()}", "--overwrite"],
|
||||
CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
|
||||
get_nodir(self.path_mkwf_format), f"--{outputformat.lower()}", "--overwrite"],
|
||||
creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
|
||||
check=True, stdout=subprocess.PIPE)
|
||||
shutil.rmtree(self.path_mkwf)
|
||||
|
||||
self.Progress(statut=self.translate("Changement de l'ID du jeu"), add=1)
|
||||
subprocess.run(["./tools/wit/wit", "EDIT", get_dir(self.path_mkwf_format), "--id", "RMCP60"],
|
||||
subprocess.run(["./tools/wit/wit", "EDIT", get_nodir(self.path_mkwf_format), "--id", "RMCP60"], # see to maybe change ID to MKWF
|
||||
creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf_format),
|
||||
check=True, stdout=subprocess.PIPE)
|
||||
|
||||
|
|
|
@ -102,7 +102,7 @@ def patch_bmg(self, gamefile): # gamefile est le fichier .szs trouvé dans le /
|
|||
trackend = "2328"
|
||||
bmgtracks = bmgtracks[bmgtracks.find(trackheader) + len(trackheader):bmgtracks.find(trackend)]
|
||||
|
||||
with open("./file/ExtraCommon.txt", "w") as f:
|
||||
with open("./file/ExtraCommon.txt", "w", encoding="utf8") as f:
|
||||
f.write("#BMG\n\n"
|
||||
f" 703e\t= {self.translate('Aléatoire: Toutes les pistes', lang=bmglang)}\n"
|
||||
f" 703f\t= {self.translate('Aléatoire: Pistes Originales', lang=bmglang)}\n"
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
from tkinter import messagebox
|
||||
from threading import Thread
|
||||
import subprocess
|
||||
import shutil
|
||||
import json
|
||||
import glob
|
||||
import os
|
||||
|
@ -31,17 +33,23 @@ def patch_file(self):
|
|||
for i, file in enumerate(fc["img"]):
|
||||
self.Progress(statut=self.translate("Conversion des images")+f"\n({i + 1}/{len(fc['img'])}) {file}", add=1)
|
||||
subprocess.run(["./tools/szs/wimgt", "ENCODE", "./file/" + file, "-x", fc["img"][file], "--overwrite"],
|
||||
creationflags=CREATE_NO_WINDOW)
|
||||
creationflags=CREATE_NO_WINDOW, check=True, stdout=subprocess.PIPE)
|
||||
|
||||
for file in glob.glob(self.path_mkwf+"/files/Scene/UI/MenuSingle_?.szs"):
|
||||
self.patch_bmg(file)
|
||||
|
||||
if not(os.path.exists("./file/auto-add/")):
|
||||
subprocess.run(["./tools/szs/wszst", "AUTOADD", self.path_mkwf + "/files/Race/Course/", "--DEST",
|
||||
"./file/auto-add/"], creationflags=CREATE_NO_WINDOW)
|
||||
if os.path.exists("./file/auto-add"): shutil.rmtree("./file/auto-add")
|
||||
if not(os.path.exists(self.path_mkwf + "/tmp/")): os.makedirs(self.path_mkwf + "/tmp/")
|
||||
subprocess.run(["./tools/szs/wszst", "AUTOADD", get_nodir(self.path_mkwf) + "/files/Race/Course/",
|
||||
"--DEST", get_nodir(self.path_mkwf) + "/tmp/auto-add/"],
|
||||
creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
|
||||
check=True, stdout=subprocess.PIPE)
|
||||
shutil.move(self.path_mkwf + "/tmp/auto-add/", "./file/auto-add/")
|
||||
shutil.rmtree(self.path_mkwf + "/tmp/")
|
||||
|
||||
max_process = 8
|
||||
process_list = {}
|
||||
error_count, error_max = 0, 3
|
||||
|
||||
for i, file in enumerate(os.listdir("./file/Track-WU8/")):
|
||||
while True:
|
||||
|
@ -50,28 +58,55 @@ def patch_file(self):
|
|||
self.Progress(statut=self.translate("Conversion des courses")+f"\n({i + 1}/{total_track})\n" +
|
||||
"\n".join(process_list.keys()), add=1)
|
||||
|
||||
if not (os.path.exists("./file/Track/" + get_filename(file) + ".szs")):
|
||||
track_szs_file = f"./file/Track/{get_filename(file)}.szs"
|
||||
if os.path.exists(track_szs_file):
|
||||
if os.path.getsize(track_szs_file) < 1000: # File under this size are corrupted
|
||||
os.remove(track_szs_file)
|
||||
|
||||
if not(os.path.exists(track_szs_file)):
|
||||
process_list[file] = subprocess.Popen([
|
||||
"./tools/szs/wszst", "NORMALIZE", "./file/Track-WU8/" + file, "--DEST",
|
||||
"./file/Track/%N.szs", "--szs", "--overwrite", "--autoadd-path",
|
||||
"./file/auto-add/"], creationflags=CREATE_NO_WINDOW)
|
||||
"./file/auto-add/"], creationflags=CREATE_NO_WINDOW, stderr=subprocess.PIPE)
|
||||
break
|
||||
else:
|
||||
for process in process_list:
|
||||
if process_list[process] is not None:
|
||||
if not (process_list[process].poll() is None):
|
||||
process_list.pop(process)
|
||||
break
|
||||
returncode = process_list[process].poll()
|
||||
if returncode is None: pass # if the process is still running
|
||||
else: # process ended
|
||||
stderr = process_list[process].stderr.read()
|
||||
if b"wszst: ERROR" in stderr: # Error occured
|
||||
process_list.pop(process)
|
||||
os.remove(f"./file/Track/{get_filename(process)}.szs")
|
||||
error_count += 1
|
||||
if error_count > error_max: # Too much track wasn't correctly converted
|
||||
messagebox.showerror(
|
||||
self.translate("Erreur"),
|
||||
self.translate("Trop de course ont eu une erreur de conversion."))
|
||||
return
|
||||
else: # if the error max hasn't been reach
|
||||
messagebox.showwarning(
|
||||
self.translate("Attention"),
|
||||
self.translate("La course ") +
|
||||
process +
|
||||
self.translate(" n'a pas été correctement converti. (") +
|
||||
str(error_count) + "/"+str(error_max)+")")
|
||||
break
|
||||
|
||||
else:
|
||||
process_list.pop(process)
|
||||
break
|
||||
else:
|
||||
process_list.pop(process)
|
||||
break
|
||||
|
||||
self.Progress(show=False)
|
||||
self.button_install_mod.grid(row=2, column=1, sticky="NEWS")
|
||||
self.listbox_outputformat.grid(row=2, column=2, sticky="NEWS")
|
||||
|
||||
except:
|
||||
self.log_error()
|
||||
except: self.log_error()
|
||||
finally: self.Progress(show=False)
|
||||
|
||||
|
||||
t = Thread(target=func)
|
||||
t.setDaemon(True)
|
||||
|
|
|
@ -1 +1 @@
|
|||
{"en": {"Une erreur est survenue :": "An error occured :", "Cette action va extraire / utiliser la ROM s\u00e9lectionn\u00e9, pr\u00e9parer les fichiers et installer le mod. Voulez-vous continuer ?": "This will extract the selected ROM, prepare files and install mod. Do you wish to continue ?", "Fonctionnalit\u00e9 exp\u00e9rimentale": "Experimental functionality", "Tout faire": "Do everything", "Cr\u00e9ation des images descriptives": "Creation of descriptive images", "Cr\u00e9ation de ct_icon.png": "Creating ct_icon.png", "Patch des textes ": "Patching text ", "Al\u00e9atoire: Toutes les pistes": "Random: All tracks", "Al\u00e9atoire: Pistes Originales": "Random: Original tracks", "Al\u00e9atoire: Custom Tracks": "Random: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Random: New tracks", "MKWFaraphel Installateur": "MKWFaraphel Installer", "Jeu Wii": "Wii game", "Jeu original": "Original game", "Erreur": "Error", "Le chemin de fichier est invalide": "The file path in invalid", "Attention": "Warning", "Ce dossier sera \u00e9cras\u00e9 si vous installer le mod !\n\u00cates-vous s\u00fbr de vouloir l'utiliser ?": "This directory will be overwritten if you install the mod !\nAre you sure you want to use it ?", "Extraction du jeu...": "Extracting the game...", "Le type de fichier n'est pas reconnu": "This file type is not supported", "Cette ROM est d\u00e9j\u00e0 modd\u00e9, il est d\u00e9conseill\u00e9 de l'utiliser pour installer le mod": "This game is already modded, it is not recommended to use it to install the mod", "Extraire le fichier": "Extract file", "Preparer les fichiers": "Prepare files", "Action": "Action", "Installer le mod": "Install mod", "Dossier": "Directory", "Langage : ": "Language : ", "Mise \u00e0 jour disponible !": "Update available !", "Une mise \u00e0 jour est disponible, souhaitez-vous l'installer ?": "An update is available, do you want to install it ?", "T\u00e9l\u00e9chargement de Updater en cours...": "Downloading the Updater...", "fin du t\u00e9l\u00e9chargement, d\u00e9but de l'extraction...": "end of the download, extracting...", "fin de l'extraction": "finished extracting", "lancement de l'application...": "starting application...", "Modification de": "Modifying", "Recompilation de": "Recompilating", "Conversion en": "Converting to", "Changement de l'ID du jeu": "editing game's ID", "Fin": "End", "L'installation est termin\u00e9 !": "The mod has been installed !", "Conversion des fichiers": "Converting files", "Conversion des images": "Converting images", "Conversion des textes": "Converting texts", "Conversion des courses": "Converting races", "Configuration de LE-CODE": "Configurating LE-CODE"}, "ge": {"Al\u00e9atoire: Toutes les pistes": "Zuf\u00e4llig: Alle Spuren", "Al\u00e9atoire: Pistes Originales": "Zuf\u00e4llig: Original-Spuren", "Al\u00e9atoire: Custom Tracks": "Zuf\u00e4llig: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Zuf\u00e4llig: Neue Spuren"}, "it": {"Al\u00e9atoire: Toutes les pistes": "Casuale: Tutte le tracce", "Al\u00e9atoire: Pistes Originales": "Casuale: Tracce originali", "Al\u00e9atoire: Custom Tracks": "Casuale: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Casuale: Nuovi brani"}, "sp": {"Al\u00e9atoire: Toutes les pistes": "Aleatorio: Todas las pistas", "Al\u00e9atoire: Pistes Originales": "Aleatorio: Pistas originales", "Al\u00e9atoire: Custom Tracks": "Aleatorio: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Aleatorio: Pistas nuevas"}, "selected": "fr"}
|
||||
{"en": {"La course ": "The track ", " n'a pas été correctement converti. (": "hasn't been correctly converted. (", "Trop de course ont eu une erreur de conversion.": "Too much track had a conversion issue.", "Une erreur est survenue :": "An error occured :", "Cette action va extraire / utiliser la ROM s\u00e9lectionn\u00e9, pr\u00e9parer les fichiers et installer le mod. Voulez-vous continuer ?": "This will extract the selected ROM, prepare files and install mod. Do you wish to continue ?", "Fonctionnalit\u00e9 exp\u00e9rimentale": "Experimental functionality", "Tout faire": "Do everything", "Cr\u00e9ation des images descriptives": "Creation of descriptive images", "Cr\u00e9ation de ct_icon.png": "Creating ct_icon.png", "Patch des textes ": "Patching text ", "Al\u00e9atoire: Toutes les pistes": "Random: All tracks", "Al\u00e9atoire: Pistes Originales": "Random: Original tracks", "Al\u00e9atoire: Custom Tracks": "Random: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Random: New tracks", "MKWFaraphel Installateur": "MKWFaraphel Installer", "Jeu Wii": "Wii game", "Jeu original": "Original game", "Erreur": "Error", "Le chemin de fichier est invalide": "The file path in invalid", "Attention": "Warning", "Ce dossier sera \u00e9cras\u00e9 si vous installer le mod !\n\u00cates-vous s\u00fbr de vouloir l'utiliser ?": "This directory will be overwritten if you install the mod !\nAre you sure you want to use it ?", "Extraction du jeu...": "Extracting the game...", "Le type de fichier n'est pas reconnu": "This file type is not supported", "Cette ROM est d\u00e9j\u00e0 modd\u00e9, il est d\u00e9conseill\u00e9 de l'utiliser pour installer le mod": "This game is already modded, it is not recommended to use it to install the mod", "Extraire le fichier": "Extract file", "Preparer les fichiers": "Prepare files", "Action": "Action", "Installer le mod": "Install mod", "Dossier": "Directory", "Langage : ": "Language : ", "Mise \u00e0 jour disponible !": "Update available !", "Une mise \u00e0 jour est disponible, souhaitez-vous l'installer ?": "An update is available, do you want to install it ?", "T\u00e9l\u00e9chargement de Updater en cours...": "Downloading the Updater...", "fin du t\u00e9l\u00e9chargement, d\u00e9but de l'extraction...": "end of the download, extracting...", "fin de l'extraction": "finished extracting", "lancement de l'application...": "starting application...", "Modification de": "Modifying", "Recompilation de": "Recompilating", "Conversion en": "Converting to", "Changement de l'ID du jeu": "editing game's ID", "Fin": "End", "L'installation est termin\u00e9 !": "The mod has been installed !", "Conversion des fichiers": "Converting files", "Conversion des images": "Converting images", "Conversion des textes": "Converting texts", "Conversion des courses": "Converting races", "Configuration de LE-CODE": "Configurating LE-CODE"}, "ge": {"Al\u00e9atoire: Toutes les pistes": "Zuf\u00e4llig: Alle Spuren", "Al\u00e9atoire: Pistes Originales": "Zuf\u00e4llig: Original-Spuren", "Al\u00e9atoire: Custom Tracks": "Zuf\u00e4llig: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Zuf\u00e4llig: Neue Spuren"}, "it": {"Al\u00e9atoire: Toutes les pistes": "Casuale: Tutte le tracce", "Al\u00e9atoire: Pistes Originales": "Casuale: Tracce originali", "Al\u00e9atoire: Custom Tracks": "Casuale: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Casuale: Nuovi brani"}, "sp": {"Al\u00e9atoire: Toutes les pistes": "Aleatorio: Todas las pistas", "Al\u00e9atoire: Pistes Originales": "Aleatorio: Pistas originales", "Al\u00e9atoire: Custom Tracks": "Aleatorio: Custom Tracks", "Al\u00e9atoire: Pistes Nouvelles": "Aleatorio: Pistas nuevas"}, "selected": "fr"}
|
6
version
6
version
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"version": "0.6",
|
||||
"subversion": "0",
|
||||
"changelog": "- The image of the score system explanation now have explain the star's color\n- Microsoft Visual C++ should now be included with the installer, avoiding an error with vcruntime140.dll\n- Update will now be detected by the installer when changing subversion (0.5.1 -> 0.5.2 will be detected)\n- A new file named \"error.log\" can now be generated when an error is occurring, helping debugging\n- Updated cx_freeze so that having special character in path don't cause issue (.exe version)\n- Fixed an issue where having a dump with a DATA directory would cause the installer to not work",
|
||||
"download_bin": "https://github.com/Faraphel/MKWF-Install/releases/download/0.6/MKWF.v0.6.zip",
|
||||
"subversion": "1",
|
||||
"changelog": "- JAP, USA and KOR version are now supported by the installer !",
|
||||
"download_bin": "https://github.com/Faraphel/MKWF-Install/releases/download/0.6.1/MKWF.v0.6.1.zip",
|
||||
"updater_bin": "https://github.com/Faraphel/MKWF-Install/raw/master/Updater/Updater.zip"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue