diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL
index 5ca107ace..33e22a85f 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL
@@ -1,18 +1,16 @@
-
-
-
+
-
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_1
index 2b23b4e0c..259b27c4e 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_1
@@ -1,149 +1,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
+
-
-
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -154,166 +52,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_2
index f023f286c..dc680a34a 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_2
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_3
index df5d002e5..a134560fb 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_3
@@ -4,54 +4,54 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_4
index b9795294b..65134138f 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_4
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_5
index d3c327039..3b458b736 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_tri_5
@@ -8,50 +8,49 @@
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_1
index a6a795ad4..9339e42f0 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_1
@@ -1,414 +1,77 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_2
index 9339e42f0..e1122533a 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_2
@@ -1,77 +1,70 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_3
index e1122533a..29c025d0f 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_3
@@ -1,70 +1,68 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_4
index 29c025d0f..c3c88918b 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_4
@@ -1,68 +1,69 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_5
index c3c88918b..70117ba12 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoItemDL_vtx_5
@@ -1,69 +1,64 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL
index c32a29de2..4beef5eb3 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL
@@ -1,18 +1,16 @@
-
-
-
+
-
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_1
index e4351ae02..ae92327e4 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_1
@@ -1,149 +1,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
+
-
-
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -154,166 +52,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_2
index 7fc830e1a..bbbc96439 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_2
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_3
index e44951b95..6d11e6b1c 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_3
@@ -4,54 +4,54 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_4
index 95d14bbf9..827df8c0d 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_4
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_5
index 2d4599ea1..6714bf7a4 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_tri_5
@@ -8,50 +8,49 @@
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_1
index a6a795ad4..9339e42f0 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_1
@@ -1,414 +1,77 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_2
index 9339e42f0..e1122533a 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_2
@@ -1,77 +1,70 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_3
index e1122533a..29c025d0f 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_3
@@ -1,70 +1,68 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_4
index 29c025d0f..c3c88918b 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_4
@@ -1,68 +1,69 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_5
index c3c88918b..70117ba12 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoJunkDL_vtx_5
@@ -1,69 +1,64 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL
index 3ac575475..ed07b28c9 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL
@@ -1,20 +1,18 @@
-
-
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_1
index b5c505c58..f49d299ef 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_1
@@ -1,149 +1,47 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
+
-
-
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -154,202 +52,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_2
index 7d4c96741..ea82a9347 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_2
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_3
index f197bf25d..8cfca6524 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_3
@@ -4,54 +4,54 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_4
index 94a1f37ff..639c5aea4 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_4
@@ -2,56 +2,56 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_5
index 623fd160e..99a4852cb 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_5
@@ -8,50 +8,49 @@
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_6 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_6
index a51824531..e7ab8546c 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_6
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_tri_6
@@ -1,56 +1,41 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_1 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_1
index bc2d8d5c0..9339e42f0 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_1
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_1
@@ -1,451 +1,77 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_2 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_2
index 9339e42f0..e1122533a 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_2
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_2
@@ -1,77 +1,70 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_3 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_3
index e1122533a..29c025d0f 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_3
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_3
@@ -1,70 +1,68 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_4 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_4
index 29c025d0f..c3c88918b 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_4
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_4
@@ -1,68 +1,69 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_5 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_5
index c3c88918b..70117ba12 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_5
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_5
@@ -1,69 +1,64 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_6 b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_6
index 70117ba12..b76b5b312 100644
--- a/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_6
+++ b/soh/assets/custom/objects/object_archipelago_item/gArchipelagoProgressiveDL_vtx_6
@@ -1,64 +1,39 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/soh/assets/custom/textures/parameter_static/gArchipelagoJunk.png b/soh/assets/custom/textures/parameter_static/gArchipelagoJunk.png
new file mode 100644
index 000000000..8103d86aa
Binary files /dev/null and b/soh/assets/custom/textures/parameter_static/gArchipelagoJunk.png differ
diff --git a/soh/assets/custom/textures/parameter_static/gArchipelagoProgressive.png b/soh/assets/custom/textures/parameter_static/gArchipelagoProgressive.png
new file mode 100644
index 000000000..953a81705
Binary files /dev/null and b/soh/assets/custom/textures/parameter_static/gArchipelagoProgressive.png differ
diff --git a/soh/assets/custom/textures/parameter_static/gArchipelagoUseful.png b/soh/assets/custom/textures/parameter_static/gArchipelagoUseful.png
new file mode 100644
index 000000000..05d2e0c2d
Binary files /dev/null and b/soh/assets/custom/textures/parameter_static/gArchipelagoUseful.png differ
diff --git a/soh/assets/sources/archipelago/ap_logo_outline_arrow.blend b/soh/assets/sources/archipelago/ap_logo.blend
similarity index 51%
rename from soh/assets/sources/archipelago/ap_logo_outline_arrow.blend
rename to soh/assets/sources/archipelago/ap_logo.blend
index 2f5bd506a..97de91593 100644
Binary files a/soh/assets/sources/archipelago/ap_logo_outline_arrow.blend and b/soh/assets/sources/archipelago/ap_logo.blend differ
diff --git a/soh/assets/sources/archipelago/ap_logo_outline.blend b/soh/assets/sources/archipelago/ap_logo_arrow.blend
similarity index 55%
rename from soh/assets/sources/archipelago/ap_logo_outline.blend
rename to soh/assets/sources/archipelago/ap_logo_arrow.blend
index 5e2dfcc85..9dc5de292 100644
Binary files a/soh/assets/sources/archipelago/ap_logo_outline.blend and b/soh/assets/sources/archipelago/ap_logo_arrow.blend differ
diff --git a/soh/assets/sources/archipelago/ap_logo_outline_junk.blend b/soh/assets/sources/archipelago/ap_logo_junk.blend
similarity index 55%
rename from soh/assets/sources/archipelago/ap_logo_outline_junk.blend
rename to soh/assets/sources/archipelago/ap_logo_junk.blend
index ebb89803f..956a60cf3 100644
Binary files a/soh/assets/sources/archipelago/ap_logo_outline_junk.blend and b/soh/assets/sources/archipelago/ap_logo_junk.blend differ
diff --git a/soh/include/z64save.h b/soh/include/z64save.h
index ffd413455..dc11b6da8 100644
--- a/soh/include/z64save.h
+++ b/soh/include/z64save.h
@@ -170,9 +170,7 @@ typedef struct ShipBossRushSaveContextData {
} ShipBossRushSaveContextData;
typedef struct ArchipelagoLocationData {
- s8 itemType;
char itemName[100];
- char locationName[100];
char playerName[17];
} ArchipelagoLocationData;
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h
index c0c3672da..73e447999 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor_HookTable.h
@@ -70,6 +70,6 @@ DEFINE_HOOK(OnFileDropped, (std::string filePath));
DEFINE_HOOK(OnAssetAltChange, ());
DEFINE_HOOK(OnKaleidoUpdate, ());
-DEFINE_HOOK(OnRandomizerItemGivenHooks, (uint32_t rc));
+DEFINE_HOOK(OnRandomizerItemGivenHooks, (uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped));
DEFINE_HOOK(OnArchipelagoItemRecieved, (uint32_t rg));
DEFINE_HOOK(OnRandomizerExternalCheck, (uint32_t rc));
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp
index 393df5b2c..238cff3b0 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.cpp
@@ -304,8 +304,8 @@ void GameInteractor_ExecuteOnKaleidoUpdate() {
// Mark: Randomizer
-void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc) {
- GameInteractor::Instance->ExecuteHooks(rc);
+void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped) {
+ GameInteractor::Instance->ExecuteHooks(rc, gi, isGiSkipped);
}
// MARK: Archipelago
diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h
index da276455a..17de14e5f 100644
--- a/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h
+++ b/soh/soh/Enhancements/game-interactor/GameInteractor_Hooks.h
@@ -82,7 +82,7 @@ void GameInteractor_RegisterOnAssetAltChange(void (*fn)(void));
void GameInteractor_ExecuteOnKaleidoUpdate();
// Mark: - Randomizer
-void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc);
+void GameInteractor_ExecuteOnRandomizerItemGivenHooks(uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped);
// Mark: - Archipelago
void GameInteractor_ExecuteOnArchipelagoItemRecieved(uint32_t rg);
diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp
index f072725e7..67502ff5e 100644
--- a/soh/soh/Enhancements/randomizer/context.cpp
+++ b/soh/soh/Enhancements/randomizer/context.cpp
@@ -440,8 +440,8 @@ void Context::ParseArchipelago() {
mSpoilerLoaded = false;
ArchipelagoClient& ap_client = ArchipelagoClient::GetInstance();
- Rando::Settings::GetInstance()->ParseArchipelago(ap_client.GetSlotData());
ParseArchipelagoItemsLocations(ap_client.GetScoutedItems());
+ ParseArchipelagoOptions(ap_client.GetSlotData());
// lets see if counting AP_loaded as spoiler loaded does the trick
mSpoilerLoaded = true;
@@ -481,6 +481,235 @@ void Context::ParseItemLocationsJson(nlohmann::json spoilerFileJson) {
}
}
+void Context::ParseArchipelagoOptions(const std::map& slot_data) {
+ // Set options to what Archipelago expects. Need to slowly convert these to options in apworld and
+ // load those in instead.
+
+ nlohmann::json slotData = ArchipelagoClient::GetInstance().GetSlotData();
+ mOptions[RSK_FOREST].Set(RO_CLOSED_FOREST_OFF);
+ mOptions[RSK_KAK_GATE].Set(RO_KAK_GATE_OPEN);
+ mOptions[RSK_DOOR_OF_TIME].Set(RO_DOOROFTIME_OPEN);
+ mOptions[RSK_ZORAS_FOUNTAIN].Set(RO_ZF_CLOSED);
+ mOptions[RSK_SLEEPING_WATERFALL].Set(RO_WATERFALL_CLOSED);
+ mOptions[RSK_STARTING_AGE].Set(RO_AGE_CHILD);
+ mOptions[RSK_SELECTED_STARTING_AGE].Set(0);
+ mOptions[RSK_GERUDO_FORTRESS].Set(RO_GF_CARPENTERS_NORMAL);
+ mOptions[RSK_RAINBOW_BRIDGE].Set(RO_BRIDGE_GREG);
+ mOptions[RSK_RAINBOW_BRIDGE_STONE_COUNT].Set(0);
+ mOptions[RSK_RAINBOW_BRIDGE_MEDALLION_COUNT].Set(0);
+ mOptions[RSK_RAINBOW_BRIDGE_REWARD_COUNT].Set(0);
+ mOptions[RSK_RAINBOW_BRIDGE_DUNGEON_COUNT].Set(0);
+ mOptions[RSK_RAINBOW_BRIDGE_TOKEN_COUNT].Set(0);
+ mOptions[RSK_BRIDGE_OPTIONS].Set(0);
+ mOptions[RSK_GANONS_TRIALS].Set(RO_GANONS_TRIALS_SKIP);
+ mOptions[RSK_TRIAL_COUNT].Set(0);
+ mOptions[RSK_STARTING_OCARINA].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_OCARINA].Set(RO_GENERIC_YES);
+ mOptions[RSK_SHUFFLE_OCARINA_BUTTONS].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_SWIM].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_DEKU_SHIELD].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_KOKIRI_SWORD].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_MASTER_SWORD].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_ZELDAS_LULLABY].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_EPONAS_SONG].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_SARIAS_SONG].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_SUNS_SONG].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_SONG_OF_TIME].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_SONG_OF_STORMS].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_MINUET_OF_FOREST].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_BOLERO_OF_FIRE].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_SERENADE_OF_WATER].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_REQUIEM_OF_SPIRIT].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_NOCTURNE_OF_SHADOW].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_PRELUDE_OF_LIGHT].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_KOKIRI_SWORD].Set(RO_GENERIC_YES);
+ mOptions[RSK_SHUFFLE_MASTER_SWORD].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_CHILD_WALLET].Set(RO_GENERIC_NO);
+ mOptions[RSK_INCLUDE_TYCOON_WALLET].Set(RO_GENERIC_YES);
+ mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_ANYWHERE);
+ mOptions[RSK_SHUFFLE_SONGS].Set(RO_SONG_SHUFFLE_ANYWHERE);
+ mOptions[RSK_SHUFFLE_TOKENS].Set(slotData["shuffle_tokens"]);
+ mOptions[RSK_SHOPSANITY].Set(slotData["shuffle_shops"]);
+ mOptions[RSK_SHOPSANITY_COUNT].Set(4);
+ mOptions[RSK_SHOPSANITY_PRICES].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_FIXED_PRICE].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_RANGE_1].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_RANGE_2].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_NO_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_CHILD_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_ADULT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_GIANT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_TYCOON_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SHOPSANITY_PRICES_AFFORDABLE].Set(0);
+ if (slotData["shuffle_scrubs"] == 1) {
+ mOptions[RSK_SHUFFLE_SCRUBS].Set(RO_SCRUBS_ALL);
+ } else {
+ mOptions[RSK_SHUFFLE_SCRUBS].Set(RO_SCRUBS_OFF);
+ }
+ mOptions[RSK_SCRUBS_PRICES].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_FIXED_PRICE].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_RANGE_1].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_RANGE_2].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_NO_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_CHILD_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_ADULT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_GIANT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_TYCOON_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_SCRUBS_PRICES_AFFORDABLE].Set(0);
+ mOptions[RSK_SHUFFLE_BEEHIVES].Set(slotData["shuffle_beehives"]);
+ mOptions[RSK_SHUFFLE_COWS].Set(slotData["shuffle_cows"]);
+ mOptions[RSK_SHUFFLE_WEIRD_EGG].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD].Set(RO_GENERIC_YES);
+ mOptions[RSK_SHUFFLE_POTS].Set(slotData["shuffle_pots"]);
+ mOptions[RSK_SHUFFLE_CRATES].Set(slotData["shuffle_crates"]);
+ mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES].Set(slotData["shuffle_frogs"]);
+ mOptions[RSK_ITEM_POOL].Set(0);
+ mOptions[RSK_ICE_TRAPS].Set(0);
+ mOptions[RSK_GOSSIP_STONE_HINTS].Set(RO_GOSSIP_STONES_NONE);
+ mOptions[RSK_TOT_ALTAR_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_GANONDORF_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHEIK_LA_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_DAMPES_DIARY_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_GREG_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_LOACH_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_SARIA_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_FROGS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_OOT_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_10_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_20_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_30_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_40_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_50_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_KAK_100_SKULLS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_MASK_SHOP_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_BIGGORON_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_BIG_POES_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_CHICKENS_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_MALON_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_HBA_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_WARP_SONG_HINTS].Set(RO_GENERIC_NO);
+ mOptions[RSK_SCRUB_TEXT_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_MERCHANT_TEXT_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_FISHING_POLE_HINT].Set(RO_GENERIC_NO);
+ mOptions[RSK_HINT_CLARITY].Set(0);
+ mOptions[RSK_HINT_DISTRIBUTION].Set(0);
+ mOptions[RSK_SHUFFLE_MAPANDCOMPASS].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
+ mOptions[RSK_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
+ mOptions[RSK_GERUDO_KEYS].Set(RO_GERUDO_KEYS_ANYWHERE);
+ mOptions[RSK_BOSS_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE);
+ mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_ANYWHERE);
+ mOptions[RSK_SKIP_CHILD_STEALTH].Set(RO_GENERIC_YES);
+ mOptions[RSK_SKIP_CHILD_ZELDA].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_STICKS].Set(RO_GENERIC_NO);
+ mOptions[RSK_STARTING_NUTS].Set(RO_GENERIC_NO);
+ mOptions[RSK_FULL_WALLETS].Set(RO_GENERIC_YES);
+ mOptions[RSK_SHUFFLE_CHEST_MINIGAME].Set(RO_GENERIC_NO);
+ mOptions[RSK_CUCCO_COUNT].Set(1);
+ mOptions[RSK_BIG_POE_COUNT].Set(1);
+ mOptions[RSK_SKIP_EPONA_RACE].Set(RO_GENERIC_YES);
+ mOptions[RSK_COMPLETE_MASK_QUEST].Set(RO_GENERIC_YES);
+ mOptions[RSK_SKIP_SCARECROWS_SONG].Set(RO_GENERIC_YES);
+ mOptions[RSK_SKULLS_SUNS_SONG].Set(0);
+ mOptions[RSK_SHUFFLE_ADULT_TRADE].Set(slotData["shuffle_trade_items"]);
+ if (slotData["shuffle_merchants"] == 1) {
+ mOptions[RSK_SHUFFLE_MERCHANTS].Set(RO_SHUFFLE_MERCHANTS_ALL);
+ } else {
+ mOptions[RSK_SHUFFLE_MERCHANTS].Set(RO_SHUFFLE_MERCHANTS_OFF);
+ }
+ mOptions[RSK_MERCHANT_PRICES].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_RANGE_1].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_RANGE_2].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_NO_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_CHILD_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_ADULT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_GIANT_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_TYCOON_WALLET_WEIGHT].Set(0);
+ mOptions[RSK_MERCHANT_PRICES_AFFORDABLE].Set(0);
+ mOptions[RSK_BLUE_FIRE_ARROWS].Set(RO_GENERIC_YES);
+ mOptions[RSK_SUNLIGHT_ARROWS].Set(RO_GENERIC_YES);
+ mOptions[RSK_ENABLE_BOMBCHU_DROPS].Set(RO_GENERIC_YES);
+ mOptions[RSK_BOMBCHU_BAG].Set(RO_GENERIC_YES);
+ mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_NOTHING);
+ mOptions[RSK_MQ_DUNGEON_RANDOM].Set(0);
+ mOptions[RSK_MQ_DUNGEON_COUNT].Set(0);
+ mOptions[RSK_MQ_DUNGEON_SET].Set(0);
+ mOptions[RSK_MQ_DEKU_TREE].Set(0);
+ mOptions[RSK_MQ_DODONGOS_CAVERN].Set(0);
+ mOptions[RSK_MQ_JABU_JABU].Set(0);
+ mOptions[RSK_MQ_FOREST_TEMPLE].Set(0);
+ mOptions[RSK_MQ_FIRE_TEMPLE].Set(0);
+ mOptions[RSK_MQ_WATER_TEMPLE].Set(0);
+ mOptions[RSK_MQ_SPIRIT_TEMPLE].Set(0);
+ mOptions[RSK_MQ_SHADOW_TEMPLE].Set(0);
+ mOptions[RSK_MQ_BOTTOM_OF_THE_WELL].Set(0);
+ mOptions[RSK_MQ_ICE_CAVERN].Set(0);
+ mOptions[RSK_MQ_GTG].Set(0);
+ mOptions[RSK_MQ_GANONS_CASTLE].Set(0);
+ mOptions[RSK_LACS_STONE_COUNT].Set(0);
+ mOptions[RSK_LACS_MEDALLION_COUNT].Set(0);
+ mOptions[RSK_LACS_REWARD_COUNT].Set(0);
+ mOptions[RSK_LACS_DUNGEON_COUNT].Set(0);
+ mOptions[RSK_LACS_TOKEN_COUNT].Set(0);
+ mOptions[RSK_LACS_OPTIONS].Set(0);
+ mOptions[RSK_KEYRINGS].Set(0);
+ mOptions[RSK_KEYRINGS_RANDOM_COUNT].Set(0);
+ mOptions[RSK_KEYRINGS_GERUDO_FORTRESS].Set(0);
+ mOptions[RSK_KEYRINGS_FOREST_TEMPLE].Set(0);
+ mOptions[RSK_KEYRINGS_FIRE_TEMPLE].Set(0);
+ mOptions[RSK_KEYRINGS_WATER_TEMPLE].Set(0);
+ mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE].Set(0);
+ mOptions[RSK_KEYRINGS_SHADOW_TEMPLE].Set(0);
+ mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL].Set(0);
+ mOptions[RSK_KEYRINGS_GTG].Set(0);
+ mOptions[RSK_KEYRINGS_GANONS_CASTLE].Set(0);
+ mOptions[RSK_SHUFFLE_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_OWL_DROPS].Set(0);
+ mOptions[RSK_SHUFFLE_WARP_SONGS].Set(0);
+ mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS].Set(0);
+ mOptions[RSK_MIXED_ENTRANCE_POOLS].Set(0);
+ mOptions[RSK_MIX_DUNGEON_ENTRANCES].Set(0);
+ mOptions[RSK_MIX_BOSS_ENTRANCES].Set(0);
+ mOptions[RSK_MIX_OVERWORLD_ENTRANCES].Set(0);
+ mOptions[RSK_MIX_INTERIOR_ENTRANCES].Set(0);
+ mOptions[RSK_MIX_GROTTO_ENTRANCES].Set(0);
+ mOptions[RSK_DECOUPLED_ENTRANCES].Set(0);
+ mOptions[RSK_STARTING_SKULLTULA_TOKEN].Set(0);
+ mOptions[RSK_STARTING_HEARTS].Set(2);
+ mOptions[RSK_DAMAGE_MULTIPLIER].Set(0);
+ mOptions[RSK_ALL_LOCATIONS_REACHABLE].Set(0);
+ mOptions[RSK_SHUFFLE_BOSS_ENTRANCES].Set(0);
+ mOptions[RSK_SHUFFLE_100_GS_REWARD].Set(RO_GENERIC_NO);
+ mOptions[RSK_TRIFORCE_HUNT].Set(RO_GENERIC_NO);
+ mOptions[RSK_TRIFORCE_HUNT_PIECES_TOTAL].Set(0);
+ mOptions[RSK_TRIFORCE_HUNT_PIECES_REQUIRED].Set(0);
+ mOptions[RSK_SHUFFLE_BOSS_SOULS].Set(RO_GENERIC_NO);
+ if (slotData["shuffle_fish"] == 0) {
+ mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_OFF);
+ } else if (slotData["shuffle_fish"] == 1) {
+ mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_POND);
+ } else if (slotData["shuffle_fish"] == 2) {
+ mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_OVERWORLD);
+ } else if (slotData["shuffle_fish"] == 3) {
+ mOptions[RSK_FISHSANITY].Set(RO_FISHSANITY_BOTH);
+ }
+ mOptions[RSK_FISHSANITY_POND_COUNT].Set(15);
+ mOptions[RSK_FISHSANITY_AGE_SPLIT].Set(15);
+ mOptions[RSK_SHUFFLE_FISHING_POLE].Set(RO_GENERIC_NO);
+ mOptions[RSK_INFINITE_UPGRADES].Set(RO_INF_UPGRADES_OFF);
+ mOptions[RSK_SKELETON_KEY].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_DEKU_STICK_BAG].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_DEKU_NUT_BAG].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_FREESTANDING].Set(slotData["shuffle_freestanding"]);
+ mOptions[RSK_SHUFFLE_FAIRIES].Set(slotData["shuffle_fairies"]);
+ mOptions[RSK_LOCK_OVERWORLD_DOORS].Set(RO_GENERIC_NO);
+ mOptions[RSK_SHUFFLE_GRASS].Set(slotData["shuffle_grass"]);
+}
+
void Context::ParseArchipelagoItemsLocations(const std::vector& scouted_items) {
const std::string SlotName = ArchipelagoClient::GetInstance().GetSlotName();
@@ -499,17 +728,16 @@ void Context::ParseArchipelagoItemsLocations(const std::vector& slot_data);
+ void ParseArchipelagoOptions(const std::map& slot_data);
void ParseArchipelagoItemsLocations(const std::vector& slot_data);
/**
diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
index f21a59312..601b2be0d 100644
--- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp
+++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp
@@ -311,6 +311,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
GetItemEntry getItemEntry;
RandomizerCheck rc = randomizerQueuedChecks.front();
auto loc = Rando::Context::GetInstance()->GetItemLocation(rc);
+ uint8_t isGiSkipped = 0;
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
getItemEntry = Rando::Context::GetInstance()->GetArchipelagoGIEntry();
@@ -328,6 +329,7 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
randomizerQueuedItemEntry = getItemEntry;
SPDLOG_INFO("Queueing Item mod {} item {} from RC {}", getItemEntry.modIndex, getItemEntry.itemId,
static_cast(rc));
+
if (
// Skipping ItemGet animation incompatible with checks that require closing a text box to finish
rc != RC_HF_OCARINA_OF_TIME_ITEM && rc != RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST &&
@@ -346,10 +348,12 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() {
getItemEntry.getItemCategory == ITEM_CATEGORY_SKULLTULA_TOKEN ||
getItemEntry.getItemCategory == ITEM_CATEGORY_LESSER))))) {
Item_DropCollectible(gPlayState, &spawnPos, ITEM00_SOH_GIVE_ITEM_ENTRY | 0x8000);
+
+ isGiSkipped = 1;
}
}
- GameInteractor_ExecuteOnRandomizerItemGivenHooks((uint32_t)rc);
+ GameInteractor_ExecuteOnRandomizerItemGivenHooks((uint32_t)rc, getItemEntry, isGiSkipped);
randomizerQueuedChecks.pop();
}
@@ -800,6 +804,8 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
va_list args;
va_copy(args, originalArgs);
+ u8 test;
+
switch (id) {
case VB_ALLOW_ENTRANCE_CS_FOR_EITHER_AGE: {
s32 entranceIndex = va_arg(args, s32);
@@ -862,6 +868,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
}
break;
case VB_MOVE_MIDO_IN_KOKIRI_FOREST:
+ test = RAND_GET_OPTION(RSK_FOREST);
if (RAND_GET_OPTION(RSK_FOREST) == RO_CLOSED_FOREST_OFF && gSaveContext.cutsceneIndex == 0) {
*should = true;
}
@@ -1049,12 +1056,16 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
.suffix = SohUtils::GetItemName(item00->itemEntry.itemId),
});
} else if (item00->itemEntry.modIndex == MOD_RANDOMIZER) {
- Notification::Emit({
- .message = "You found ",
- .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
- .GetName()
- .english,
- });
+ if (!(item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_PROGRESSIVE ||
+ item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_USEFUL ||
+ item00->itemEntry.getItemId == RG_ARCHIPELAGO_ITEM_JUNK)) {
+ Notification::Emit({
+ .message = "You found ",
+ .suffix = Rando::StaticData::RetrieveItem((RandomizerGet)item00->itemEntry.getItemId)
+ .GetName()
+ .english,
+ });
+ }
}
// This is typically called when you close the text box after getting an item, in case a previous
diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp
index aac0e8927..388ea6f6f 100644
--- a/soh/soh/Enhancements/randomizer/settings.cpp
+++ b/soh/soh/Enhancements/randomizer/settings.cpp
@@ -2906,10 +2906,6 @@ void Settings::ParseJson(nlohmann::json spoilerFileJson) {
}
}
-void Settings::ParseArchipelago(const std::map& slot_data) {
- // This is going to be completely redone since switching to apclientpp
-}
-
void Settings::AssignContext(std::shared_ptr ctx) {
mContext = ctx;
}
diff --git a/soh/soh/Network/Archipelago/Archipelago.cpp b/soh/soh/Network/Archipelago/Archipelago.cpp
index a33ea6a99..e4c80b7a9 100644
--- a/soh/soh/Network/Archipelago/Archipelago.cpp
+++ b/soh/soh/Network/Archipelago/Archipelago.cpp
@@ -14,6 +14,7 @@
#include "soh/Enhancements/randomizer/context.h"
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
+#include "soh/Notification/Notification.h"
#include "soh/ShipInit.hpp"
#include "soh/SaveManager.h"
@@ -60,9 +61,11 @@ bool ArchipelagoClient::StartClient() {
0b001, tags);
});
- apClient->set_slot_connected_handler([&](const nlohmann::json) {
+ apClient->set_slot_connected_handler([&](const nlohmann::json data) {
ArchipelagoConsole_SendMessage("[LOG] Connected.", false);
ArchipelagoClient::StartLocationScouts();
+
+ slotData = data;
// if we are already in game when we connect
// we won't have to request an itemSynch
@@ -267,7 +270,7 @@ const std::string ArchipelagoClient::GetSlotName() const {
return apClient->get_slot();
}
-const std::map& ArchipelagoClient::GetSlotData() {
+const nlohmann::json ArchipelagoClient::GetSlotData() {
return slotData;
}
@@ -306,18 +309,17 @@ const char* ArchipelagoClient::GetConnectionStatus() {
extern "C" void Archipelago_InitSaveFile() {
gSaveContext.ship.quest.data.archipelago.isArchipelago = 1;
+ nlohmann::json slotData = ArchipelagoClient::GetInstance().GetSlotData();
+ gSaveContext.ship.quest.data.archipelago.deathLink = slotData["death_link"];
+
std::vector scoutedItems = ArchipelagoClient::GetInstance().GetScoutedItems();
for (uint32_t i = 0; i < scoutedItems.size(); i++) {
RandomizerCheck rc = Rando::StaticData::locationNameToEnum[scoutedItems[i].locationName];
- gSaveContext.ship.quest.data.archipelago.locations[rc].itemType = scoutedItems[i].flags;
SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[rc].itemName,
scoutedItems[i].itemName,
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[rc].itemName));
- SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[rc].locationName,
- scoutedItems[i].locationName,
- ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[rc].locationName));
SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[rc].playerName,
scoutedItems[i].playerName,
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[rc].playerName));
@@ -339,15 +341,9 @@ void LoadArchipelagoData() {
"locations", ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations),
[](size_t i) {
SaveManager::Instance->LoadStruct("", [&i]() {
- SaveManager::Instance->LoadData("itemType",
- gSaveContext.ship.quest.data.archipelago.locations[i].itemType);
-
SaveManager::Instance->LoadCharArray(
"itemName", gSaveContext.ship.quest.data.archipelago.locations[i].itemName,
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].itemName));
- SaveManager::Instance->LoadCharArray(
- "locationName", gSaveContext.ship.quest.data.archipelago.locations[i].locationName,
- ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].locationName));
SaveManager::Instance->LoadCharArray(
"playerName", gSaveContext.ship.quest.data.archipelago.locations[i].playerName,
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].playerName));
@@ -367,13 +363,8 @@ void SaveArchipelagoData(SaveContext* saveContext, int sectionID, bool fullSave)
SaveManager::Instance->SaveArray(
"locations", ARRAY_COUNT(saveContext->ship.quest.data.archipelago.locations), [&](size_t i) {
SaveManager::Instance->SaveStruct("", [&]() {
- SaveManager::Instance->SaveData("itemType",
- saveContext->ship.quest.data.archipelago.locations[i].itemType);
-
SaveManager::Instance->SaveData("itemName",
saveContext->ship.quest.data.archipelago.locations[i].itemName);
- SaveManager::Instance->SaveData("locationName",
- saveContext->ship.quest.data.archipelago.locations[i].locationName);
SaveManager::Instance->SaveData("playerName",
saveContext->ship.quest.data.archipelago.locations[i].playerName);
});
@@ -391,12 +382,8 @@ void InitArchipelagoData(bool isDebug) {
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.slotName));
for (uint32_t i = 0; i < ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations); i++) {
- gSaveContext.ship.quest.data.archipelago.locations[i].itemType = -1;
-
SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[i].itemName, "",
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].itemName));
- SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[i].locationName, "",
- ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].locationName));
SohUtils::CopyStringToCharArray(gSaveContext.ship.quest.data.archipelago.locations[i].playerName, "",
ARRAY_COUNT(gSaveContext.ship.quest.data.archipelago.locations[i].playerName));
}
@@ -404,12 +391,37 @@ void InitArchipelagoData(bool isDebug) {
void RegisterArchipelago() {
COND_HOOK(GameInteractor::OnRandomizerItemGivenHooks, IS_ARCHIPELAGO,
- [](uint32_t rc) {
+ [](uint32_t rc, GetItemEntry gi, uint8_t isGiSkipped) {
if (rc == RC_ARCHIPELAGO_RECIEVED_ITEM) {
gSaveContext.ship.quest.data.archipelago.lastReceivedItemIndex++;
ArchipelagoClient::GetInstance().itemQueued = false;
} else {
ArchipelagoClient::GetInstance().CheckLocation((RandomizerCheck)rc);
+
+ if (isGiSkipped && gi.modIndex == MOD_RANDOMIZER &&
+ (gi.getItemId == RG_ARCHIPELAGO_ITEM_PROGRESSIVE || gi.getItemId == RG_ARCHIPELAGO_ITEM_USEFUL ||
+ gi.getItemId == RG_ARCHIPELAGO_ITEM_JUNK)) {
+
+ const char* itemIcon = "";
+ switch (gi.getItemId) {
+ case RG_ARCHIPELAGO_ITEM_PROGRESSIVE:
+ itemIcon = "Archipelago Progressive Icon";
+ break;
+ case RG_ARCHIPELAGO_ITEM_USEFUL:
+ itemIcon = "Archipelago Useful Icon";
+ break;
+ case RG_ARCHIPELAGO_ITEM_JUNK:
+ itemIcon = "Archipelago Junk Icon";
+ break;
+ }
+
+ Notification::Emit({
+ .itemIcon = itemIcon,
+ .prefix = std::string(gSaveContext.ship.quest.data.archipelago.locations[rc].itemName),
+ .message = " for ",
+ .suffix = std::string(gSaveContext.ship.quest.data.archipelago.locations[rc].playerName)
+ });
+ }
}
});
}
diff --git a/soh/soh/Network/Archipelago/Archipelago.h b/soh/soh/Network/Archipelago/Archipelago.h
index 9b517f6a2..314c0a34a 100644
--- a/soh/soh/Network/Archipelago/Archipelago.h
+++ b/soh/soh/Network/Archipelago/Archipelago.h
@@ -3,6 +3,7 @@
#include "soh/Enhancements/randomizer/randomizerTypes.h"
#include "soh/Enhancements/randomizer/static_data.h"
#include
+#include
#include
// Forward declaration
@@ -41,7 +42,7 @@ class ArchipelagoClient{
const std::string GetSlotName() const;
const char* GetConnectionStatus();
- const std::map& GetSlotData();
+ const nlohmann::json GetSlotData();
const std::vector& GetScoutedItems();
bool IsConnected();
@@ -71,7 +72,7 @@ class ArchipelagoClient{
bool gameWon;
- std::map slotData;
+ nlohmann::json slotData;
std::set locations;
std::vector scoutedItems;
std::queue recieveQueue;
diff --git a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp
index 05ae198b3..7f0d92a71 100644
--- a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp
+++ b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp
@@ -16,12 +16,12 @@ void ArchipelagoSettingsWindow::DrawElement() {
ImGui::Text("Server Address");
UIWidgets::CVarInputString("##ArchipelagoServerAddress", CVAR_REMOTE_ARCHIPELAGO("ServerAddress"),
- UIWidgets::InputOptions()
- .Color(THEME_COLOR)
- .PlaceholderText("archipelago.gg:38281")
- .DefaultValue("archipelago.gg:38281")
- .Size(ImVec2(ImGui::GetFontSize() * 15, 0))
- .LabelPosition(UIWidgets::LabelPositions::None));
+ UIWidgets::InputOptions()
+ .Color(THEME_COLOR)
+ .PlaceholderText("archipelago.gg:38281")
+ .DefaultValue("archipelago.gg:38281")
+ .Size(ImVec2(ImGui::GetFontSize() * 15, 0))
+ .LabelPosition(UIWidgets::LabelPositions::None));
ImGui::Text("Slot Name");
UIWidgets::CVarInputString("##ArchipelagoSlotName", CVAR_REMOTE_ARCHIPELAGO("SlotName"),
UIWidgets::InputOptions()
@@ -72,6 +72,18 @@ void ArchipelagoSettingsWindow::DrawElement() {
ArchipelagoClient::GetInstance().OnItemReceived(apItem);
}
}
+
+ static bool sArchipelagoTexturesLoaded = false;
+ if (!sArchipelagoTexturesLoaded) {
+ Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
+ "Archipelago Progressive Icon", "textures/parameter_static/gArchipelagoProgressive.png");
+ Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
+ "Archipelago Useful Icon", "textures/parameter_static/gArchipelagoUseful.png");
+ Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadTextureFromRawImage(
+ "Archipelago Junk Icon", "textures/parameter_static/gArchipelagoJunk.png");
+
+ sArchipelagoTexturesLoaded = true;
+ }
};
void ArchipelagoSettingsWindow::InitElement() {
diff --git a/soh/soh/Notification/Notification.cpp b/soh/soh/Notification/Notification.cpp
index 14873b068..5108ae2cb 100644
--- a/soh/soh/Notification/Notification.cpp
+++ b/soh/soh/Notification/Notification.cpp
@@ -89,7 +89,7 @@ void Window::Draw() {
if (notification.itemIcon != nullptr) {
ImGui::Image(Ship::Context::GetInstance()->GetWindow()->GetGui()->GetTextureByName(notification.itemIcon),
- ImVec2(24, 24));
+ ImVec2(32, 32));
ImGui::SameLine();
}
if (!notification.prefix.empty()) {