mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-03 03:08:29 +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 = "",
|
||||
cup: list = None, tracks_list: list = None, add_original_track_prefix: 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):
|
||||
|
||||
self.version = version
|
||||
|
@ -32,6 +32,7 @@ class CT_Config:
|
|||
|
||||
self.ordered_cups = []
|
||||
self.unordered_tracks = []
|
||||
self.arenas = []
|
||||
|
||||
self.default_track = default_track
|
||||
|
||||
|
@ -61,6 +62,12 @@ class CT_Config:
|
|||
track = get_trackdata_from_json(track_json)
|
||||
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:
|
||||
with open(f"{pack_path}/file_process.json", encoding="utf8") as fp_file:
|
||||
self.file_process = json.load(fp_file)
|
||||
|
@ -142,6 +149,13 @@ class CT_Config:
|
|||
ctfile.write(cup.get_ctfile(race=False, **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):
|
||||
for data in self.unordered_tracks + self.ordered_cups:
|
||||
for track in data.get_tracks(): yield track
|
||||
|
@ -230,3 +244,7 @@ class CT_Config:
|
|||
possibilities.add(key)
|
||||
|
||||
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,42 +291,47 @@ class Game:
|
|||
with open(extra_common_path, "w", encoding="utf8") as f:
|
||||
f.write("#BMG\n")
|
||||
|
||||
if self.common.ct_config.keep_original_track:
|
||||
for bmgtrack in bmgtracks.split("\n"):
|
||||
if "=" in bmgtrack:
|
||||
for bmgtrack in bmgtracks.split("\n"):
|
||||
if "=" in bmgtrack:
|
||||
|
||||
prefix = ""
|
||||
track_name = bmgtrack[bmgtrack.find("= ") + 2:]
|
||||
prefix = ""
|
||||
track_name = bmgtrack[bmgtrack.find("= ") + 2:]
|
||||
|
||||
if "T" in bmgtrack[:bmgtrack.find("=")]:
|
||||
start_track_id: int = bmgtrack.find("T") # index where the bmg track definition start
|
||||
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
|
||||
prefix = "Wii"
|
||||
if prefix in Track.tags_color:
|
||||
prefix = "\\\\c{" + Track.tags_color[prefix] + "}" + prefix + "\\\\c{off}"
|
||||
prefix += " "
|
||||
if "T" in bmgtrack[:bmgtrack.find("=")]:
|
||||
if not self.common.ct_config.keep_original_track: continue
|
||||
|
||||
elif track_id[1] in "5678": # if the track is a retro track from the original game
|
||||
prefix, *track_name = track_name.split(" ")
|
||||
track_name = " ".join(track_name)
|
||||
if prefix in Track.tags_color:
|
||||
prefix = "\\\\c{" + Track.tags_color[prefix] + "}" + prefix + "\\\\c{off}"
|
||||
prefix += " "
|
||||
start_track_id: int = bmgtrack.find("T") # index where the bmg track definition start
|
||||
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
|
||||
prefix = "Wii"
|
||||
if prefix in Track.tags_color:
|
||||
prefix = "\\\\c{" + Track.tags_color[prefix] + "}" + prefix + "\\\\c{off}"
|
||||
prefix += " "
|
||||
|
||||
track_id = hex(bmgID_track_move[track_id])[2:]
|
||||
elif track_id[1] in "5678": # if the track is a retro track from the original game
|
||||
prefix, *track_name = track_name.split(" ")
|
||||
track_name = " ".join(track_name)
|
||||
if prefix in Track.tags_color:
|
||||
prefix = "\\\\c{" + Track.tags_color[prefix] + "}" + prefix + "\\\\c{off}"
|
||||
prefix += " "
|
||||
|
||||
else: # Arena
|
||||
start_track_id = bmgtrack.find("U") + 1 # index where the bmg arena definition start
|
||||
track_id = bmgtrack[start_track_id:start_track_id + 2]
|
||||
track_id = hex((int(track_id[0]) - 1) * 5 + (int(track_id[1]) - 1) + 0x7020)[2:]
|
||||
track_id = hex(bmgID_track_move[track_id])[2:]
|
||||
|
||||
if not self.common.ct_config.add_original_track_prefix: prefix = ""
|
||||
f.write(f" {track_id}\t= {prefix}{track_name}\n")
|
||||
else: # Arena
|
||||
start_track_id: int = bmgtrack.find("U") # index where the bmg arena definition start
|
||||
track_id = bmgtrack[start_track_id:start_track_id + 3]
|
||||
|
||||
else:
|
||||
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 = ""
|
||||
f.write(f" {track_id}\t= {prefix}{track_name}\n")
|
||||
|
||||
if not self.common.ct_config.keep_original_track:
|
||||
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):
|
||||
f.write(
|
||||
f" T{cup_index}{track_index}\t= "
|
||||
|
@ -334,6 +339,13 @@ class Game:
|
|||
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:
|
||||
"""
|
||||
Patch bmg file (text file)
|
||||
|
@ -368,7 +380,6 @@ class Game:
|
|||
bmgs=[gamefile + ".d/message/Common.bmg", "./file/ExtraCommon.txt"])
|
||||
|
||||
shutil.rmtree(gamefile + ".d")
|
||||
os.remove("./file/ExtraCommon.txt")
|
||||
|
||||
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()
|
||||
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:
|
||||
max_process = self.common.gui_main.intvar_process_track.get()
|
||||
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",
|
||||
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
|
||||
:param name: track name
|
||||
|
@ -69,6 +70,7 @@ class Track:
|
|||
self.weight = weight
|
||||
|
||||
self._is_in_group = is_in_group
|
||||
self._is_arena = is_arena
|
||||
|
||||
def __repr__(self) -> str:
|
||||
"""
|
||||
|
@ -127,16 +129,19 @@ class Track:
|
|||
:param race: is it a text used for Race_*.szs ?
|
||||
:return: ctfile definition for the track
|
||||
"""
|
||||
track_type = "T"
|
||||
track_type = " T"
|
||||
if not filter_random_new:
|
||||
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
|
||||
|
||||
if self._is_in_group:
|
||||
track_type = "H"
|
||||
track_type = " H"
|
||||
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:
|
||||
ctfile_track += (
|
||||
|
|
Loading…
Reference in a new issue