Skip to content

Commit c7811c6

Browse files
committed
Update
1 parent 42fd94b commit c7811c6

File tree

2 files changed

+50
-31
lines changed

2 files changed

+50
-31
lines changed

.vscode/launch.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@
1010
"type": "debugpy",
1111
"request": "launch",
1212
"module": "UnityPyTypetreeCodegen",
13-
"args": [
14-
"--files",
15-
"D:\\Reverse\\proseka_reverse\\game_binary\\v510\\exported\\shim",
16-
// "--json",
17-
// "c:\\Users\\mos9527\\TypetreeTests\\Test\\TypeTree.json",
18-
"--filter",
19-
"(Live2D|Cubism)+.*"
13+
"args": [
14+
"--il2cpp",
15+
"D:\\Reverse\\proseka_reverse\\UntitledCharts\\scripts\\.temp\\typetree\\libil2cpp.so",
16+
"--metadata",
17+
"D:\\Reverse\\proseka_reverse\\UntitledCharts\\scripts\\.temp\\typetree\\global-metadata.dat"
2018
]
2119
}
2220
]

UnityPyTypetreeCodegen/__main__.py

Lines changed: 45 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -303,11 +303,11 @@ def emit_line(*lines: str):
303303
f.write("\n")
304304

305305
logger.info(
306-
f"Subpass 1: Generating class dependency graph for {namespace or "<default namespace>"}"
306+
f"Subpass 1: Generating class dependency graph for {namespace or '<default namespace>'}"
307307
)
308308
emit_line("# fmt: off")
309309
emit_line("# Auto-generated by https://github.com/mos9527/UnityPyTypetreeCodegen")
310-
emit_line(f"# Python definition for {namespace or "<default namespace>"}", "")
310+
emit_line(f"# Python definition for {namespace or '<default namespace>'}", "")
311311
if import_root:
312312
emit_line(f"from {import_root} import *")
313313
for clazz, parent in import_defs.items():
@@ -452,29 +452,44 @@ def __open(fname: str):
452452

453453

454454
import re, logging
455-
from UnityPy.helpers.TypeTreeGenerator import TypeTreeGenerator
456-
455+
from TypeTreeGeneratorAPI import TypeTreeGenerator
457456

458457
def __main__():
459458
parser = argparse.ArgumentParser()
460-
parser.add_argument(
461-
"--files",
462-
help="Load typetree dump from game assembly folder containing the DLLs",
463-
)
464-
parser.add_argument(
465-
"--json",
466-
help="Load tree dump in json format {str[fullname]: List[TypeTreeNode]},...",
467-
)
468459
parser.add_argument(
469460
"--unity-version",
470461
help="Unity version to use for typetree generation",
471462
default="2022.3.21f1",
472463
)
464+
parser.add_argument(
465+
"--backend",
466+
help="Backend to use for code generation",
467+
default="AssetRipper",
468+
)
473469
parser.add_argument(
474470
"--filter",
475471
help="Filter classnames by regex",
476472
default=".*",
477473
)
474+
parser.add_argument(
475+
"--json",
476+
help="[JSON] Load tree dump in json format {str[fullname]: List[TypeTreeNode]},...",
477+
)
478+
parser.add_argument(
479+
"--asm",
480+
help="[Asm] Load typetree dump from game assembly DLL",
481+
type=str
482+
)
483+
parser.add_argument(
484+
"--il2cpp",
485+
help="[IL2CPP] Load typetree dump from IL2CPP binaries",
486+
type=str
487+
)
488+
parser.add_argument(
489+
"--metadata",
490+
help="[IL2CPP] Load typetree dump from metadata files",
491+
type=str
492+
)
478493
parser.add_argument(
479494
"--log-level",
480495
choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"],
@@ -490,20 +505,26 @@ def __main__():
490505
shutil.rmtree(args.outdir, ignore_errors=True)
491506
os.makedirs(args.outdir, exist_ok=True)
492507
typetree = dict()
493-
if args.files:
494-
generator = TypeTreeGenerator(args.unity_version)
495-
generator.load_local_dll_folder(args.files)
496-
defines = generator.get_monobehavior_definitions()
497-
typetree = dict()
498-
for module, fullname in defines:
499-
try:
500-
nodes = generator.get_nodes(module, fullname)
501-
typetree[fullname] = nodes
502-
except Exception as e:
503-
logger.error(f"Failed to generate typetree for {module}.{fullname}")
504-
if args.json:
508+
gen = TypeTreeGenerator(args.unity_version, args.backend)
509+
def populate_gen():
510+
# https://github.com/UnityPy-Org/TypeTreeGeneratorAPI/pull/1
511+
for asm,clz in gen.get_monobehavior_definitions():
512+
node = gen.get_nodes_as_json(asm, clz)
513+
pass
514+
if args.asm:
515+
print("Loading .NET Assembly", args.asm)
516+
gen.load_dll(args.asm)
517+
populate_gen()
518+
elif args.il2cpp and args.metadata:
519+
print("Loading IL2CPP", args.il2cpp, args.metadata)
520+
gen.load_il2cpp(open(args.il2cpp, "rb").read(), open(args.metadata, "rb").read())
521+
populate_gen()
522+
elif args.json:
523+
print("Loading JSON", args.json)
505524
with open(args.json, "r") as f:
506525
typetree = json.load(f)
526+
else:
527+
raise ValueError("No valid input source specified.")
507528
if typetree:
508529
regex = re.compile(args.filter)
509530
typetree = {k: v for k, v in typetree.items() if regex.match(k)}

0 commit comments

Comments
 (0)