From 6b857c6c711b3a7ee23aab886fbe55cf392b1df3 Mon Sep 17 00:00:00 2001 From: Dragorn421 Date: Sun, 9 Feb 2025 11:39:24 +0100 Subject: [PATCH] handle dependencies between xmls --- assets/xml/objects/object_demo_6k.xml | 1 + assets/xml/objects/object_demo_kekkai.xml | 1 + assets/xml/objects/object_efc_erupc.xml | 1 + assets/xml/objects/object_fish.xml | 1 + assets/xml/objects/object_fz.xml | 1 + assets/xml/objects/object_gi_arrow.xml | 1 + assets/xml/objects/object_gi_arrowcase.xml | 1 + assets/xml/objects/object_gi_bean.xml | 1 + assets/xml/objects/object_gi_bomb_1.xml | 1 + assets/xml/objects/object_gi_bomb_2.xml | 1 + assets/xml/objects/object_gi_bombpouch.xml | 1 + assets/xml/objects/object_gi_boomerang.xml | 1 + assets/xml/objects/object_gi_boots_2.xml | 1 + assets/xml/objects/object_gi_bosskey.xml | 1 + assets/xml/objects/object_gi_bottle.xml | 1 + .../xml/objects/object_gi_bottle_letter.xml | 1 + assets/xml/objects/object_gi_bow.xml | 1 + assets/xml/objects/object_gi_bracelet.xml | 1 + assets/xml/objects/object_gi_brokensword.xml | 1 + assets/xml/objects/object_gi_butterfly.xml | 1 + assets/xml/objects/object_gi_coin.xml | 1 + assets/xml/objects/object_gi_compass.xml | 1 + assets/xml/objects/object_gi_dekupouch.xml | 1 + assets/xml/objects/object_gi_egg.xml | 1 + assets/xml/objects/object_gi_eye_lotion.xml | 1 + assets/xml/objects/object_gi_fire.xml | 1 + assets/xml/objects/object_gi_fish.xml | 1 + assets/xml/objects/object_gi_frog.xml | 1 + assets/xml/objects/object_gi_gerudo.xml | 1 + assets/xml/objects/object_gi_ghost.xml | 1 + assets/xml/objects/object_gi_glasses.xml | 1 + assets/xml/objects/object_gi_gloves.xml | 1 + assets/xml/objects/object_gi_goddess.xml | 1 + assets/xml/objects/object_gi_grass.xml | 1 + assets/xml/objects/object_gi_hammer.xml | 1 + assets/xml/objects/object_gi_heart.xml | 1 + assets/xml/objects/object_gi_hearts.xml | 1 + assets/xml/objects/object_gi_hookshot.xml | 1 + assets/xml/objects/object_gi_hoverboots.xml | 1 + assets/xml/objects/object_gi_insect.xml | 1 + assets/xml/objects/object_gi_jewel.xml | 1 + assets/xml/objects/object_gi_key.xml | 1 + assets/xml/objects/object_gi_ki_tan_mask.xml | 1 + assets/xml/objects/object_gi_liquid.xml | 1 + assets/xml/objects/object_gi_longsword.xml | 1 + assets/xml/objects/object_gi_m_arrow.xml | 1 + assets/xml/objects/object_gi_magicpot.xml | 1 + assets/xml/objects/object_gi_map.xml | 1 + assets/xml/objects/object_gi_medal.xml | 1 + assets/xml/objects/object_gi_melody.xml | 1 + assets/xml/objects/object_gi_milk.xml | 1 + assets/xml/objects/object_gi_mushroom.xml | 1 + assets/xml/objects/object_gi_niwatori.xml | 1 + assets/xml/objects/object_gi_nuts.xml | 1 + assets/xml/objects/object_gi_ocarina.xml | 1 + assets/xml/objects/object_gi_ocarina_0.xml | 1 + assets/xml/objects/object_gi_pachinko.xml | 1 + assets/xml/objects/object_gi_powder.xml | 1 + assets/xml/objects/object_gi_prescription.xml | 1 + assets/xml/objects/object_gi_rabit_mask.xml | 1 + assets/xml/objects/object_gi_redead_mask.xml | 1 + assets/xml/objects/object_gi_rupy.xml | 1 + assets/xml/objects/object_gi_saw.xml | 1 + assets/xml/objects/object_gi_scale.xml | 1 + assets/xml/objects/object_gi_seed.xml | 1 + assets/xml/objects/object_gi_shield_1.xml | 1 + assets/xml/objects/object_gi_shield_2.xml | 1 + assets/xml/objects/object_gi_shield_3.xml | 1 + assets/xml/objects/object_gi_skj_mask.xml | 1 + assets/xml/objects/object_gi_soul.xml | 1 + assets/xml/objects/object_gi_stick.xml | 1 + assets/xml/objects/object_gi_sutaru.xml | 1 + assets/xml/objects/object_gi_sword_1.xml | 1 + assets/xml/objects/object_gi_ticketstone.xml | 1 + assets/xml/objects/object_gi_truth_mask.xml | 1 + assets/xml/objects/object_god_lgt.xml | 1 + assets/xml/objects/object_kanban.xml | 1 + assets/xml/objects/object_kusa.xml | 1 + assets/xml/objects/object_link_boy.xml | 1 + assets/xml/objects/object_link_child.xml | 1 + assets/xml/objects/object_medal.xml | 1 + assets/xml/objects/object_nwc.xml | 1 + assets/xml/objects/object_owl.xml | 2 +- assets/xml/objects/object_po_composer.xml | 1 + assets/xml/objects/object_po_field.xml | 1 + assets/xml/objects/object_poh.xml | 1 + assets/xml/objects/object_ps.xml | 1 + assets/xml/objects/object_sb.xml | 1 + assets/xml/objects/object_siofuki.xml | 1 + assets/xml/objects/object_sst.xml | 1 + assets/xml/objects/object_sst_pal.xml | 1 + assets/xml/objects/object_st.xml | 1 + assets/xml/objects/object_stream.xml | 1 + assets/xml/objects/object_toki_objects.xml | 1 + assets/xml/objects/object_trap.xml | 1 + assets/xml/objects/object_ydan_objects.xml | 1 + assets/xml/objects/object_zo.xml | 1 + assets/xml/overlays/ovl_Boss_Ganon.xml | 1 + assets/xml/overlays/ovl_Boss_Ganon2.xml | 1 + assets/xml/overlays/ovl_Magic_Dark.xml | 1 + assets/xml/overlays/ovl_Oceff_Storm.xml | 1 + assets/xml/overlays/ovl_Oceff_Wipe4.xml | 1 + tools/assets/descriptor/base.py | 32 ++++++-- tools/assets/descriptor/n64resources.py | 5 +- tools/assets/extract/extase/memorymap.py | 35 ++++++-- .../extract/extase_oot64/dlist_resources.py | 8 +- tools/assets/extract/extract_xml_z64.py | 81 +++++++++++-------- tools/assets/extract/z64_resource_handlers.py | 5 +- 108 files changed, 215 insertions(+), 54 deletions(-) diff --git a/assets/xml/objects/object_demo_6k.xml b/assets/xml/objects/object_demo_6k.xml index 73058d5e46..e2de93db2e 100644 --- a/assets/xml/objects/object_demo_6k.xml +++ b/assets/xml/objects/object_demo_6k.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_demo_kekkai.xml b/assets/xml/objects/object_demo_kekkai.xml index 1b9c9b4027..8b7b739c64 100644 --- a/assets/xml/objects/object_demo_kekkai.xml +++ b/assets/xml/objects/object_demo_kekkai.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_efc_erupc.xml b/assets/xml/objects/object_efc_erupc.xml index 800d9535f1..13cc2ab033 100644 --- a/assets/xml/objects/object_efc_erupc.xml +++ b/assets/xml/objects/object_efc_erupc.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_fish.xml b/assets/xml/objects/object_fish.xml index f5ad4f6da0..2ce27bac3a 100644 --- a/assets/xml/objects/object_fish.xml +++ b/assets/xml/objects/object_fish.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_fz.xml b/assets/xml/objects/object_fz.xml index dad6fec5ce..bbed88b106 100644 --- a/assets/xml/objects/object_fz.xml +++ b/assets/xml/objects/object_fz.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_arrow.xml b/assets/xml/objects/object_gi_arrow.xml index 4b58787a9d..4ce9110cc1 100644 --- a/assets/xml/objects/object_gi_arrow.xml +++ b/assets/xml/objects/object_gi_arrow.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_arrowcase.xml b/assets/xml/objects/object_gi_arrowcase.xml index 267b0a734d..990576428d 100644 --- a/assets/xml/objects/object_gi_arrowcase.xml +++ b/assets/xml/objects/object_gi_arrowcase.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bean.xml b/assets/xml/objects/object_gi_bean.xml index e74247816f..2c6ce0cf12 100644 --- a/assets/xml/objects/object_gi_bean.xml +++ b/assets/xml/objects/object_gi_bean.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bomb_1.xml b/assets/xml/objects/object_gi_bomb_1.xml index bae86c11d8..5d7dab6d86 100644 --- a/assets/xml/objects/object_gi_bomb_1.xml +++ b/assets/xml/objects/object_gi_bomb_1.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bomb_2.xml b/assets/xml/objects/object_gi_bomb_2.xml index 1400c4a4d4..01f3956803 100644 --- a/assets/xml/objects/object_gi_bomb_2.xml +++ b/assets/xml/objects/object_gi_bomb_2.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bombpouch.xml b/assets/xml/objects/object_gi_bombpouch.xml index 07134748c3..42620ec94d 100644 --- a/assets/xml/objects/object_gi_bombpouch.xml +++ b/assets/xml/objects/object_gi_bombpouch.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_boomerang.xml b/assets/xml/objects/object_gi_boomerang.xml index 3c1a0fe7fc..fef261c489 100644 --- a/assets/xml/objects/object_gi_boomerang.xml +++ b/assets/xml/objects/object_gi_boomerang.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_boots_2.xml b/assets/xml/objects/object_gi_boots_2.xml index 8e9cd1028d..e172bd006c 100644 --- a/assets/xml/objects/object_gi_boots_2.xml +++ b/assets/xml/objects/object_gi_boots_2.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bosskey.xml b/assets/xml/objects/object_gi_bosskey.xml index e5e4bc86c9..8e93c10d1a 100644 --- a/assets/xml/objects/object_gi_bosskey.xml +++ b/assets/xml/objects/object_gi_bosskey.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bottle.xml b/assets/xml/objects/object_gi_bottle.xml index 3b0884a03f..0a27562954 100644 --- a/assets/xml/objects/object_gi_bottle.xml +++ b/assets/xml/objects/object_gi_bottle.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bottle_letter.xml b/assets/xml/objects/object_gi_bottle_letter.xml index 443219caf5..04b08dd673 100644 --- a/assets/xml/objects/object_gi_bottle_letter.xml +++ b/assets/xml/objects/object_gi_bottle_letter.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bow.xml b/assets/xml/objects/object_gi_bow.xml index 946e9c4965..6e9101b413 100644 --- a/assets/xml/objects/object_gi_bow.xml +++ b/assets/xml/objects/object_gi_bow.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_bracelet.xml b/assets/xml/objects/object_gi_bracelet.xml index 5a0b62a60a..da35c003f8 100644 --- a/assets/xml/objects/object_gi_bracelet.xml +++ b/assets/xml/objects/object_gi_bracelet.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_brokensword.xml b/assets/xml/objects/object_gi_brokensword.xml index 408741ac54..44cae3e100 100644 --- a/assets/xml/objects/object_gi_brokensword.xml +++ b/assets/xml/objects/object_gi_brokensword.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_butterfly.xml b/assets/xml/objects/object_gi_butterfly.xml index 76ac706096..9882d27954 100644 --- a/assets/xml/objects/object_gi_butterfly.xml +++ b/assets/xml/objects/object_gi_butterfly.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_coin.xml b/assets/xml/objects/object_gi_coin.xml index 22e29f255f..f65993465b 100644 --- a/assets/xml/objects/object_gi_coin.xml +++ b/assets/xml/objects/object_gi_coin.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_compass.xml b/assets/xml/objects/object_gi_compass.xml index 076229b11e..10c6fbb63a 100644 --- a/assets/xml/objects/object_gi_compass.xml +++ b/assets/xml/objects/object_gi_compass.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_dekupouch.xml b/assets/xml/objects/object_gi_dekupouch.xml index 3d6d95d98a..25cde931f2 100644 --- a/assets/xml/objects/object_gi_dekupouch.xml +++ b/assets/xml/objects/object_gi_dekupouch.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_egg.xml b/assets/xml/objects/object_gi_egg.xml index 2b2e2847db..ceae8be407 100644 --- a/assets/xml/objects/object_gi_egg.xml +++ b/assets/xml/objects/object_gi_egg.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_eye_lotion.xml b/assets/xml/objects/object_gi_eye_lotion.xml index 5128c5f6ff..86e053cd94 100644 --- a/assets/xml/objects/object_gi_eye_lotion.xml +++ b/assets/xml/objects/object_gi_eye_lotion.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_fire.xml b/assets/xml/objects/object_gi_fire.xml index a57fba6e86..3b81815d5f 100644 --- a/assets/xml/objects/object_gi_fire.xml +++ b/assets/xml/objects/object_gi_fire.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_fish.xml b/assets/xml/objects/object_gi_fish.xml index edb39dc297..75361b32da 100644 --- a/assets/xml/objects/object_gi_fish.xml +++ b/assets/xml/objects/object_gi_fish.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_frog.xml b/assets/xml/objects/object_gi_frog.xml index f180fd267b..8c5d616eb4 100644 --- a/assets/xml/objects/object_gi_frog.xml +++ b/assets/xml/objects/object_gi_frog.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_gerudo.xml b/assets/xml/objects/object_gi_gerudo.xml index 3be8d34620..26dc606ce0 100644 --- a/assets/xml/objects/object_gi_gerudo.xml +++ b/assets/xml/objects/object_gi_gerudo.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_ghost.xml b/assets/xml/objects/object_gi_ghost.xml index 186f4c74b7..e6c631c98e 100644 --- a/assets/xml/objects/object_gi_ghost.xml +++ b/assets/xml/objects/object_gi_ghost.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_glasses.xml b/assets/xml/objects/object_gi_glasses.xml index 63d32ab5ac..4a9cacf086 100644 --- a/assets/xml/objects/object_gi_glasses.xml +++ b/assets/xml/objects/object_gi_glasses.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_gloves.xml b/assets/xml/objects/object_gi_gloves.xml index 1b4282dcaa..fb273e95f4 100644 --- a/assets/xml/objects/object_gi_gloves.xml +++ b/assets/xml/objects/object_gi_gloves.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_goddess.xml b/assets/xml/objects/object_gi_goddess.xml index 50cbdd8918..6339012d47 100644 --- a/assets/xml/objects/object_gi_goddess.xml +++ b/assets/xml/objects/object_gi_goddess.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_grass.xml b/assets/xml/objects/object_gi_grass.xml index ae7834201a..2cc465c959 100644 --- a/assets/xml/objects/object_gi_grass.xml +++ b/assets/xml/objects/object_gi_grass.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_hammer.xml b/assets/xml/objects/object_gi_hammer.xml index feb5c8659d..49da345a93 100644 --- a/assets/xml/objects/object_gi_hammer.xml +++ b/assets/xml/objects/object_gi_hammer.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_heart.xml b/assets/xml/objects/object_gi_heart.xml index 48e78b1b5c..b3576efaad 100644 --- a/assets/xml/objects/object_gi_heart.xml +++ b/assets/xml/objects/object_gi_heart.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_hearts.xml b/assets/xml/objects/object_gi_hearts.xml index d2e763e631..122c898571 100644 --- a/assets/xml/objects/object_gi_hearts.xml +++ b/assets/xml/objects/object_gi_hearts.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_hookshot.xml b/assets/xml/objects/object_gi_hookshot.xml index a6b3b0fdac..513194fa7d 100644 --- a/assets/xml/objects/object_gi_hookshot.xml +++ b/assets/xml/objects/object_gi_hookshot.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_hoverboots.xml b/assets/xml/objects/object_gi_hoverboots.xml index c4a67877b2..9d710662e5 100644 --- a/assets/xml/objects/object_gi_hoverboots.xml +++ b/assets/xml/objects/object_gi_hoverboots.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_insect.xml b/assets/xml/objects/object_gi_insect.xml index 7af5b5b3b2..9467605ce2 100644 --- a/assets/xml/objects/object_gi_insect.xml +++ b/assets/xml/objects/object_gi_insect.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_jewel.xml b/assets/xml/objects/object_gi_jewel.xml index e83c651164..5dc87f53e2 100644 --- a/assets/xml/objects/object_gi_jewel.xml +++ b/assets/xml/objects/object_gi_jewel.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_key.xml b/assets/xml/objects/object_gi_key.xml index a37d45a71c..e38547a32c 100644 --- a/assets/xml/objects/object_gi_key.xml +++ b/assets/xml/objects/object_gi_key.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_ki_tan_mask.xml b/assets/xml/objects/object_gi_ki_tan_mask.xml index f66535af37..e447c8fadf 100644 --- a/assets/xml/objects/object_gi_ki_tan_mask.xml +++ b/assets/xml/objects/object_gi_ki_tan_mask.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_liquid.xml b/assets/xml/objects/object_gi_liquid.xml index 5eeeca0fd2..b3af2b2627 100644 --- a/assets/xml/objects/object_gi_liquid.xml +++ b/assets/xml/objects/object_gi_liquid.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_longsword.xml b/assets/xml/objects/object_gi_longsword.xml index 7161e42e38..bdfffe3b16 100644 --- a/assets/xml/objects/object_gi_longsword.xml +++ b/assets/xml/objects/object_gi_longsword.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_m_arrow.xml b/assets/xml/objects/object_gi_m_arrow.xml index 0fd659ae95..069a1bf1d4 100644 --- a/assets/xml/objects/object_gi_m_arrow.xml +++ b/assets/xml/objects/object_gi_m_arrow.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_magicpot.xml b/assets/xml/objects/object_gi_magicpot.xml index 7623e6353e..070de07fa0 100644 --- a/assets/xml/objects/object_gi_magicpot.xml +++ b/assets/xml/objects/object_gi_magicpot.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_map.xml b/assets/xml/objects/object_gi_map.xml index 8887dd22c9..619b0bc845 100644 --- a/assets/xml/objects/object_gi_map.xml +++ b/assets/xml/objects/object_gi_map.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_medal.xml b/assets/xml/objects/object_gi_medal.xml index 28e5b1e683..928edb8e3a 100644 --- a/assets/xml/objects/object_gi_medal.xml +++ b/assets/xml/objects/object_gi_medal.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_melody.xml b/assets/xml/objects/object_gi_melody.xml index b01fca9538..e028bc9463 100644 --- a/assets/xml/objects/object_gi_melody.xml +++ b/assets/xml/objects/object_gi_melody.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_milk.xml b/assets/xml/objects/object_gi_milk.xml index 00b9530d95..3e5cb0cb5a 100644 --- a/assets/xml/objects/object_gi_milk.xml +++ b/assets/xml/objects/object_gi_milk.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_mushroom.xml b/assets/xml/objects/object_gi_mushroom.xml index 5b19bca743..8ee686263c 100644 --- a/assets/xml/objects/object_gi_mushroom.xml +++ b/assets/xml/objects/object_gi_mushroom.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_niwatori.xml b/assets/xml/objects/object_gi_niwatori.xml index 713cc1ce5a..8af44b8708 100644 --- a/assets/xml/objects/object_gi_niwatori.xml +++ b/assets/xml/objects/object_gi_niwatori.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_nuts.xml b/assets/xml/objects/object_gi_nuts.xml index 5508fe8569..d1a8454dbc 100644 --- a/assets/xml/objects/object_gi_nuts.xml +++ b/assets/xml/objects/object_gi_nuts.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_ocarina.xml b/assets/xml/objects/object_gi_ocarina.xml index 7693cc122f..b8714d6e3c 100644 --- a/assets/xml/objects/object_gi_ocarina.xml +++ b/assets/xml/objects/object_gi_ocarina.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_ocarina_0.xml b/assets/xml/objects/object_gi_ocarina_0.xml index 336d338946..caca8f2002 100644 --- a/assets/xml/objects/object_gi_ocarina_0.xml +++ b/assets/xml/objects/object_gi_ocarina_0.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_pachinko.xml b/assets/xml/objects/object_gi_pachinko.xml index 5f808baf92..9967813b3d 100644 --- a/assets/xml/objects/object_gi_pachinko.xml +++ b/assets/xml/objects/object_gi_pachinko.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_powder.xml b/assets/xml/objects/object_gi_powder.xml index fb7dc0155d..4e33b58208 100644 --- a/assets/xml/objects/object_gi_powder.xml +++ b/assets/xml/objects/object_gi_powder.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_prescription.xml b/assets/xml/objects/object_gi_prescription.xml index 081de301c4..9fa16660c7 100644 --- a/assets/xml/objects/object_gi_prescription.xml +++ b/assets/xml/objects/object_gi_prescription.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_rabit_mask.xml b/assets/xml/objects/object_gi_rabit_mask.xml index 75f855550d..a3c07e469c 100644 --- a/assets/xml/objects/object_gi_rabit_mask.xml +++ b/assets/xml/objects/object_gi_rabit_mask.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_redead_mask.xml b/assets/xml/objects/object_gi_redead_mask.xml index 7de08487f8..fe601cab64 100644 --- a/assets/xml/objects/object_gi_redead_mask.xml +++ b/assets/xml/objects/object_gi_redead_mask.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_rupy.xml b/assets/xml/objects/object_gi_rupy.xml index 0a1af96d0f..07b18b82dd 100644 --- a/assets/xml/objects/object_gi_rupy.xml +++ b/assets/xml/objects/object_gi_rupy.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_saw.xml b/assets/xml/objects/object_gi_saw.xml index dcc038b7c1..999b818e8b 100644 --- a/assets/xml/objects/object_gi_saw.xml +++ b/assets/xml/objects/object_gi_saw.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_scale.xml b/assets/xml/objects/object_gi_scale.xml index 1cf5de5b99..c6794b6aea 100644 --- a/assets/xml/objects/object_gi_scale.xml +++ b/assets/xml/objects/object_gi_scale.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_seed.xml b/assets/xml/objects/object_gi_seed.xml index 82c15c82d2..5d3ef9c03f 100644 --- a/assets/xml/objects/object_gi_seed.xml +++ b/assets/xml/objects/object_gi_seed.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_shield_1.xml b/assets/xml/objects/object_gi_shield_1.xml index 2e93695699..867292a4c3 100644 --- a/assets/xml/objects/object_gi_shield_1.xml +++ b/assets/xml/objects/object_gi_shield_1.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_shield_2.xml b/assets/xml/objects/object_gi_shield_2.xml index 176ae025fe..364070d101 100644 --- a/assets/xml/objects/object_gi_shield_2.xml +++ b/assets/xml/objects/object_gi_shield_2.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_shield_3.xml b/assets/xml/objects/object_gi_shield_3.xml index 250bf7fea3..974a2539a9 100644 --- a/assets/xml/objects/object_gi_shield_3.xml +++ b/assets/xml/objects/object_gi_shield_3.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_skj_mask.xml b/assets/xml/objects/object_gi_skj_mask.xml index e6c90f76f1..6479015715 100644 --- a/assets/xml/objects/object_gi_skj_mask.xml +++ b/assets/xml/objects/object_gi_skj_mask.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_soul.xml b/assets/xml/objects/object_gi_soul.xml index 76ffc56852..ee9dbd9570 100644 --- a/assets/xml/objects/object_gi_soul.xml +++ b/assets/xml/objects/object_gi_soul.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_stick.xml b/assets/xml/objects/object_gi_stick.xml index fed89f4659..d974b7ac5d 100644 --- a/assets/xml/objects/object_gi_stick.xml +++ b/assets/xml/objects/object_gi_stick.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_sutaru.xml b/assets/xml/objects/object_gi_sutaru.xml index a2606afbe3..343d301868 100644 --- a/assets/xml/objects/object_gi_sutaru.xml +++ b/assets/xml/objects/object_gi_sutaru.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_sword_1.xml b/assets/xml/objects/object_gi_sword_1.xml index e1119abca0..3bc15dcaf3 100644 --- a/assets/xml/objects/object_gi_sword_1.xml +++ b/assets/xml/objects/object_gi_sword_1.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_ticketstone.xml b/assets/xml/objects/object_gi_ticketstone.xml index 0fa37fe11e..6cdd5ea2f0 100644 --- a/assets/xml/objects/object_gi_ticketstone.xml +++ b/assets/xml/objects/object_gi_ticketstone.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_gi_truth_mask.xml b/assets/xml/objects/object_gi_truth_mask.xml index f28c7cbcad..64bd0939c6 100644 --- a/assets/xml/objects/object_gi_truth_mask.xml +++ b/assets/xml/objects/object_gi_truth_mask.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_god_lgt.xml b/assets/xml/objects/object_god_lgt.xml index 60df9e4693..b630605364 100644 --- a/assets/xml/objects/object_god_lgt.xml +++ b/assets/xml/objects/object_god_lgt.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_kanban.xml b/assets/xml/objects/object_kanban.xml index 9ffc7a2ceb..b989d3572a 100644 --- a/assets/xml/objects/object_kanban.xml +++ b/assets/xml/objects/object_kanban.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_kusa.xml b/assets/xml/objects/object_kusa.xml index 67291a5543..5eaaa99c58 100644 --- a/assets/xml/objects/object_kusa.xml +++ b/assets/xml/objects/object_kusa.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_link_boy.xml b/assets/xml/objects/object_link_boy.xml index 9972a52fe5..4136ba57d4 100644 --- a/assets/xml/objects/object_link_boy.xml +++ b/assets/xml/objects/object_link_boy.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_link_child.xml b/assets/xml/objects/object_link_child.xml index 640228441a..4980f29e73 100644 --- a/assets/xml/objects/object_link_child.xml +++ b/assets/xml/objects/object_link_child.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_medal.xml b/assets/xml/objects/object_medal.xml index 533872a551..2fdcc64886 100644 --- a/assets/xml/objects/object_medal.xml +++ b/assets/xml/objects/object_medal.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_nwc.xml b/assets/xml/objects/object_nwc.xml index 96ffa32383..abe2be092b 100644 --- a/assets/xml/objects/object_nwc.xml +++ b/assets/xml/objects/object_nwc.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_owl.xml b/assets/xml/objects/object_owl.xml index 24be378985..4ea2006678 100644 --- a/assets/xml/objects/object_owl.xml +++ b/assets/xml/objects/object_owl.xml @@ -61,7 +61,7 @@ - + diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml index 2ab8d64d85..17c04fd18b 100644 --- a/assets/xml/objects/object_po_composer.xml +++ b/assets/xml/objects/object_po_composer.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_po_field.xml b/assets/xml/objects/object_po_field.xml index 10b402e2c7..43e1066e3b 100644 --- a/assets/xml/objects/object_po_field.xml +++ b/assets/xml/objects/object_po_field.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_poh.xml b/assets/xml/objects/object_poh.xml index 009d0fca3f..33517945e8 100644 --- a/assets/xml/objects/object_poh.xml +++ b/assets/xml/objects/object_poh.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_ps.xml b/assets/xml/objects/object_ps.xml index 043e232d64..98f548db1b 100644 --- a/assets/xml/objects/object_ps.xml +++ b/assets/xml/objects/object_ps.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_sb.xml b/assets/xml/objects/object_sb.xml index 64d3bb005a..56a707d148 100644 --- a/assets/xml/objects/object_sb.xml +++ b/assets/xml/objects/object_sb.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_siofuki.xml b/assets/xml/objects/object_siofuki.xml index a23240a728..f8a9e50d83 100644 --- a/assets/xml/objects/object_siofuki.xml +++ b/assets/xml/objects/object_siofuki.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_sst.xml b/assets/xml/objects/object_sst.xml index c142c50f43..66cf6c8e02 100644 --- a/assets/xml/objects/object_sst.xml +++ b/assets/xml/objects/object_sst.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_sst_pal.xml b/assets/xml/objects/object_sst_pal.xml index 9a9199b58f..138a320324 100644 --- a/assets/xml/objects/object_sst_pal.xml +++ b/assets/xml/objects/object_sst_pal.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_st.xml b/assets/xml/objects/object_st.xml index 983b9e2eab..c9cf97a0d2 100644 --- a/assets/xml/objects/object_st.xml +++ b/assets/xml/objects/object_st.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_stream.xml b/assets/xml/objects/object_stream.xml index 59b0838e47..6c65f77c34 100644 --- a/assets/xml/objects/object_stream.xml +++ b/assets/xml/objects/object_stream.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_toki_objects.xml b/assets/xml/objects/object_toki_objects.xml index cd07e60d2b..fe9d0562e1 100644 --- a/assets/xml/objects/object_toki_objects.xml +++ b/assets/xml/objects/object_toki_objects.xml @@ -1,4 +1,5 @@  + diff --git a/assets/xml/objects/object_trap.xml b/assets/xml/objects/object_trap.xml index 56195cf41b..1f8f4b5310 100644 --- a/assets/xml/objects/object_trap.xml +++ b/assets/xml/objects/object_trap.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_ydan_objects.xml b/assets/xml/objects/object_ydan_objects.xml index baf7ca4c9c..70174a1e70 100644 --- a/assets/xml/objects/object_ydan_objects.xml +++ b/assets/xml/objects/object_ydan_objects.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/objects/object_zo.xml b/assets/xml/objects/object_zo.xml index 77465760ef..8872cc4c9f 100644 --- a/assets/xml/objects/object_zo.xml +++ b/assets/xml/objects/object_zo.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/overlays/ovl_Boss_Ganon.xml b/assets/xml/overlays/ovl_Boss_Ganon.xml index a6ed9c66eb..d09648d8d7 100644 --- a/assets/xml/overlays/ovl_Boss_Ganon.xml +++ b/assets/xml/overlays/ovl_Boss_Ganon.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/overlays/ovl_Boss_Ganon2.xml b/assets/xml/overlays/ovl_Boss_Ganon2.xml index 00f985786c..b922003dfa 100644 --- a/assets/xml/overlays/ovl_Boss_Ganon2.xml +++ b/assets/xml/overlays/ovl_Boss_Ganon2.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/overlays/ovl_Magic_Dark.xml b/assets/xml/overlays/ovl_Magic_Dark.xml index 965d140db4..37165cebc2 100644 --- a/assets/xml/overlays/ovl_Magic_Dark.xml +++ b/assets/xml/overlays/ovl_Magic_Dark.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/overlays/ovl_Oceff_Storm.xml b/assets/xml/overlays/ovl_Oceff_Storm.xml index 385f56dbff..d9e1f7e65a 100644 --- a/assets/xml/overlays/ovl_Oceff_Storm.xml +++ b/assets/xml/overlays/ovl_Oceff_Storm.xml @@ -1,4 +1,5 @@ + diff --git a/assets/xml/overlays/ovl_Oceff_Wipe4.xml b/assets/xml/overlays/ovl_Oceff_Wipe4.xml index 6446beedb2..a4ec2c5def 100644 --- a/assets/xml/overlays/ovl_Oceff_Wipe4.xml +++ b/assets/xml/overlays/ovl_Oceff_Wipe4.xml @@ -1,4 +1,5 @@ + diff --git a/tools/assets/descriptor/base.py b/tools/assets/descriptor/base.py index e90ed16812..1b41f2f82b 100644 --- a/tools/assets/descriptor/base.py +++ b/tools/assets/descriptor/base.py @@ -64,6 +64,7 @@ class ResourcesDescCollection: start_address: Optional[StartAddress] resources: list[ResourceDesc] last_modified_time: float + depends: list["ResourcesDescCollection"] @dataclasses.dataclass(eq=False) @@ -90,6 +91,9 @@ class AssetConfigPiece: ac: version_config.AssetConfig last_modified_time: float = None etree: ElementTree.ElementTree = None + depends: list["AssetConfigPiece"] = dataclasses.field(default_factory=list) + """The AssetConfigPiece s this instance depends on""" + collections: list[ResourcesDescCollection] = dataclasses.field(default_factory=list) def get_resources_desc(vc: version_config.VersionConfig): @@ -121,6 +125,7 @@ def get_resources_desc(vc: version_config.VersionConfig): ) assert externalfile_name in acp_by_name, externalfile_name externalfile_acp = acp_by_name[externalfile_name] + acp.depends.append(externalfile_acp) acp_pool = pools[acp] externalfile_acp_pool = pools[externalfile_acp] merged_pool = acp_pool | externalfile_acp_pool @@ -129,14 +134,6 @@ def get_resources_desc(vc: version_config.VersionConfig): except Exception as e: raise Exception(f"Error while resolving pools with {acp}") from e - if 0: - import pprint - - with Path( - "/home/dragorn421/Documents/oot/tools/assets/descriptor/pools.txt" - ).open("w") as f: - pprint.pprint(pools, stream=f) - # List unique pools pools_unique: list[set[AssetConfigPiece]] = [] while pools: @@ -163,6 +160,7 @@ def get_resources_desc(vc: version_config.VersionConfig): vc, pool, acp, fileelem ) ) + acp.collections.append(rc) rescolls.append(rc) all_needs_pass2_exceptions.extend(needs_pass2_exceptions) except Exception as e: @@ -170,6 +168,15 @@ def get_resources_desc(vc: version_config.VersionConfig): rcpool = ResourcesDescCollectionsPool(rescolls) + # + for acp in pool: + for acp_coll in acp.collections: + acp_coll.depends.extend( + (_coll for _coll in acp.collections if _coll != acp_coll) + ) + for acp_dep in acp.depends: + acp_coll.depends.extend(acp_dep.collections) + # Pass 2: execute callbacks for needs_pass2_exc in all_needs_pass2_exceptions: try: @@ -184,6 +191,14 @@ def get_resources_desc(vc: version_config.VersionConfig): except Exception as e: raise Exception(f"Error with pool {pool}") from e + if 0: + from rich.pretty import pretty_repr + + with Path( + "/home/dragorn421/Documents/oot/tools/assets/descriptor/pools.txt" + ).open("w") as f: + f.write(pretty_repr(pools)) + return pools @@ -244,6 +259,7 @@ def _get_resources_fileelem_to_resourcescollection_pass1( start_address, resources, acp.last_modified_time, + [], ) needs_pass2_exceptions: list[ResourceHandlerNeedsPass2Exception] = [] for reselem in fileelem: diff --git a/tools/assets/descriptor/n64resources.py b/tools/assets/descriptor/n64resources.py index 2961694539..8144f452de 100644 --- a/tools/assets/descriptor/n64resources.py +++ b/tools/assets/descriptor/n64resources.py @@ -171,6 +171,9 @@ def handler_Texture( raise ResourceHandlerNeedsPass2Exception(res, pass2_callback) else: - return TextureResourceDesc( + res = TextureResourceDesc( symbol_name, offset, collection, reselem, format, width, height ) + if reselem.attrib.get("HackMode") == "ignore_orphaned_tlut": + res.hack_modes.add("hackmode_ignore_orphaned_tlut") + return res diff --git a/tools/assets/extract/extase/memorymap.py b/tools/assets/extract/extase/memorymap.py index e29a98c3cb..fda2f4c868 100644 --- a/tools/assets/extract/extase/memorymap.py +++ b/tools/assets/extract/extase/memorymap.py @@ -16,7 +16,16 @@ from . import Resource, File, GetResourceAtResult # or defaulting to poor choices (e.g. raw addresses) BEST_EFFORT = True if BEST_EFFORT: - VERBOSE_BEST_EFFORT = False + VERBOSE_BEST_EFFORT = 1 + VERBOSE_BEST_EFFORT_LVL1_IGNORED_SEGS = { + 1, # billboard matrix segment + 8, # often used for eye/mouth textures, or various dlist callbacks. same for 9-0xC + 9, + 0xA, + 0xB, + 0xC, + 0xD, # matrix buffer for skeletons dlists + } # RangeMap @@ -291,7 +300,7 @@ class MemoryContext: address_resolver = self.memory_map.direct.get(offset) except IndexError as e: raise UnmappedAddressError( - "direct address is not mapped", hex(address) + "direct address is not mapped", f"0x{address:08X}" ) from e return address_resolver.resolve(address, offset) @@ -306,7 +315,7 @@ class MemoryContext: address_resolver = self.memory_map.segments[segment_num].get(offset) except IndexError as e: raise UnmappedAddressError( - "segment address is not mapped", hex(address) + "segment address is not mapped", f"0x{address:08X}" ) from e return address_resolver.resolve(address, offset) @@ -325,7 +334,10 @@ class MemoryContext: fake_resource = new_resource_pointed_to(fake_file, 0) fake_resource.reporters.add(reporter) fake_file.add_resource(fake_resource) - if VERBOSE_BEST_EFFORT: + if VERBOSE_BEST_EFFORT >= 2 or ( + VERBOSE_BEST_EFFORT >= 1 + and (address >> 24) not in VERBOSE_BEST_EFFORT_LVL1_IGNORED_SEGS + ): print("BEST_EFFORT: ignored error e=") rich_pprint(e) print(" on resource report by reporter=") @@ -371,12 +383,18 @@ class MemoryContext: resolve_result = self.resolve_segmented(address_start) except UnmappedAddressError as e: if BEST_EFFORT: - if VERBOSE_BEST_EFFORT: + if VERBOSE_BEST_EFFORT >= 2 or ( + VERBOSE_BEST_EFFORT >= 1 + and (address_start >> 24) + not in VERBOSE_BEST_EFFORT_LVL1_IGNORED_SEGS + ): print("BEST_EFFORT: ignored error e=") rich_pprint(e) print(" and skipping marking resource buffer for reporter=") rich_pprint(reporter) - print(f" {resource_type=} {address_start=:#08X} {address_end=:#08X}") + print( + f" {resource_type=} {address_start=:#08X} {address_end=:#08X}" + ) return raise file_start = resolve_result.file_offset @@ -395,7 +413,10 @@ class MemoryContext: return self.get_attribute_at_segmented(address, Attributes.c_reference) except UnmappedAddressError as e: if BEST_EFFORT: - if VERBOSE_BEST_EFFORT: + if VERBOSE_BEST_EFFORT >= 2 or ( + VERBOSE_BEST_EFFORT >= 1 + and (address >> 24) not in VERBOSE_BEST_EFFORT_LVL1_IGNORED_SEGS + ): print("BEST_EFFORT: ignored error e="), rich_pprint(e) print(f" and returning raw address=0x{address:08X}") diff --git a/tools/assets/extract/extase_oot64/dlist_resources.py b/tools/assets/extract/extase_oot64/dlist_resources.py index e3b5dd08c2..afba064158 100644 --- a/tools/assets/extract/extase_oot64/dlist_resources.py +++ b/tools/assets/extract/extase_oot64/dlist_resources.py @@ -392,7 +392,9 @@ class TextureResource(Resource): if is_all_resources_fake(): assert self.fmt == G_IM_FMT.RGBA - if VERBOSE_BEST_EFFORT_TLUT_NO_REAL_USER: + if VERBOSE_BEST_EFFORT_TLUT_NO_REAL_USER and not getattr( + self, "HACK_ignore_orphaned_tlut", False + ): print( "BEST_EFFORT", "no real (non-fake for best effort) ci resource uses this tlut", @@ -1044,7 +1046,7 @@ class ColorIndexedTexturesManager: assert ci_state.tluts.keys() == {0}, ci_state.tluts resource = memory_context.report_resource_at_segmented( - self, + reporter, tex.timg, TextureResource, lambda file, offset: TextureResource( @@ -1063,7 +1065,7 @@ class ColorIndexedTexturesManager: assert tlut.count == ci_state.tluts_count resource_tlut = memory_context.report_resource_at_segmented( - self, + reporter, tlut.tlut, # TLUTs declared in xmls use so are TextureResource, # so we can only expects a TextureResource diff --git a/tools/assets/extract/extract_xml_z64.py b/tools/assets/extract/extract_xml_z64.py index 9aec181b61..67ed7886a3 100644 --- a/tools/assets/extract/extract_xml_z64.py +++ b/tools/assets/extract/extract_xml_z64.py @@ -23,6 +23,7 @@ from . import z64_resource_handlers VERBOSE1 = False VERBOSE2 = False +VERBOSE3 = False # "options" RM_SOURCE = True @@ -94,10 +95,15 @@ def create_file_resources(rescoll: ResourcesDescCollection, file: File): def process_pool( extraction_ctx: ExtractionContext, pool_desc: ResourcesDescCollectionsPool ): - if VERBOSE2: + if VERBOSE1: print("> process_pool") - if len(pool_desc.collections) == 1: - print(", ".join(map(str, (_c.out_path for _c in pool_desc.collections)))) + colls_str = " + ".join(set(map(str, (_c.out_path for _c in pool_desc.collections)))) + try: + import rich + + rich.print(f"[b]{colls_str}[/b]") + except: + print(colls_str) file_by_rescoll: dict[ResourcesDescCollection, File] = dict() @@ -134,34 +140,45 @@ def process_pool( # 2) Build a MemoryContext for each File memctx_base = extraction_ctx.version_memctx_base.copy() - files_by_segment: dict[int, list[File]] = dict() - - for rescoll, file in file_by_rescoll.items(): - - if rescoll.start_address is None: - pass - elif isinstance(rescoll.start_address, SegmentStartAddress): - files_by_segment.setdefault(rescoll.start_address.segment, []).append(file) - elif isinstance(rescoll.start_address, VRAMStartAddress): - memctx_base.set_direct_file(rescoll.start_address.vram, file) - else: - raise NotImplementedError(rescoll.start_address) - - disputed_segments = [] - - for segment, files in files_by_segment.items(): - if len(files) == 1: - memctx_base.set_segment_file(segment, files[0]) - else: - disputed_segments.append(segment) - - if VERBOSE2: - print(f"{disputed_segments=}") - memctx_by_file: dict[File, MemoryContext] = dict() for rescoll, file in file_by_rescoll.items(): + if VERBOSE2: + print("Building MemoryContext for", file.name) + files_by_segment: dict[int, list[File]] = dict() file_memctx = memctx_base.copy() + + for rescoll_dep in (rescoll, *rescoll.depends): + file_dep = file_by_rescoll[rescoll_dep] + + if rescoll_dep.start_address is None: + pass + elif isinstance(rescoll_dep.start_address, SegmentStartAddress): + files_by_segment.setdefault( + rescoll_dep.start_address.segment, [] + ).append(file_dep) + elif isinstance(rescoll_dep.start_address, VRAMStartAddress): + file_memctx.set_direct_file(rescoll_dep.start_address.vram, file_dep) + if file_dep != file : + file.referenced_files.add(file_dep) + else: + raise NotImplementedError(rescoll_dep.start_address) + + disputed_segments = [] + + for segment, files in files_by_segment.items(): + if len(files) == 1: + file_memctx.set_segment_file(segment, files[0]) + if files[0] != file: + file.referenced_files.add(files[0]) + if VERBOSE2: + print("segment", segment, "set to", files[0].name) + else: + disputed_segments.append(segment) + + if VERBOSE2: + print(f"{disputed_segments=}") + if ( isinstance(rescoll.start_address, SegmentStartAddress) and rescoll.start_address.segment in disputed_segments @@ -183,7 +200,7 @@ def process_pool( while True: any_progress = False for file, file_memctx in memctx_by_file.items(): - if VERBOSE2: + if VERBOSE3: print(file.name, ".try_parse_resources_data()") if file.try_parse_resources_data(file_memctx): any_progress = True @@ -193,14 +210,14 @@ def process_pool( for file in memctx_by_file.keys(): file.check_non_parsed_resources() - if VERBOSE2: + if VERBOSE3: print("parse_all_files() ...") parse_all_files() for file in memctx_by_file.keys(): file.commit_resource_buffers() - if VERBOSE2: + if VERBOSE3: print("parse new resources (resource buffers) ...") parse_all_files() # parse new resources (resource buffers) @@ -210,7 +227,7 @@ def process_pool( # 4) add dummy (binary) resources for the unaccounted gaps - if VERBOSE2: + if VERBOSE3: print("unaccounted...") for file in memctx_by_file.keys(): @@ -244,8 +261,6 @@ def process_pool( # "source" refers to the main .c and .h `#include`ing all the extracted resources if WRITE_SOURCE: - # TODO fill referenced_files properly or something - file.referenced_files = set(memctx_by_file.keys()) - {file} file.write_source() diff --git a/tools/assets/extract/z64_resource_handlers.py b/tools/assets/extract/z64_resource_handlers.py index 5c43747dac..82346b84cd 100644 --- a/tools/assets/extract/z64_resource_handlers.py +++ b/tools/assets/extract/z64_resource_handlers.py @@ -247,7 +247,7 @@ def register_resource_handlers(): def texture_resource_handler( file: File, resource_desc: n64resources.TextureResourceDesc ): - return dlist_resources.TextureResource( + res = dlist_resources.TextureResource( file, resource_desc.offset, resource_desc.symbol_name, @@ -256,6 +256,9 @@ def register_resource_handlers(): resource_desc.width, resource_desc.height, ) + if "hackmode_ignore_orphaned_tlut" in resource_desc.hack_modes: + res.HACK_ignore_orphaned_tlut = True + return res def ci_texture_resource_handler( file: File, resource_desc: n64resources.CITextureResourceDesc