diff --git a/soh/assets/custom/objects/gameplay_keep/gChestLockTex b/soh/assets/custom/objects/gameplay_keep/gChestLockTex new file mode 100644 index 0000000000..30764d0bd2 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/gChestLockTex differ diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL new file mode 100644 index 0000000000..6bbdd4b8df --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_0 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_0 new file mode 100644 index 0000000000..85a14b138f --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_0 @@ -0,0 +1,180 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_1 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_1 new file mode 100644 index 0000000000..c3ad8b733c --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_1 @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_2 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_2 new file mode 100644 index 0000000000..6369197552 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_tri_2 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_0 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_0 new file mode 100644 index 0000000000..8fb82b99cf --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_0 @@ -0,0 +1,266 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_1 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_1 new file mode 100644 index 0000000000..dde8c515c1 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_1 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_2 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_2 new file mode 100644 index 0000000000..e73e84204e --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_layer_Opaque_vtx_2 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_tri_0 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_tri_0 new file mode 100644 index 0000000000..f8fef42d69 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_tri_0 @@ -0,0 +1,7 @@ + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_vtx_0 b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_vtx_0 new file mode 100644 index 0000000000..16e2a50300 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/gGiOpenChestsDL_mesh_layer_Transparent_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_frame_layerOpaque b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_frame_layerOpaque new file mode 100644 index 0000000000..4c581c418e --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_frame_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_inside_layerOpaque b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_inside_layerOpaque new file mode 100644 index 0000000000..719a61294c --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_inside_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_layerOpaque b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_layerOpaque new file mode 100644 index 0000000000..c44a43bf20 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_lock_layerTransparent b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_lock_layerTransparent new file mode 100644 index 0000000000..0e87e1fa2d --- /dev/null +++ b/soh/assets/custom/objects/object_gi_chest/mat_gGiOpenChestsDL_chest_lock_layerTransparent @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_climb/gGiClimbDL b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL new file mode 100644 index 0000000000..69b8b36d01 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_tri_0 b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_tri_0 new file mode 100644 index 0000000000..551563c91f --- /dev/null +++ b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_tri_0 @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_vtx_0 b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_vtx_0 new file mode 100644 index 0000000000..18675e007b --- /dev/null +++ b/soh/assets/custom/objects/object_gi_climb/gGiClimbDL_layer_Opaque_vtx_0 @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_climb/mat_gGiClimbDL_ladder_layerOpaque b/soh/assets/custom/objects/object_gi_climb/mat_gGiClimbDL_ladder_layerOpaque new file mode 100644 index 0000000000..4c75266a93 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_climb/mat_gGiClimbDL_ladder_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL new file mode 100644 index 0000000000..beb4fbe283 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_0 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_0 new file mode 100644 index 0000000000..4237974301 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_0 @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_1 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_1 new file mode 100644 index 0000000000..7b025597cb --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_1 @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_2 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_2 new file mode 100644 index 0000000000..98f24ac28d --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_2 @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_3 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_3 new file mode 100644 index 0000000000..13e49ce177 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_3 @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_4 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_4 new file mode 100644 index 0000000000..c478443349 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_tri_4 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_0 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_0 new file mode 100644 index 0000000000..3f02189098 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_0 @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_1 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_1 new file mode 100644 index 0000000000..c5029d5985 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_1 @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_2 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_2 new file mode 100644 index 0000000000..516ff3d812 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_2 @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_3 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_3 new file mode 100644 index 0000000000..b8a57d3485 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_3 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_4 b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_4 new file mode 100644 index 0000000000..8100ac4935 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/gGiCrawlDL_layer_Opaque_vtx_4 @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_2_layerOpaque b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_2_layerOpaque new file mode 100644 index 0000000000..e2b27b004a --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_2_layerOpaque @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_layerOpaque b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_layerOpaque new file mode 100644 index 0000000000..08df739078 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_decal_layerOpaque @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_gem_layerOpaque b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_gem_layerOpaque new file mode 100644 index 0000000000..8908fe4738 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_gem_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_layerOpaque b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_layerOpaque new file mode 100644 index 0000000000..a1854c96b4 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_leather_layerOpaque b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_leather_layerOpaque new file mode 100644 index 0000000000..d68b2b7656 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_crawl/mat_gGiCrawlDL_kneepad_leather_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL new file mode 100644 index 0000000000..6f82b68561 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_0 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_0 new file mode 100644 index 0000000000..ab6a7f5ccb --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_0 @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_1 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_1 new file mode 100644 index 0000000000..edbc12e4a5 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_1 @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_2 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_2 new file mode 100644 index 0000000000..24d4e12286 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_tri_2 @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_0 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_0 new file mode 100644 index 0000000000..9d353378fa --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_0 @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_1 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_1 new file mode 100644 index 0000000000..3ca19c5f0b --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_1 @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_2 b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_2 new file mode 100644 index 0000000000..6aed39e1ec --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/gGiGrabDL_layer_Opaque_vtx_2 @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_accent_layerOpaque b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_accent_layerOpaque new file mode 100644 index 0000000000..d792132a9d --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_accent_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_gem_layerOpaque b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_gem_layerOpaque new file mode 100644 index 0000000000..9c39f05105 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_gem_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_layerOpaque b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_layerOpaque new file mode 100644 index 0000000000..53634fa609 --- /dev/null +++ b/soh/assets/custom/objects/object_gi_grab/mat_gGiGrabDL_power_bracelet_layerOpaque @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/textures/icon_item_static/gClimbTex.rgba32.png b/soh/assets/custom/textures/icon_item_static/gClimbTex.rgba32.png new file mode 100644 index 0000000000..d990715a21 Binary files /dev/null and b/soh/assets/custom/textures/icon_item_static/gClimbTex.rgba32.png differ diff --git a/soh/assets/custom/textures/icon_item_static/gCrawlTex.rgba32.png b/soh/assets/custom/textures/icon_item_static/gCrawlTex.rgba32.png new file mode 100644 index 0000000000..81c16592db Binary files /dev/null and b/soh/assets/custom/textures/icon_item_static/gCrawlTex.rgba32.png differ diff --git a/soh/assets/custom/textures/icon_item_static/gGrabTex.rgba32.png b/soh/assets/custom/textures/icon_item_static/gGrabTex.rgba32.png new file mode 100644 index 0000000000..01215fd2f6 Binary files /dev/null and b/soh/assets/custom/textures/icon_item_static/gGrabTex.rgba32.png differ diff --git a/soh/assets/custom/textures/icon_item_static/gOpenChestsTex.rgba32.png b/soh/assets/custom/textures/icon_item_static/gOpenChestsTex.rgba32.png new file mode 100644 index 0000000000..089eb5b574 Binary files /dev/null and b/soh/assets/custom/textures/icon_item_static/gOpenChestsTex.rgba32.png differ diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index aa75992736..a384f19537 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -194,6 +194,18 @@ static const ALIGN_ASSET(2) char gGiZoraJabbernutDL[] = dgGiZoraJabbernutDL; #define dgGiFishingPoleDL "__OTR__objects/object_gi_fishing_pole/gGiFishingPoleDL" static const ALIGN_ASSET(2) char gGiFishingPoleDL[] = dgGiFishingPoleDL; +#define dgGiClimbDL "__OTR__objects/object_gi_climb/gGiClimbDL" +static const ALIGN_ASSET(2) char gGiClimbDL[] = dgGiClimbDL; + +#define dgGiCrawlDL "__OTR__objects/object_gi_crawl/gGiCrawlDL" +static const ALIGN_ASSET(2) char gGiCrawlDL[] = dgGiCrawlDL; + +#define dgGiOpenChestsDL "__OTR__objects/object_gi_chest/gGiOpenChestsDL" +static const ALIGN_ASSET(2) char gGiOpenChestsDL[] = dgGiOpenChestsDL; + +#define dgGiGrabDL "__OTR__objects/object_gi_grab/gGiGrabDL" +static const ALIGN_ASSET(2) char gGiGrabDL[] = dgGiGrabDL; + #define dgMysteryItemDL "__OTR__objects/object_mystery_item/gMysteryItemDL" static const ALIGN_ASSET(2) char gMysteryItemDL[] = dgMysteryItemDL; @@ -491,6 +503,18 @@ static const ALIGN_ASSET(2) char gFileSelLanguageGERTex[] = dgFileSelLanguageGER #define dgRocsFeatherTex "__OTR__textures/icon_item_static/gRocsFeatherTex" static const ALIGN_ASSET(2) char gRocsFeatherTex[] = dgRocsFeatherTex; +#define dgCrawlTex "__OTR__textures/icon_item_static/gCrawlTex" +static const ALIGN_ASSET(2) char gCrawlTex[] = dgCrawlTex; + +#define dgClimbTex "__OTR__textures/icon_item_static/gClimbTex" +static const ALIGN_ASSET(2) char gClimbTex[] = dgClimbTex; + +#define dgOpenChestsTex "__OTR__textures/icon_item_static/gOpenChestsTex" +static const ALIGN_ASSET(2) char gOpenChestsTex[] = dgOpenChestsTex; + +#define dgGrabTex "__OTR__textures/icon_item_static/gGrabTex" +static const ALIGN_ASSET(2) char gGrabTex[] = dgGrabTex; + #define dgRocsFeatherItemNameENGTex "__OTR__textures/item_name_static/gRocsFeatherItemNameENGTex" static const ALIGN_ASSET(2) char gRocsFeatherItemNameENGTex[] = dgRocsFeatherItemNameENGTex; diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index ff7fc3b750..fe16e5b10e 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -1135,10 +1135,7 @@ extern "C" void Randomizer_DrawPowerBracelet(PlayState* play, GetItemEntry* getI gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPGrayscale(POLY_OPA_DISP++, true); - gDPSetGrayscaleColor(POLY_OPA_DISP++, 80, 80, 80, 255); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiGoronBraceletDL); - gSPGrayscale(POLY_OPA_DISP++, false); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiGrabDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1147,16 +1144,11 @@ extern "C" void Randomizer_DrawLadder(PlayState* play, GetItemEntry* getItemEntr OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, (uintptr_t)gMoriHashiraTex); - Matrix_Translate(0, -30, 0, MTXMODE_APPLY); - Matrix_Scale(1.0f, 0.25f, 1.0f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gMoriHashigoLadderDL); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); - Matrix_RotateY(M_PIf, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gMoriHashigoLadderDL); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiClimbDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1165,15 +1157,11 @@ extern "C" void Randomizer_DrawKneePads(PlayState* play, GetItemEntry* getItemEn OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - Matrix_Translate(-35, -5, 0, MTXMODE_APPLY); - Matrix_Scale(0.4f, 0.8f, 1.2f, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiDekuShieldDL); - Gfx_SetupDL_25Opa(play->state.gfxCtx); - Matrix_Translate(35, -7, 4, MTXMODE_APPLY); - gSPMatrix(POLY_OPA_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiDekuShieldDL); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiCrawlDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1228,54 +1216,15 @@ extern "C" void Randomizer_DrawJabberNut(PlayState* play, GetItemEntry* getItemE CLOSE_DISPS(play->state.gfxCtx); } -static Gfx* boxLidDL; -static Gfx* boxBodyDL; -extern "C" void EnBox_PostLimbDrawOverride(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, void* thisx) { - Gfx** gfx = (Gfx**)thisx; - if (limbIndex == 1) { - gSPMatrix((*gfx)++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList((*gfx)++, boxBodyDL); - } else if (limbIndex == 3) { - gSPMatrix((*gfx)++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList((*gfx)++, boxLidDL); - } -} - -extern "C" Gfx* EnBox_EmptyDList(GraphicsContext* gfxCtx); -#define LIMB_COUNT_CHEST 5 extern "C" void Randomizer_DrawOpenChest(PlayState* play, GetItemEntry* getItemEntry) { - static bool initialized = false; - static SkelAnime skelAnime; - static Vec3s jointTable[LIMB_COUNT_CHEST]; - static Vec3s otherTable[LIMB_COUNT_CHEST]; - static u32 lastUpdate = 0; - - if (!initialized) { - initialized = true; - boxBodyDL = ResourceMgr_LoadGfxByName((const char*)gTreasureChestChestFrontDL); - boxLidDL = ResourceMgr_LoadGfxByName((const char*)gTreasureChestChestSideAndLidDL); - SkelAnime_Init(play, &skelAnime, (SkeletonHeader*)&gTreasureChestSkel, - (AnimationHeader*)&gTreasureChestAnim_00024C, jointTable, otherTable, LIMB_COUNT_CHEST); - - // no closing animation to loop, so play animation back & forth for smooth loop - Animation_PlayOnce(&skelAnime, (AnimationHeader*)&gTreasureChestAnim_00043C); - } - - if (lastUpdate != play->state.frames) { - lastUpdate = play->state.frames; - if (SkelAnime_Update(&skelAnime)) { - Animation_Reverse(&skelAnime); - } - } - OPEN_DISPS(play->state.gfxCtx); - Matrix_Scale(0.01f, 0.01f, 0.01f, MTXMODE_APPLY); - gDPPipeSync(POLY_OPA_DISP++); - gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 255); - gSPSegment(POLY_OPA_DISP++, 0x08, (uintptr_t)EnBox_EmptyDList(play->state.gfxCtx)); Gfx_SetupDL_25Opa(play->state.gfxCtx); - SkelAnime_DrawSkeletonOpa(play, &skelAnime, nullptr, (PostLimbDrawOpa)EnBox_PostLimbDrawOverride, &POLY_OPA_DISP); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiOpenChestsDL); CLOSE_DISPS(play->state.gfxCtx); } @@ -1290,8 +1239,6 @@ extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getI gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiFishingPoleDL); - Matrix_Pop(); - CLOSE_DISPS(play->state.gfxCtx); } diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index e28d3057a6..378df39b5e 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -393,13 +393,13 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_SCALE, RHT_NONE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, {"the ", "l'", "die "}); itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale); - itemTable[RG_POWER_BRACELET] = Item(RG_POWER_BRACELET, Text{ "Power Bracelet", "Bracelets de Force", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_BRACELET, true, LOGIC_NONE, RHT_NONE, RG_POWER_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, {"the ", "les ", TODO_TRANSLATE}).CustomIcon(gItemIconGoronsBraceletTex); + itemTable[RG_POWER_BRACELET] = Item(RG_POWER_BRACELET, Text{ "Power Bracelet", "Bracelets de Force", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_BRACELET, true, LOGIC_NONE, RHT_NONE, RG_POWER_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, {"the ", "les ", TODO_TRANSLATE}).CustomIcon(gGrabTex); itemTable[RG_POWER_BRACELET].SetCustomDrawFunc(Randomizer_DrawPowerBracelet); - itemTable[RG_CLIMB] = Item(RG_CLIMB, Text{ "Climb", "Grimper", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_NONE, RHT_CLIMB, RG_CLIMB, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_CLIMB] = Item(RG_CLIMB, Text{ "Climb", "Grimper", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_NONE, RHT_CLIMB, RG_CLIMB, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER).CustomIcon(gClimbTex); itemTable[RG_CLIMB].SetCustomDrawFunc(Randomizer_DrawLadder); - itemTable[RG_CRAWL] = Item(RG_CRAWL, Text{ "Crawl", "Ramper", "Kriechen" }, ITEMTYPE_ITEM, GI_SHIELD_DEKU, true, LOGIC_NONE, RHT_CRAWL, RG_CRAWL, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_CRAWL] = Item(RG_CRAWL, Text{ "Crawl", "Ramper", "Kriechen" }, ITEMTYPE_ITEM, GI_SHIELD_DEKU, true, LOGIC_NONE, RHT_CRAWL, RG_CRAWL, OBJECT_GI_SHIELD_1, GID_SHIELD_DEKU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER).CustomIcon(gCrawlTex); itemTable[RG_CRAWL].SetCustomDrawFunc(Randomizer_DrawKneePads); - itemTable[RG_OPEN_CHEST] = Item(RG_OPEN_CHEST, Text{ "Open Chests", "Ouvrir des coffres", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_KEY_SMALL, true, LOGIC_NONE, RHT_OPEN_CHEST, RG_OPEN_CHEST, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_OPEN_CHEST] = Item(RG_OPEN_CHEST, Text{ "Open Chests", "Ouvrir des coffres", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_KEY_SMALL, true, LOGIC_NONE, RHT_OPEN_CHEST, RG_OPEN_CHEST, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER).CustomIcon(gOpenChestsTex); itemTable[RG_OPEN_CHEST].SetCustomDrawFunc(Randomizer_DrawOpenChest); itemTable[RG_PROGRESSIVE_BOMBCHU_BAG] = Item(RG_PROGRESSIVE_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_PROGRESSIVE_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_PROGRESSIVE_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER, {"a ", "un ", "eine "}).CustomIcon(gItemIconBombchuTex); diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index ddd9435e95..48657c29c4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -1275,7 +1275,7 @@ void DrawItem(ItemTrackerItem item) { ImGui::PopStyleColor(); } - if (item.id >= RG_BRONZE_SCALE && item.id <= RG_OPEN_CHEST) { + if (item.id == RG_BRONZE_SCALE) { ImVec2 p = ImGui::GetCursorScreenPos(); ImGui::SetCursorScreenPos( ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize(itemName.c_str()).x / 2), p.y - (iconSize + 2))); diff --git a/soh/soh/SohGui/ImGuiUtils.cpp b/soh/soh/SohGui/ImGuiUtils.cpp index 8cf6579106..eedac81c07 100644 --- a/soh/soh/SohGui/ImGuiUtils.cpp +++ b/soh/soh/SohGui/ImGuiUtils.cpp @@ -152,13 +152,13 @@ std::map customItemsMapping = { { RG_BONGO_BONGO_SOUL, { RG_BONGO_BONGO_SOUL, "RG_BONGO_BONGO_SOUL", "RG_BONGO_BONGO_SOUL_Faded", gBossSoulTex } }, { RG_TWINROVA_SOUL, { RG_TWINROVA_SOUL, "RG_TWINROVA_SOUL", "RG_TWINROVA_SOUL_Faded", gBossSoulTex } }, { RG_GANON_SOUL, { RG_GANON_SOUL, "RG_GANON_SOUL", "RG_GANON_SOUL_Faded", gBossSoulTex } }, - { RG_OPEN_CHEST, { RG_OPEN_CHEST, "RG_OPEN_CHEST", "RG_OPEN_CHEST_Faded", gMapChestIconTex } } -}; - -std::map actionShuffleMapping = { - { RG_CRAWL, { RG_CRAWL, "RG_CRAWL", "RG_CRAWL_Faded", gButtonBackgroundTex } }, - { RG_CLIMB, { RG_CLIMB, "RG_CLIMB", "RG_CLIMB_Faded", gButtonBackgroundTex } }, - { RG_POWER_BRACELET, { RG_POWER_BRACELET, "RG_POWER_BRACELET", "RG_POWER_BRACELET_Faded", gButtonBackgroundTex } }, + { RG_OPEN_CHEST, { RG_OPEN_CHEST, "RG_OPEN_CHEST", "RG_OPEN_CHEST_Faded", gOpenChestsTex } }, + { RG_CRAWL, { RG_CRAWL, "RG_CRAWL", "RG_CRAWL_Faded", gCrawlTex } }, + { RG_CLIMB, { RG_CLIMB, "RG_CLIMB", "RG_CLIMB_Faded", gClimbTex } }, + { + RG_POWER_BRACELET, + { RG_POWER_BRACELET, "RG_POWER_BRACELET", "RG_POWER_BRACELET_Faded", gGrabTex }, + }, }; std::map jabbernutMapping = { @@ -235,16 +235,6 @@ void RegisterImGuiItemIcons() { ->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, gregFadedGreen); } - for (const auto& entry : actionShuffleMapping) { - ImVec4 aButtonBlue = ImVec4(90.f / 255.f, 90.f / 250.f, 255.f / 255.f, 255.f / 255.f); - ImVec4 aButtonBlueFaded = aButtonBlue; - aButtonBlueFaded.w = 0.3f; - std::dynamic_pointer_cast(Ship::Context::GetRawInstance()->GetWindow()->GetGui()) - ->LoadGuiTexture(entry.second.name, entry.second.texturePath, aButtonBlue); - std::dynamic_pointer_cast(Ship::Context::GetRawInstance()->GetWindow()->GetGui()) - ->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, aButtonBlueFaded); - } - for (const auto& entry : customItemsMapping) { std::dynamic_pointer_cast(Ship::Context::GetRawInstance()->GetWindow()->GetGui()) ->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1));