Merge pull request #16 from Faraphel/dev

v0.6.1
This commit is contained in:
Faraphel 2021-06-16 16:45:16 +02:00 committed by GitHub
commit 0f2a8dbaae
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 124 additions and 46 deletions

8
.gitignore vendored
View file

@ -88,3 +88,11 @@
/test/ /test/
/distribution.txt /distribution.txt
/error.log /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

View file

@ -20,18 +20,6 @@
"strapA_608x456fr.png": "TEX.RGB565", "strapA_608x456fr.png": "TEX.RGB565",
"strapA_608x456ge.png": "TEX.RGB565", "strapA_608x456ge.png": "TEX.RGB565",
"strapA_608x456it.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", "savebanner.tpl.png": "TPL.RGB565",
"ct_icons.tpl.png": "TPL.CMPR" "ct_icons.tpl.png": "TPL.CMPR"
} }

34
fs.json
View file

@ -25,22 +25,26 @@
"Scene/UI/*_E.szs": {"/message/Common.bmg": "Common_E.bmg"}, "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/*_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/*_G.szs": {"/message/Common.bmg": "Common_G.bmg"},
"Scene/UI/*_I.szs": {"/message/Common.bmg": "Common_I.bmg"}, "Scene/UI/*_I.szs": {"/message/Common.bmg": "Common_I.bmg"},
"Scene/UI/*_S.szs": {"/message/Common.bmg": "Common_S.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_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_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_G.szs": {"/message/Common.bmg": "Common_RG.bmg"},
"Scene/UI/Race_I.szs": {"/message/Common.bmg": "Common_RI.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_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": { "Boot/Strap/eu/Dutch.szs": {
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456de", "/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456de",
@ -60,6 +64,24 @@
"/Textures(NW4R)/strapA_608x456": "strapA_608x456en", "/Textures(NW4R)/strapA_608x456": "strapA_608x456en",
"/Textures(NW4R)/strapB_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": { "Boot/Strap/eu/French.szs": {
"/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456fr", "/Textures(NW4R)/strapA_16_9_832x456": "strapA_16_9_832x456fr",
"/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456fr", "/Textures(NW4R)/strapB_16_9_832x456": "strapA_16_9_832x456fr",

View file

@ -27,6 +27,9 @@ include_files = [
("./file/CourseSelectCup.brctr", "./file/CourseSelectCup.brctr"), ("./file/CourseSelectCup.brctr", "./file/CourseSelectCup.brctr"),
("./file/course_name.brlyt", "./file/course_name.brlyt"), ("./file/course_name.brlyt", "./file/course_name.brlyt"),
("./file/lecode-PAL.bin", "./file/lecode-PAL.bin"), ("./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/itemBoxNiseRtpa.brres", "./file/itemBoxNiseRtpa.brres"),
("./file/lpar-default.txt", "./file/lpar-default.txt"), ("./file/lpar-default.txt", "./file/lpar-default.txt"),
("./file/RKRace.breff", "./file/RKRace.breff"), ("./file/RKRace.breff", "./file/RKRace.breff"),

View file

@ -2,6 +2,7 @@ from tkinter import *
from tkinter import messagebox, filedialog, ttk from tkinter import messagebox, filedialog, ttk
from threading import Thread from threading import Thread
import subprocess import subprocess
import glob
import os import os
from .definition import * 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") 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.grid(row=2, column=1, columnspan=2, sticky="NEWS")
self.frame_game_path_action.columnconfigure(1, weight=1) 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" + self.translate("Ce dossier sera écrasé si vous installer le mod !\n" +
"Êtes-vous sûr de vouloir l'utiliser ?")): "Êtes-vous sûr de vouloir l'utiliser ?")):
self.path_mkwf = os.path.realpath(path + "/../../") self.path_mkwf = os.path.realpath(path + "/../../")
else: return
elif extension.upper() in ["ISO", "WBFS", "WIA", "CSIO"]: elif extension.upper() in ["ISO", "WBFS", "WIA", "CSIO"]:
# Fiding a directory name that dosen't already exist # Fiding a directory name that dosen't already exist
directory_name, i = "MKWiiFaraphel", 1 directory_name, i = "MKWiiFaraphel", 1
@ -86,14 +88,33 @@ def __init__(self):
self.Progress(show=False) self.Progress(show=False)
return 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"), messagebox.showwarning(self.translate("Attention"),
self.translate("Cette ROM est déjà moddé, " + self.translate("Cette ROM est déjà moddé, " +
"il est déconseillé de l'utiliser pour installer le mod")) "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() except: self.log_error()
finally: finally:
self.frame_action.grid(row=3, column=1, sticky="NEWS")
self.Progress(show=False) self.Progress(show=False)
t = Thread(target=func) t = Thread(target=func)

View file

@ -89,18 +89,19 @@ def install_mod(self):
"--add-lecode"], creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf), "--add-lecode"], creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
check=True, stdout=subprocess.PIPE) 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) 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/") 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/CTFILE.txt", self.path_mkwf+"/tmp/CTFILE.txt")
filecopy("./file/lpar-default.txt", self.path_mkwf + "/tmp/lpar-default.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( subprocess.run(
["./tools/szs/wlect", "patch", "./tmp/lecode-PAL.bin", "-od", "./files/rel/lecode-PAL.bin", ["./tools/szs/wlect", "patch", f"./tmp/lecode-{self.original_region}.bin", "-od",
"--track-dir", "./files/Race/Course/", "--move-tracks", "./files/Race/Course/", "--le-define", f"./files/rel/lecode-{self.original_region}.bin", "--track-dir", "./files/Race/Course/",
"./tmp/CTFILE.txt", "--lpar", "./tmp/lpar-default.txt", "--overwrite"], "--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) creationflags=CREATE_NO_WINDOW, cwd=self.path_mkwf, check=True, stdout=subprocess.PIPE)
shutil.rmtree(self.path_mkwf + "/tmp/") shutil.rmtree(self.path_mkwf + "/tmp/")
@ -111,13 +112,13 @@ def install_mod(self):
if outputformat in ["ISO", "WBFS", "CISO"]: if outputformat in ["ISO", "WBFS", "CISO"]:
self.path_mkwf_format = os.path.realpath(self.path_mkwf + "/../MKWFaraphel." + outputformat.lower()) 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", subprocess.run(["./tools/wit/wit", "COPY", get_nodir(self.path_mkwf), "--DEST",
get_nodir(self.path_mkwf_format), f"--{outputformat.lower()}", "--overwrite"], get_nodir(self.path_mkwf_format), f"--{outputformat.lower()}", "--overwrite"],
CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf), creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf),
check=True, stdout=subprocess.PIPE) check=True, stdout=subprocess.PIPE)
shutil.rmtree(self.path_mkwf) shutil.rmtree(self.path_mkwf)
self.Progress(statut=self.translate("Changement de l'ID du jeu"), add=1) 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), creationflags=CREATE_NO_WINDOW, cwd=get_dir(self.path_mkwf_format),
check=True, stdout=subprocess.PIPE) check=True, stdout=subprocess.PIPE)

View file

@ -102,7 +102,7 @@ def patch_bmg(self, gamefile): # gamefile est le fichier .szs trouvé dans le /
trackend = "2328" trackend = "2328"
bmgtracks = bmgtracks[bmgtracks.find(trackheader) + len(trackheader):bmgtracks.find(trackend)] 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.write("#BMG\n\n"
f" 703e\t= {self.translate('Aléatoire: Toutes les pistes', lang=bmglang)}\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" f" 703f\t= {self.translate('Aléatoire: Pistes Originales', lang=bmglang)}\n"

View file

@ -1,5 +1,7 @@
from tkinter import messagebox
from threading import Thread from threading import Thread
import subprocess import subprocess
import shutil
import json import json
import glob import glob
import os import os
@ -31,17 +33,23 @@ def patch_file(self):
for i, file in enumerate(fc["img"]): 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) 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"], 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"): for file in glob.glob(self.path_mkwf+"/files/Scene/UI/MenuSingle_?.szs"):
self.patch_bmg(file) self.patch_bmg(file)
if not(os.path.exists("./file/auto-add/")): if os.path.exists("./file/auto-add"): shutil.rmtree("./file/auto-add")
subprocess.run(["./tools/szs/wszst", "AUTOADD", self.path_mkwf + "/files/Race/Course/", "--DEST", if not(os.path.exists(self.path_mkwf + "/tmp/")): os.makedirs(self.path_mkwf + "/tmp/")
"./file/auto-add/"], creationflags=CREATE_NO_WINDOW) 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 max_process = 8
process_list = {} process_list = {}
error_count, error_max = 0, 3
for i, file in enumerate(os.listdir("./file/Track-WU8/")): for i, file in enumerate(os.listdir("./file/Track-WU8/")):
while True: 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" + self.Progress(statut=self.translate("Conversion des courses")+f"\n({i + 1}/{total_track})\n" +
"\n".join(process_list.keys()), add=1) "\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([ process_list[file] = subprocess.Popen([
"./tools/szs/wszst", "NORMALIZE", "./file/Track-WU8/" + file, "--DEST", "./tools/szs/wszst", "NORMALIZE", "./file/Track-WU8/" + file, "--DEST",
"./file/Track/%N.szs", "--szs", "--overwrite", "--autoadd-path", "./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 break
else: else:
for process in process_list: for process in process_list:
if process_list[process] is not None: if process_list[process] is not None:
if not (process_list[process].poll() is None): returncode = process_list[process].poll()
process_list.pop(process) if returncode is None: pass # if the process is still running
break 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: else:
process_list.pop(process) process_list.pop(process)
break break
self.Progress(show=False)
self.button_install_mod.grid(row=2, column=1, sticky="NEWS") self.button_install_mod.grid(row=2, column=1, sticky="NEWS")
self.listbox_outputformat.grid(row=2, column=2, sticky="NEWS") self.listbox_outputformat.grid(row=2, column=2, sticky="NEWS")
except: except: self.log_error()
self.log_error() finally: self.Progress(show=False)
t = Thread(target=func) t = Thread(target=func)
t.setDaemon(True) t.setDaemon(True)

View file

@ -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"}

View file

@ -1,7 +1,7 @@
{ {
"version": "0.6", "version": "0.6",
"subversion": "0", "subversion": "1",
"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", "changelog": "- JAP, USA and KOR version are now supported by the installer !",
"download_bin": "https://github.com/Faraphel/MKWF-Install/releases/download/0.6/MKWF.v0.6.zip", "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" "updater_bin": "https://github.com/Faraphel/MKWF-Install/raw/master/Updater/Updater.zip"
} }