mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-03 11:18:26 +02:00
arenas are now supported by the installer
This commit is contained in:
parent
fbeb66250d
commit
2aa84b8fab
3 changed files with 69 additions and 35 deletions
|
@ -15,7 +15,7 @@ class CT_Config:
|
||||||
file_process: dict = None, file_structure: dict = None, default_sort: str = "",
|
file_process: dict = None, file_structure: dict = None, default_sort: str = "",
|
||||||
cup: list = None, tracks_list: list = None, add_original_track_prefix: bool = True,
|
cup: list = None, tracks_list: list = None, add_original_track_prefix: bool = True,
|
||||||
swap_original_order: bool = True, keep_original_track: bool = True,
|
swap_original_order: bool = True, keep_original_track: bool = True,
|
||||||
enable_random_cup: bool = True,
|
enable_random_cup: bool = True, arenas: list = None,
|
||||||
*args, **kwargs):
|
*args, **kwargs):
|
||||||
|
|
||||||
self.version = version
|
self.version = version
|
||||||
|
@ -32,6 +32,7 @@ class CT_Config:
|
||||||
|
|
||||||
self.ordered_cups = []
|
self.ordered_cups = []
|
||||||
self.unordered_tracks = []
|
self.unordered_tracks = []
|
||||||
|
self.arenas = []
|
||||||
|
|
||||||
self.default_track = default_track
|
self.default_track = default_track
|
||||||
|
|
||||||
|
@ -61,6 +62,12 @@ class CT_Config:
|
||||||
track = get_trackdata_from_json(track_json)
|
track = get_trackdata_from_json(track_json)
|
||||||
self.unordered_tracks.extend([track] * track.weight)
|
self.unordered_tracks.extend([track] * track.weight)
|
||||||
|
|
||||||
|
for arena_json in arenas if arenas else []:
|
||||||
|
# arena
|
||||||
|
arena_json["is_arena"] = True
|
||||||
|
arena = get_trackdata_from_json(arena_json)
|
||||||
|
self.arenas.append(arena)
|
||||||
|
|
||||||
if pack_path:
|
if pack_path:
|
||||||
with open(f"{pack_path}/file_process.json", encoding="utf8") as fp_file:
|
with open(f"{pack_path}/file_process.json", encoding="utf8") as fp_file:
|
||||||
self.file_process = json.load(fp_file)
|
self.file_process = json.load(fp_file)
|
||||||
|
@ -142,6 +149,13 @@ class CT_Config:
|
||||||
ctfile.write(cup.get_ctfile(race=False, **kwargs))
|
ctfile.write(cup.get_ctfile(race=False, **kwargs))
|
||||||
rctfile.write(cup.get_ctfile(race=True, **kwargs))
|
rctfile.write(cup.get_ctfile(race=True, **kwargs))
|
||||||
|
|
||||||
|
if self.arenas:
|
||||||
|
ctfile.write("\n"); rctfile.write("\n")
|
||||||
|
|
||||||
|
for arena in self.arenas:
|
||||||
|
ctfile.write(arena.get_ctfile(race=False, **kwargs))
|
||||||
|
rctfile.write(arena.get_ctfile(race=True, **kwargs))
|
||||||
|
|
||||||
def get_tracks(self):
|
def get_tracks(self):
|
||||||
for data in self.unordered_tracks + self.ordered_cups:
|
for data in self.unordered_tracks + self.ordered_cups:
|
||||||
for track in data.get_tracks(): yield track
|
for track in data.get_tracks(): yield track
|
||||||
|
@ -230,3 +244,7 @@ class CT_Config:
|
||||||
possibilities.add(key)
|
possibilities.add(key)
|
||||||
|
|
||||||
return sorted(possibilities)
|
return sorted(possibilities)
|
||||||
|
|
||||||
|
def get_tracks_and_arenas(self):
|
||||||
|
for track in self.get_tracks(): yield track
|
||||||
|
for arena in self.arenas: yield arena
|
||||||
|
|
|
@ -291,7 +291,6 @@ class Game:
|
||||||
with open(extra_common_path, "w", encoding="utf8") as f:
|
with open(extra_common_path, "w", encoding="utf8") as f:
|
||||||
f.write("#BMG\n")
|
f.write("#BMG\n")
|
||||||
|
|
||||||
if self.common.ct_config.keep_original_track:
|
|
||||||
for bmgtrack in bmgtracks.split("\n"):
|
for bmgtrack in bmgtracks.split("\n"):
|
||||||
if "=" in bmgtrack:
|
if "=" in bmgtrack:
|
||||||
|
|
||||||
|
@ -299,6 +298,8 @@ class Game:
|
||||||
track_name = bmgtrack[bmgtrack.find("= ") + 2:]
|
track_name = bmgtrack[bmgtrack.find("= ") + 2:]
|
||||||
|
|
||||||
if "T" in bmgtrack[:bmgtrack.find("=")]:
|
if "T" in bmgtrack[:bmgtrack.find("=")]:
|
||||||
|
if not self.common.ct_config.keep_original_track: continue
|
||||||
|
|
||||||
start_track_id: int = bmgtrack.find("T") # index where the bmg track definition start
|
start_track_id: int = bmgtrack.find("T") # index where the bmg track definition start
|
||||||
track_id = bmgtrack[start_track_id:start_track_id + 3]
|
track_id = bmgtrack[start_track_id:start_track_id + 3]
|
||||||
if track_id[1] in "1234": # if the track is a original track from the wii
|
if track_id[1] in "1234": # if the track is a original track from the wii
|
||||||
|
@ -317,14 +318,18 @@ class Game:
|
||||||
track_id = hex(bmgID_track_move[track_id])[2:]
|
track_id = hex(bmgID_track_move[track_id])[2:]
|
||||||
|
|
||||||
else: # Arena
|
else: # Arena
|
||||||
start_track_id = bmgtrack.find("U") + 1 # index where the bmg arena definition start
|
start_track_id: int = bmgtrack.find("U") # index where the bmg arena definition start
|
||||||
track_id = bmgtrack[start_track_id:start_track_id + 2]
|
track_id = bmgtrack[start_track_id:start_track_id + 3]
|
||||||
track_id = hex((int(track_id[0]) - 1) * 5 + (int(track_id[1]) - 1) + 0x7020)[2:]
|
|
||||||
|
if track_id[0] == "2": # if this is the retro cup of arenas
|
||||||
|
prefix, *track_name = track_name.split(" ")
|
||||||
|
track_name = " ".join(track_name)
|
||||||
|
prefix = "\\\\c{" + Track.tags_color[prefix] + "}" + prefix + "\\\\c{off}"
|
||||||
|
|
||||||
if not self.common.ct_config.add_original_track_prefix: prefix = ""
|
if not self.common.ct_config.add_original_track_prefix: prefix = ""
|
||||||
f.write(f" {track_id}\t= {prefix}{track_name}\n")
|
f.write(f" {track_id}\t= {prefix}{track_name}\n")
|
||||||
|
|
||||||
else:
|
if not self.common.ct_config.keep_original_track:
|
||||||
for cup_index, cup in enumerate(self.common.ct_config.get_all_cups(), start=1):
|
for cup_index, cup in enumerate(self.common.ct_config.get_all_cups(), start=1):
|
||||||
if cup_index > 8: break # only keep the 8 first cup
|
if cup_index > 8: break # only keep the 8 first cup
|
||||||
for track_index, track in enumerate(cup.get_tracks(), start=1):
|
for track_index, track in enumerate(cup.get_tracks(), start=1):
|
||||||
|
@ -334,6 +339,13 @@ class Game:
|
||||||
f"\n"
|
f"\n"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
for arena in self.common.ct_config.arenas:
|
||||||
|
f.write(
|
||||||
|
f" U{arena.special[1:]}\t= "
|
||||||
|
f"{arena.get_track_formatted_name(filter_highlight=self.common.ct_config.filter_track_highlight)}"
|
||||||
|
f"\n"
|
||||||
|
)
|
||||||
|
|
||||||
def patch_bmg(self, gamefile: str) -> None:
|
def patch_bmg(self, gamefile: str) -> None:
|
||||||
"""
|
"""
|
||||||
Patch bmg file (text file)
|
Patch bmg file (text file)
|
||||||
|
@ -368,7 +380,6 @@ class Game:
|
||||||
bmgs=[gamefile + ".d/message/Common.bmg", "./file/ExtraCommon.txt"])
|
bmgs=[gamefile + ".d/message/Common.bmg", "./file/ExtraCommon.txt"])
|
||||||
|
|
||||||
shutil.rmtree(gamefile + ".d")
|
shutil.rmtree(gamefile + ".d")
|
||||||
os.remove("./file/ExtraCommon.txt")
|
|
||||||
|
|
||||||
def process_bmg_replacement(bmg_content: str, bmg_language: str) -> str:
|
def process_bmg_replacement(bmg_content: str, bmg_language: str) -> str:
|
||||||
"""
|
"""
|
||||||
|
@ -589,7 +600,7 @@ class Game:
|
||||||
total_track = self.common.ct_config.get_tracks_count()
|
total_track = self.common.ct_config.get_tracks_count()
|
||||||
self.common.gui_main.progress(max=total_track, indeter=False, show=True)
|
self.common.gui_main.progress(max=total_track, indeter=False, show=True)
|
||||||
|
|
||||||
for i, track in enumerate(self.common.ct_config.get_tracks()):
|
for i, track in enumerate(self.common.ct_config.get_tracks_and_arenas()):
|
||||||
while True:
|
while True:
|
||||||
max_process = self.common.gui_main.intvar_process_track.get()
|
max_process = self.common.gui_main.intvar_process_track.get()
|
||||||
if len(thread_list) < max_process:
|
if len(thread_list) < max_process:
|
||||||
|
|
|
@ -37,7 +37,8 @@ class Track:
|
||||||
|
|
||||||
def __init__(self, name: str = " ", author: str = "Nintendo", special: str = "T11", music: str = "T11",
|
def __init__(self, name: str = " ", author: str = "Nintendo", special: str = "T11", music: str = "T11",
|
||||||
sha1: str = None, since_version: str = None, score: int = -1, warning: int = 0,
|
sha1: str = None, since_version: str = None, score: int = -1, warning: int = 0,
|
||||||
version: str = None, tags: list = None, is_in_group: bool = False, weight: int = 1, *args, **kwargs):
|
version: str = None, tags: list = None, is_in_group: bool = False, weight: int = 1,
|
||||||
|
is_arena: bool = False, *args, **kwargs):
|
||||||
"""
|
"""
|
||||||
Track class
|
Track class
|
||||||
:param name: track name
|
:param name: track name
|
||||||
|
@ -69,6 +70,7 @@ class Track:
|
||||||
self.weight = weight
|
self.weight = weight
|
||||||
|
|
||||||
self._is_in_group = is_in_group
|
self._is_in_group = is_in_group
|
||||||
|
self._is_arena = is_arena
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
"""
|
"""
|
||||||
|
@ -127,16 +129,19 @@ class Track:
|
||||||
:param race: is it a text used for Race_*.szs ?
|
:param race: is it a text used for Race_*.szs ?
|
||||||
:return: ctfile definition for the track
|
:return: ctfile definition for the track
|
||||||
"""
|
"""
|
||||||
track_type = "T"
|
track_type = " T"
|
||||||
if not filter_random_new:
|
if not filter_random_new:
|
||||||
filter_random_new = lambda track: not (track.tags_retro in track.tags) and track.warning != WARNING_DOLPHIN
|
filter_random_new = lambda track: not (track.tags_retro in track.tags) and track.warning != WARNING_DOLPHIN
|
||||||
track_flag = 0x01 if filter_random_new(self) else 0x00
|
track_flag = 0x01 if filter_random_new(self) else 0x00
|
||||||
|
|
||||||
if self._is_in_group:
|
if self._is_in_group:
|
||||||
track_type = "H"
|
track_type = " H"
|
||||||
track_flag |= 0x04
|
track_flag |= 0x04
|
||||||
|
|
||||||
ctfile_track = f' {track_type} {self.music}; {self.special}; {hex(track_flag)}; '
|
if self._is_arena:
|
||||||
|
track_type = "A"
|
||||||
|
|
||||||
|
ctfile_track = f'{track_type} {self.music}; {self.special}; {hex(track_flag)}; '
|
||||||
|
|
||||||
if race:
|
if race:
|
||||||
ctfile_track += (
|
ctfile_track += (
|
||||||
|
|
Loading…
Reference in a new issue