135 lines
4.5 KiB
Python
135 lines
4.5 KiB
Python
from contextlib import suppress
|
|
|
|
import diva
|
|
import shutil
|
|
import os
|
|
import subprocess
|
|
import tempfile
|
|
import utage
|
|
|
|
from distutils.dir_util import copy_tree, remove_tree
|
|
from glob import glob
|
|
|
|
|
|
def update_all(
|
|
cache_dir, update_dir, translation_dir, extract_dir, script_dir, languages,
|
|
):
|
|
print("Cleaning cache")
|
|
cleanup_cache(cache_dir)
|
|
|
|
print("Copying images")
|
|
copy_images(cache_dir, update_dir)
|
|
|
|
print("Processing TSV files")
|
|
update_tsv(cache_dir, update_dir, extract_dir, translation_dir, languages)
|
|
|
|
print("Processing Quest Json files")
|
|
diva.quest.update_missions(extract_dir, translation_dir, languages)
|
|
|
|
# this code isn't going to run on windows (it is in WSL though) because i need to rewrite it
|
|
# it just calls my zsh tools and generates it that way, need to replace them
|
|
# with real python or something
|
|
|
|
# first copy over the necessary avtools to the extract dir
|
|
# TODO make it so that you don't need to copy them over (for example call them with python)
|
|
print("Copying necessary tools into extracting directory")
|
|
shutil.copy2(os.path.join(script_dir, "acb_extract.exe"), extract_dir)
|
|
shutil.copy2(os.path.join(script_dir, "usm_extract.exe"), extract_dir)
|
|
shutil.copy2(os.path.join(script_dir, "clHCA"), extract_dir)
|
|
|
|
print("Processing Sound Effects")
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Android/Asset/Sound/Se"),
|
|
os.path.join(extract_dir, "Se"),
|
|
)
|
|
subprocess.run(
|
|
os.path.join(script_dir, "update_se.zsh"), shell=True, cwd=extract_dir
|
|
)
|
|
copy_tree(os.path.join(extract_dir, "se_extracted"), os.path.join(update_dir, "Se"))
|
|
|
|
print("Processing BGM - don't forget to copy that loop file")
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Android/Asset/Sound/Bgm"),
|
|
os.path.join(extract_dir, "Bgm"),
|
|
)
|
|
subprocess.run(
|
|
os.path.join(script_dir, "update_bgm.zsh"), shell=True, cwd=extract_dir
|
|
)
|
|
copy_tree(
|
|
os.path.join(extract_dir, "bgm_extracted"), os.path.join(update_dir, "Bgm")
|
|
)
|
|
|
|
print("Processing voices")
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Android/Asset/Sound/Voice"),
|
|
os.path.join(extract_dir, "Voice"),
|
|
)
|
|
subprocess.run(
|
|
os.path.join(script_dir, "update_voice.zsh"), shell=True, cwd=extract_dir
|
|
)
|
|
copy_tree(
|
|
os.path.join(extract_dir, "voice_extracted"), os.path.join(update_dir, "Voice")
|
|
)
|
|
|
|
print("Processing movies - this might take forever")
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Common/Asset/Movie"),
|
|
os.path.join(extract_dir, "Movie"),
|
|
)
|
|
subprocess.run(
|
|
os.path.join(script_dir, "update_movie.zsh"), shell=True, cwd=extract_dir
|
|
)
|
|
copy_tree(
|
|
os.path.join(extract_dir, "movie_extracted"),
|
|
os.path.join(update_dir, "Asset/Movie"),
|
|
)
|
|
|
|
|
|
def update_tsv(cache_dir, update_dir, extract_dir, translation_dir, languages):
|
|
utage_tmp = tempfile.mkdtemp()
|
|
copy_tree(os.path.join(cache_dir, "Common/Asset/Utage"), utage_tmp)
|
|
utage.crypt.crypt_dir(
|
|
utage_tmp, bytearray("SampleSecretKey", "utf-8"), False, False
|
|
)
|
|
for encrypted in glob(os.path.join(utage_tmp, "**/*.utage"), recursive=True):
|
|
try:
|
|
os.remove(encrypted)
|
|
except:
|
|
pass
|
|
|
|
# copy over files for the quest updater
|
|
copy_tree(utage_tmp, os.path.join(extract_dir, "Common/Asset/Utage"))
|
|
shutil.copy2(os.path.join(cache_dir, "QuestMst.db"), extract_dir)
|
|
shutil.copy2(os.path.join(cache_dir, "QuestSceneMst.db"), extract_dir)
|
|
shutil.copy2(os.path.join(cache_dir, "QuestPartMst.db"), extract_dir)
|
|
shutil.copy2(os.path.join(cache_dir, "ResourceEntry.db"), extract_dir)
|
|
|
|
utage.translate.translate_dir(
|
|
utage_tmp,
|
|
os.path.join(update_dir, "Utage"),
|
|
os.path.join(translation_dir, "Missions"),
|
|
False,
|
|
)
|
|
utage.names.update_names(utage_tmp, translation_dir, languages, False)
|
|
copy_tree(os.path.join(utage_tmp, "Diva"), os.path.join(update_dir, "Utage/Diva"))
|
|
remove_tree(utage_tmp)
|
|
|
|
|
|
def copy_images(cache_dir, update_dir):
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Common/Asset/Image"),
|
|
os.path.join(update_dir, "Asset/Image"),
|
|
)
|
|
copy_tree(
|
|
os.path.join(cache_dir, "Common/Sample"), os.path.join(update_dir, "Sample"),
|
|
)
|
|
|
|
|
|
def cleanup_cache(cache_dir):
|
|
with suppress(FileNotFoundError):
|
|
shutil.rmtree(os.path.join(cache_dir, "Common/Asset/Utage/event32"))
|
|
os.remove(
|
|
os.path.join(
|
|
cache_dir, "Common/Asset/Utage/side01/Scenario/Sheet2.tsv.utage"
|
|
)
|
|
)
|