diff --git a/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 new file mode 100644 index 000000000..99a0fd4bd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 new file mode 100644 index 000000000..1d4f2db39 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 new file mode 100644 index 000000000..54bdc9fa7 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_bosskey_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 new file mode 100644 index 000000000..9d561d1ae Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_bronze_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 new file mode 100644 index 000000000..b9d1f74e3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_fairy_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 new file mode 100644 index 000000000..8ec68d3aa Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_gold_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 new file mode 100644 index 000000000..2822f18fd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_heart_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 new file mode 100644 index 000000000..bf90c64fc Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_mask_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 new file mode 100644 index 000000000..52f4848b3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_random_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 new file mode 100644 index 000000000..9d14059c0 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_silver_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 b/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 new file mode 100644 index 000000000..436b87071 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_field_keep/flower_token_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL new file mode 100644 index 000000000..c0a32b3b0 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 new file mode 100644 index 000000000..bdb256c87 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 new file mode 100644 index 000000000..eab49e30d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 new file mode 100644 index 000000000..2fea2e4db --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL new file mode 100644 index 000000000..70e8240a4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 new file mode 100644 index 000000000..926fed879 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 new file mode 100644 index 000000000..74ccefada --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 new file mode 100644 index 000000000..08fdc08b9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushFairyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL new file mode 100644 index 000000000..046e04d33 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 new file mode 100644 index 000000000..dcc1da33a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 new file mode 100644 index 000000000..8475ba007 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 new file mode 100644 index 000000000..c20f0dc4d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushHeartDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL new file mode 100644 index 000000000..a27f05f47 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 new file mode 100644 index 000000000..be06a23a7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushJunkDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL new file mode 100644 index 000000000..af43aa60c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 new file mode 100644 index 000000000..dd226cbc5 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 new file mode 100644 index 000000000..e00033c0f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 new file mode 100644 index 000000000..95c382ca0 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMajorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL new file mode 100644 index 000000000..b9e25ae70 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 new file mode 100644 index 000000000..874e7ffb8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 new file mode 100644 index 000000000..90b390218 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 new file mode 100644 index 000000000..b2c011f94 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMaskDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL new file mode 100644 index 000000000..35d99afcd --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 new file mode 100644 index 000000000..6f519fbc8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 new file mode 100644 index 000000000..6d7a07c98 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 new file mode 100644 index 000000000..f85ac723f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushMinorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL new file mode 100644 index 000000000..c04d7156e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 new file mode 100644 index 000000000..cb19e7c48 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 new file mode 100644 index 000000000..8cf916c22 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 new file mode 100644 index 000000000..cb5550f61 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushRandomDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL new file mode 100644 index 000000000..29371b448 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 new file mode 100644 index 000000000..a25ca5b55 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 new file mode 100644 index 000000000..cb9c707a8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 new file mode 100644 index 000000000..96023e0eb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushSmallKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL new file mode 100644 index 000000000..c8a98c94e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 new file mode 100644 index 000000000..e60691715 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_0 @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 new file mode 100644 index 000000000..d20545643 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_1 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 new file mode 100644 index 000000000..72993605d --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_tri_2 @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 new file mode 100644 index 000000000..ff0b01fdf --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 new file mode 100644 index 000000000..af2f51461 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_1 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 new file mode 100644 index 000000000..5f2557028 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_2 @@ -0,0 +1,268 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/gFieldBushTokenDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey new file mode 100644 index 000000000..0cad964b8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy new file mode 100644 index 000000000..740ca2da3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_flower_fairy @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushFairyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart new file mode 100644 index 000000000..e074ff279 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_flower_heart @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushHeartDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushJunkDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold new file mode 100644 index 000000000..42f481571 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_flower_gold @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMajorDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask new file mode 100644 index 000000000..f19b26e56 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_flower_mask @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMaskDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze new file mode 100644 index 000000000..de5aecac6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_flower_bronze @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushMinorDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random new file mode 100644 index 000000000..36895a84b --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_flower_random @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushRandomDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver new file mode 100644 index 000000000..227294911 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_flower_silver @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushSmallKeyDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token new file mode 100644 index 000000000..6725b33e6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_flower_token @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf new file mode 100644 index 000000000..72bfec180 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery new file mode 100644 index 000000000..0fdd83a9e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/mat_gFieldBushTokenDL_f3dlite_shrubbery @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_field_keep/model.xml b/soh/assets/custom/objects/gameplay_field_keep/model.xml new file mode 100644 index 000000000..9c003b401 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_field_keep/model.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 new file mode 100644 index 000000000..1d4f2db39 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/LeafTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 new file mode 100644 index 000000000..fa00a5606 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/StemTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 new file mode 100644 index 000000000..54bdc9fa7 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_bosskey_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 new file mode 100644 index 000000000..9d561d1ae Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_bronze_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 new file mode 100644 index 000000000..b9d1f74e3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_fairy_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 new file mode 100644 index 000000000..8ec68d3aa Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_gold_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 new file mode 100644 index 000000000..2822f18fd Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_heart_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 new file mode 100644 index 000000000..bf90c64fc Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_mask_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 new file mode 100644 index 000000000..52f4848b3 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_random_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 new file mode 100644 index 000000000..9d14059c0 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_silver_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 b/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 new file mode 100644 index 000000000..436b87071 Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/flower_token_tex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 b/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 new file mode 100644 index 000000000..c59757c1d Binary files /dev/null and b/soh/assets/custom/objects/gameplay_keep/gGrassBunchTex.rgba16 differ diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL new file mode 100644 index 000000000..4c7b1ab35 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 new file mode 100644 index 000000000..061362cd6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 new file mode 100644 index 000000000..16c026e42 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 new file mode 100644 index 000000000..0d0968586 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 new file mode 100644 index 000000000..d8fcf1fe1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassBossKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL new file mode 100644 index 000000000..875f809dd --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 new file mode 100644 index 000000000..951dd58bb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 new file mode 100644 index 000000000..97fe8599c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 new file mode 100644 index 000000000..0d7b67f3c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 new file mode 100644 index 000000000..22c8ba3d8 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassFairyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL new file mode 100644 index 000000000..235dfdcf3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 new file mode 100644 index 000000000..273e96ed4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 new file mode 100644 index 000000000..1b8a08eec --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 new file mode 100644 index 000000000..889988611 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 new file mode 100644 index 000000000..45a3b48e1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassHeartDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL new file mode 100644 index 000000000..d4ab27bdb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 new file mode 100644 index 000000000..bcf6f69e6 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull new file mode 100644 index 000000000..6444457b7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassJunkDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL new file mode 100644 index 000000000..7ded8214f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 new file mode 100644 index 000000000..f8278cc0c --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 new file mode 100644 index 000000000..64c020a98 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 new file mode 100644 index 000000000..13938b6d9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 new file mode 100644 index 000000000..da60e69d2 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMajorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL new file mode 100644 index 000000000..94c93e453 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 new file mode 100644 index 000000000..d981594a9 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 new file mode 100644 index 000000000..ee5852695 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 new file mode 100644 index 000000000..1ed45fdcb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 new file mode 100644 index 000000000..94910ceb3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMaskDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL new file mode 100644 index 000000000..e0ae6e48a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 new file mode 100644 index 000000000..7a5d4e3de --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 new file mode 100644 index 000000000..a24c28fa4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 new file mode 100644 index 000000000..5ef0b99cb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 new file mode 100644 index 000000000..d49e9b186 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassMinorDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL new file mode 100644 index 000000000..7ec87e807 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 new file mode 100644 index 000000000..94ccbe795 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 new file mode 100644 index 000000000..96e84046e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 new file mode 100644 index 000000000..db7142847 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 new file mode 100644 index 000000000..b1b8cb8c1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassRandomDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL new file mode 100644 index 000000000..f22094eba --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 new file mode 100644 index 000000000..2235b57ae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 new file mode 100644 index 000000000..93b101a86 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 new file mode 100644 index 000000000..2cf0ed524 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 new file mode 100644 index 000000000..653b2b7cb --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL new file mode 100644 index 000000000..d1dff7095 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 new file mode 100644 index 000000000..dc2309657 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_0 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 new file mode 100644 index 000000000..f78444188 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_1 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 new file mode 100644 index 000000000..7de2d7943 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_2 @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 new file mode 100644 index 000000000..e5c1fbd15 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_tri_3 @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 new file mode 100644 index 000000000..7f094d39f --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_0 @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 new file mode 100644 index 000000000..18d3d3c64 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_1 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 new file mode 100644 index 000000000..205b9a005 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_2 @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 new file mode 100644 index 000000000..56e99d5ed --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_3 @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull new file mode 100644 index 000000000..2f795b083 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/gRandoCuttableGrassTokenDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey new file mode 100644 index 000000000..ee25715ae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_flower_bosskey @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassBossKeyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy new file mode 100644 index 000000000..d3c0c44ec --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_flower_fairy @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassFairyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart new file mode 100644 index 000000000..2864988e3 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_flower_heart @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassHeartDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassJunkDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold new file mode 100644 index 000000000..6f451d12a --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_flower_gold @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMajorDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask new file mode 100644 index 000000000..a5bb3b8a4 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_flower_mask @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMaskDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze new file mode 100644 index 000000000..0102b9a5e --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_flower_bronze @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassMinorDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random new file mode 100644 index 000000000..f23e81a03 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_flower_random @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassRandomDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver new file mode 100644 index 000000000..98dcfacb1 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_flower_silver @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassSmallKeyDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass new file mode 100644 index 000000000..34034f059 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_Grass @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token new file mode 100644 index 000000000..63a739c30 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_flower_token @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf new file mode 100644 index 000000000..574f63139 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_leaf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material new file mode 100644 index 000000000..04270bbae --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/mat_gRandoCuttableGrassTokenDL_f3dlite_material @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/gameplay_keep/model.xml b/soh/assets/custom/objects/gameplay_keep/model.xml new file mode 100644 index 000000000..6444457b7 --- /dev/null +++ b/soh/assets/custom/objects/gameplay_keep/model.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index ace158854..9e56e51bd 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -77,6 +77,66 @@ static const ALIGN_ASSET(2) char gBossSoulSkullDL[] = dgBossSoulSkullDL; #define dgRandoPotDL "__OTR__objects/gameplay_dangeon_keep/gRandoPotDL" static const ALIGN_ASSET(2) char gRandoPotDL[] = dgRandoPotDL; +#define dgRandoBushDL "__OTR__objects/gameplay_field_keep/gFieldBushRandomDL" +static const ALIGN_ASSET(2) char gRandoBushDL[] = dgRandoBushDL; + +#define dgRandoBushMinorDL "__OTR__objects/gameplay_field_keep/gFieldBushMinorDL" +static const ALIGN_ASSET(2) char gRandoBushMinorDL[] = dgRandoBushMinorDL; + +#define dgRandoBushMajorDL "__OTR__objects/gameplay_field_keep/gFieldBushMajorDL" +static const ALIGN_ASSET(2) char gRandoBushMajorDL[] = dgRandoBushMajorDL; + +#define dgRandoBushSmallKeyDL "__OTR__objects/gameplay_field_keep/gFieldBushSmallKeyDL" +static const ALIGN_ASSET(2) char gRandoBushSmallKeyDL[] = dgRandoBushSmallKeyDL; + +#define dgRandoBushBossKeyDL "__OTR__objects/gameplay_field_keep/gFieldBushBossKeyDL" +static const ALIGN_ASSET(2) char gRandoBushBossKeyDL[] = dgRandoBushBossKeyDL; + +#define dgRandoBushTokenDL "__OTR__objects/gameplay_field_keep/gFieldBushTokenDL" +static const ALIGN_ASSET(2) char gRandoBushTokenDL[] = dgRandoBushTokenDL; + +#define dgRandoBushMaskDL "__OTR__objects/gameplay_field_keep/gFieldBushMaskDL" +static const ALIGN_ASSET(2) char gRandoBushMaskDL[] = dgRandoBushMaskDL; + +#define dgRandoBushFairyDL "__OTR__objects/gameplay_field_keep/gFieldBushFairyDL" +static const ALIGN_ASSET(2) char gRandoBushFairyDL[] = dgRandoBushFairyDL; + +#define dgRandoBushHeartDL "__OTR__objects/gameplay_field_keep/gFieldBushHeartDL" +static const ALIGN_ASSET(2) char gRandoBushHeartDL[] = dgRandoBushHeartDL; + +#define dgRandoBushJunkDL "__OTR__objects/gameplay_field_keep/gFieldBushJunkDL" +static const ALIGN_ASSET(2) char gRandoBushJunkDL[] = dgRandoBushJunkDL; + +#define dgRandoCuttableGrassRandomDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassRandomDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassDL[] = dgRandoCuttableGrassRandomDL; + +#define dgRandoCuttableGrassMinorDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMinorDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMinorDL[] = dgRandoCuttableGrassMinorDL; + +#define dgRandoCuttableGrassMajorDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMajorDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMajorDL[] = dgRandoCuttableGrassMajorDL; + +#define dgRandoCuttableGrassSmallKeyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassSmallKeyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassSmallKeyDL[] = dgRandoCuttableGrassSmallKeyDL; + +#define dgRandoCuttableGrassBossKeyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassBossKeyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassBossKeyDL[] = dgRandoCuttableGrassBossKeyDL; + +#define dgRandoCuttableGrassTokenDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassTokenDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassTokenDL[] = dgRandoCuttableGrassTokenDL; + +#define dgRandoCuttableGrassMaskDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassMaskDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassMaskDL[] = dgRandoCuttableGrassMaskDL; + +#define dgRandoCuttableGrassFairyDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassFairyDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassFairyDL[] = dgRandoCuttableGrassFairyDL; + +#define dgRandoCuttableGrassHeartDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassHeartDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassHeartDL[] = dgRandoCuttableGrassHeartDL; + +#define dgRandoCuttableGrassJunkDL "__OTR__objects/gameplay_keep/gRandoCuttableGrassJunkDL" +static const ALIGN_ASSET(2) char gRandoCuttableGrassJunkDL[] = dgRandoCuttableGrassJunkDL; + #define dgFishingPoleGiDL "__OTR__objects/object_gi_fishing_pole/gFishingPoleGiDL" static const ALIGN_ASSET(2) char gFishingPoleGiDL[] = dgFishingPoleGiDL; diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 8aace9a90..b4990803f 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -974,6 +974,22 @@ typedef enum { // - `*EnDs` VB_GRANNY_TAKE_MONEY, + // ### `result` + // ```c + // false + // ``` + // ### `args` + // - `*EnKusa` + VB_GRASS_DROP_ITEM, + + // ### `result` + // ```c + // true + // ``` + // ### `args` + // - `*EnKusa` + VB_GRASS_SETUP_DRAW, + // #### `result` // ```c // Flags_GetSwitch(play, this->dyna.actor.params & 0x3F) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index 81612ddb2..6e6ec17d6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -123,6 +123,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "Man erzählt sich, daß ein #Herz im Deku-Baum# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DEKU_TREE_GRASS] = HintText(CustomMessage("They say that some #grass in the Deku Tree# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | DODONGOS CAVERN | ---------------------------*/ @@ -297,6 +301,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "Man erzählt sich, daß das #Spielen einer stürmischen Melodie für einen seltsamen Stein in Dodongos Höhle# #[[1]]# enthülle.", /*french*/ "Selon moi, #jouer un air orageux pour une pierre étrange dans la Caverne Dodongo# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DODONGOS_CAVERN_GRASS] = HintText(CustomMessage("They say that some #grass in Dodongo's Cavern# hides #[[1]]#.", + /*german*/ "!!!", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | JABU JABUS BELLY | @@ -457,6 +465,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "Man erzählt sich, daß sich #nahe des zentralen Lifts in Jabu-Jabus Bauch# #[[1]]# befände.", /*french*/ "Selon moi, près d'un #ascenceur central dans le Ventre de Jabu-Jabu# se trouve #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_JABU_JABUS_BELLY_GRASS] = HintText(CustomMessage("They say that some #grass in Jabu Jabu's Belly# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | FOREST TEMPLE | ---------------------------*/ @@ -1688,6 +1700,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "Man erzählt sich, daß das #Anrufen der Sonne in einer Sackgasse# innerhalb des Brunnens #[[1]]# enthülle.", /*french*/ "Selon moi, #appeler le soleil dans une impasse# à l’intérieur du puits révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTTOM_OF_THE_WELL_GRASS] = HintText(CustomMessage("They say that some #grass in the Bottom of the Well# hides #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | ICE CAVERN | diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index 9bbb1e4af..2c28b154e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -1955,6 +1955,26 @@ void StaticData::HintTable_Init_Exclude_Overworld() { hintTextTable[RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a royal tomb# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_KF_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a forest# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_LW_GRASS] = HintText(CustomMessage("They say that #cutting some grass in the woods# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_MARKET_GRASS] = HintText(CustomMessage("They say that #cutting some grass in the market# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_HC_GRASS] = HintText(CustomMessage("They say that #cutting some grass near the castle# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_KAK_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a village# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_GY_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a graveyard# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_LH_GRASS] = HintText(CustomMessage("They say that #cutting some grass near a lake# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_HF_GRASS] = HintText(CustomMessage("They say that #cutting some grass on a field# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_ZR_GRASS] = HintText(CustomMessage("They say that #cutting some grass near a river# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_GROTTO_GRASS] = HintText(CustomMessage("They say that #cutting some grass in a grotto# reveals #[[1]]#.", { QM_RED, QM_GREEN })); + // clang-format on } } diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp new file mode 100644 index 000000000..b14c816d7 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.cpp @@ -0,0 +1,514 @@ +#include "ShuffleGrass.h" +#include "soh_assets.h" +#include "static_data.h" +#include "soh/Enhancements/enhancementTypes.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_En_Kusa/z_en_kusa.h" +#include "objects/gameplay_field_keep/gameplay_field_keep.h" +#include "objects/object_kusa/object_kusa.h" +extern PlayState* gPlayState; +} + +#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get() + +extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); + +void DrawTypeOfGrass(EnKusa* grassActor, Gfx* bushDList, Gfx* grassDList, PlayState* play) { + // Actor params is -255 for regrowable grass. + if (grassActor->actor.params == -255) { + Gfx_DrawDListOpa(play, grassDList); + } else { + Gfx_DrawDListOpa(play, bushDList); + } +} + +extern "C" void EnKusa_RandomizerDraw(Actor* thisx, PlayState* play) { + //static Gfx* dLists[] = { (Gfx*)gRandoBushDL, (Gfx*)object_kusa_DL_000140, (Gfx*)object_kusa_DL_000140 }; + static Gfx* dLists[] = { (Gfx*)gRandoBushJunkDL, (Gfx*)gRandoCuttableGrassJunkDL, (Gfx*)gRandoCuttableGrassJunkDL }; + auto grassActor = ((EnKusa*)thisx); + + OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + + if (grassActor->grassIdentity.randomizerCheck != RC_MAX && Flags_GetRandomizerInf(grassActor->grassIdentity.randomizerInf) == 0) { + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + + if (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE) { + auto itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(grassActor->grassIdentity.randomizerCheck, true, GI_NONE); + GetItemCategory getItemCategory = itemEntry.getItemCategory; + + switch (getItemCategory) { + case ITEM_CATEGORY_JUNK: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushJunkDL, (Gfx*)gRandoCuttableGrassJunkDL, play); + break; + case ITEM_CATEGORY_LESSER: + switch (itemEntry.itemId) { + case ITEM_HEART_PIECE: + case ITEM_HEART_PIECE_2: + case ITEM_HEART_CONTAINER: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushHeartDL, (Gfx*)gRandoCuttableGrassHeartDL, play); + break; + default: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMinorDL, (Gfx*)gRandoCuttableGrassMinorDL, play); + break; + } + break; + case ITEM_CATEGORY_BOSS_KEY: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushBossKeyDL, (Gfx*)gRandoCuttableGrassBossKeyDL, play); + break; + case ITEM_CATEGORY_SMALL_KEY: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushSmallKeyDL, (Gfx*)gRandoCuttableGrassSmallKeyDL, play); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushTokenDL, (Gfx*)gRandoCuttableGrassTokenDL, play); + break; + case ITEM_CATEGORY_MAJOR: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushMajorDL, (Gfx*)gRandoCuttableGrassMajorDL, play); + break; + default: + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushDL, (Gfx*)gRandoCuttableGrassDL, play); + break; + } + } else { + DrawTypeOfGrass(grassActor, (Gfx*)gRandoBushDL, (Gfx*)gRandoCuttableGrassDL, play); + } + } else if (grassActor->actor.flags & ACTOR_FLAG_GRASS_DESTROYED) { + Gfx_DrawDListOpa(play, (Gfx*)object_kusa_DL_0002E0); + } else { + Gfx_DrawDListOpa(play, dLists[thisx->params & 3]); + } + + CLOSE_DISPS(play->state.gfxCtx); +} + +uint8_t EnKusa_RandomizerHoldsItem(EnKusa* grassActor, PlayState* play) { + if (grassActor->grassIdentity.randomizerCheck == RC_MAX) + return false; + + RandomizerCheck rc = grassActor->grassIdentity.randomizerCheck; + + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t grassSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_GRASS).Get(); + + // Don't pull randomized item if grass isn't randomized or is already checked + if (!IS_RANDO || (grassSetting == RO_SHUFFLE_GRASS_OVERWORLD && isDungeon) || + (grassSetting == RO_SHUFFLE_GRASS_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(grassActor->grassIdentity.randomizerInf) || + grassActor->grassIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + +void EnKusa_RandomizerSpawnCollectible(EnKusa* grassActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &grassActor->actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = grassActor->grassIdentity.randomizerInf; + item00->itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(grassActor->grassIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + +void EnKusa_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + + if (actor->id != ACTOR_EN_KUSA) + return; + + EnKusa* grassActor = static_cast(actorRef); + s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); + + grassActor->grassIdentity = OTRGlobals::Instance->gRandomizer->IdentifyGrass( + gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z, respawnData, gPlayState->linkAgeOnLoad); +} + +void RegisterShuffleGrass() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_GRASS); + + COND_ID_HOOK(OnActorInit, ACTOR_EN_KUSA, shouldRegister, EnKusa_RandomizerInit); + + COND_VB_SHOULD(VB_GRASS_SETUP_DRAW, shouldRegister, { + EnKusa* grassActor = va_arg(args, EnKusa*); + if (EnKusa_RandomizerHoldsItem(grassActor, gPlayState)) { + grassActor->actor.draw = (ActorFunc)EnKusa_RandomizerDraw; + *should = false; + } else { + *should = true; + } + }); + + COND_VB_SHOULD(VB_GRASS_DROP_ITEM, shouldRegister, { + EnKusa* grassActor = va_arg(args, EnKusa*); + if (EnKusa_RandomizerHoldsItem(grassActor, gPlayState)) { + EnKusa_RandomizerSpawnCollectible(grassActor, gPlayState); + grassActor->grassIdentity.randomizerCheck = RC_MAX; + grassActor->grassIdentity.randomizerInf = RAND_INF_MAX; + *should = false; + } else { + *should = true; + } + }); +} + + +void Rando::StaticData::RegisterGrassLocations() { + // Overworld Grass + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_KF_CHILD_GRASS_1] = Location::Grass(RC_KF_CHILD_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(678, 596), "Child Grass 1", "Child Grass 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_1)); + locationTable[RC_KF_CHILD_GRASS_2] = Location::Grass(RC_KF_CHILD_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(594, 542), "Child Grass 2", "Child Grass 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_2)); + locationTable[RC_KF_CHILD_GRASS_3] = Location::Grass(RC_KF_CHILD_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(572, 603), "Child Grass 3", "Child Grass 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_3)); + locationTable[RC_KF_CHILD_GRASS_4] = Location::Grass(RC_KF_CHILD_GRASS_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(385, 643), "Child Grass 4", "Child Grass 4", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_4)); + locationTable[RC_KF_CHILD_GRASS_5] = Location::Grass(RC_KF_CHILD_GRASS_5, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-498, 696), "Child Grass 5", "Child Grass 5", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_5)); + locationTable[RC_KF_CHILD_GRASS_6] = Location::Grass(RC_KF_CHILD_GRASS_6, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-523, 771), "Child Grass 6", "Child Grass 6", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_6)); + locationTable[RC_KF_CHILD_GRASS_7] = Location::Grass(RC_KF_CHILD_GRASS_7, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-612, 737), "Child Grass 7", "Child Grass 7", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_7)); + locationTable[RC_KF_CHILD_GRASS_8] = Location::Grass(RC_KF_CHILD_GRASS_8, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-671, 671), "Child Grass 8", "Child Grass 8", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_8)); + locationTable[RC_KF_CHILD_GRASS_9] = Location::Grass(RC_KF_CHILD_GRASS_9, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-748, 632), "Child Grass 9", "Child Grass 9", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_9)); + locationTable[RC_KF_CHILD_GRASS_10] = Location::Grass(RC_KF_CHILD_GRASS_10, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-757, 708), "Child Grass 10", "Child Grass 10", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_10)); + locationTable[RC_KF_CHILD_GRASS_11] = Location::Grass(RC_KF_CHILD_GRASS_11, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-823, 666), "Child Grass 11", "Child Grass 11", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_11)); + locationTable[RC_KF_CHILD_GRASS_12] = Location::Grass(RC_KF_CHILD_GRASS_12, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-835, 605), "Child Grass 12", "Child Grass 12", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_12)); + locationTable[RC_KF_CHILD_GRASS_MAZE_1] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-995, 1531), "Child Grass Maze 1", "Child Grass Maze 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_1)); + locationTable[RC_KF_CHILD_GRASS_MAZE_2] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-701, 1882), "Child Grass Maze 2", "Child Grass Maze 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_2)); + locationTable[RC_KF_CHILD_GRASS_MAZE_3] = Location::Grass(RC_KF_CHILD_GRASS_MAZE_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-295, 2297), "Child Grass Maze 3", "Child Grass Maze 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_CHILD_GRASS_MAZE_3)); + locationTable[RC_KF_ADULT_GRASS_1] = Location::Grass(RC_KF_ADULT_GRASS_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(839, 685), "Adult Grass 1", "Adult Grass 1", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_1)); + locationTable[RC_KF_ADULT_GRASS_2] = Location::Grass(RC_KF_ADULT_GRASS_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(809, 722), "Adult Grass 2", "Adult Grass 2", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_2)); + locationTable[RC_KF_ADULT_GRASS_3] = Location::Grass(RC_KF_ADULT_GRASS_3, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(760, 714), "Adult Grass 3", "Adult Grass 3", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_3)); + locationTable[RC_KF_ADULT_GRASS_4] = Location::Grass(RC_KF_ADULT_GRASS_4, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(725, 679), "Adult Grass 4", "Adult Grass 4", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_4)); + locationTable[RC_KF_ADULT_GRASS_5] = Location::Grass(RC_KF_ADULT_GRASS_5, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(725, 606), "Adult Grass 5", "Adult Grass 5", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_5)); + locationTable[RC_KF_ADULT_GRASS_6] = Location::Grass(RC_KF_ADULT_GRASS_6, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(797, 563), "Adult Grass 6", "Adult Grass 6", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_6)); + locationTable[RC_KF_ADULT_GRASS_7] = Location::Grass(RC_KF_ADULT_GRASS_7, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(868, 606), "Adult Grass 7", "Adult Grass 7", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_7)); + locationTable[RC_KF_ADULT_GRASS_8] = Location::Grass(RC_KF_ADULT_GRASS_8, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(797, 663), "Adult Grass 8", "Adult Grass 8", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_8)); + locationTable[RC_KF_ADULT_GRASS_9] = Location::Grass(RC_KF_ADULT_GRASS_9, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(757, 649), "Adult Grass 9", "Adult Grass 9", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_9)); + locationTable[RC_KF_ADULT_GRASS_10] = Location::Grass(RC_KF_ADULT_GRASS_10, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(773, 610), "Adult Grass 10", "Adult Grass 10", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_10)); + locationTable[RC_KF_ADULT_GRASS_11] = Location::Grass(RC_KF_ADULT_GRASS_11, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(815, 607), "Adult Grass 11", "Adult Grass 11", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_11)); + locationTable[RC_KF_ADULT_GRASS_12] = Location::Grass(RC_KF_ADULT_GRASS_12, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(836, 636), "Adult Grass 12", "Adult Grass 12", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_12)); + locationTable[RC_KF_ADULT_GRASS_13] = Location::Grass(RC_KF_ADULT_GRASS_13, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-772, 654), "Adult Grass 13", "Adult Grass 13", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_13)); + locationTable[RC_KF_ADULT_GRASS_14] = Location::Grass(RC_KF_ADULT_GRASS_14, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-785, 611), "Adult Grass 14", "Adult Grass 14", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_14)); + locationTable[RC_KF_ADULT_GRASS_15] = Location::Grass(RC_KF_ADULT_GRASS_15, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-805, 691), "Adult Grass 15", "Adult Grass 15", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_15)); + locationTable[RC_KF_ADULT_GRASS_16] = Location::Grass(RC_KF_ADULT_GRASS_16, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-822, 644), "Adult Grass 16", "Adult Grass 16", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_16)); + locationTable[RC_KF_ADULT_GRASS_17] = Location::Grass(RC_KF_ADULT_GRASS_17, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-842, 601), "Adult Grass 17", "Adult Grass 17", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_17)); + locationTable[RC_KF_ADULT_GRASS_18] = Location::Grass(RC_KF_ADULT_GRASS_18, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-867, 674), "Adult Grass 18", "Adult Grass 18", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_18)); + locationTable[RC_KF_ADULT_GRASS_19] = Location::Grass(RC_KF_ADULT_GRASS_19, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-498, 0xFF), "Adult Grass 19", "Adult Grass 19", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_19)); + locationTable[RC_KF_ADULT_GRASS_20] = Location::Grass(RC_KF_ADULT_GRASS_20, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KOKIRI_FOREST, TWO_ACTOR_PARAMS(-523, 0xFF), "Adult Grass 20", "Adult Grass 20", RHT_KF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_ADULT_GRASS_20)); + locationTable[RC_LW_GRASS_1] = Location::Grass(RC_LW_GRASS_1, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(676, -651), "Near Shortcuts Grass 1", "Near Shortcuts Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_1)); + locationTable[RC_LW_GRASS_2] = Location::Grass(RC_LW_GRASS_2, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(633, -676), "Near Shortcuts Grass 2", "Near Shortcuts Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_2)); + locationTable[RC_LW_GRASS_3] = Location::Grass(RC_LW_GRASS_3, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(645, -638), "Near Shortcuts Grass 3", "Near Shortcuts Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_3)); + locationTable[RC_LW_GRASS_4] = Location::Grass(RC_LW_GRASS_4, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1476, -2251), "After Mido Grass 1", "After Mido Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_4)); + locationTable[RC_LW_GRASS_5] = Location::Grass(RC_LW_GRASS_5, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1433, -2276), "After Mido Grass 2", "After Mido Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_5)); + locationTable[RC_LW_GRASS_6] = Location::Grass(RC_LW_GRASS_6, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(1445, -2238), "After Mido Grass 3", "After Mido Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_6)); + locationTable[RC_LW_GRASS_7] = Location::Grass(RC_LW_GRASS_7, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(926, -2232), "Near SFM Grass 1", "Near SFM Grass 1", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_7)); + locationTable[RC_LW_GRASS_8] = Location::Grass(RC_LW_GRASS_8, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(965, -2241), "Near SFM Grass 2", "Near SFM Grass 2", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_8)); + locationTable[RC_LW_GRASS_9] = Location::Grass(RC_LW_GRASS_9, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(952, -2275), "Near SFM Grass 3", "Near SFM Grass 3", RHT_LW_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_GRASS_9)); + locationTable[RC_MARKET_GRASS_1] = Location::Grass(RC_MARKET_GRASS_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-106, 277), "Market Grass 1", "Market Grass 1", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_1)); + locationTable[RC_MARKET_GRASS_2] = Location::Grass(RC_MARKET_GRASS_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-131, 225), "Market Grass 2", "Market Grass 2", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_2)); + locationTable[RC_MARKET_GRASS_3] = Location::Grass(RC_MARKET_GRASS_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(504, -546), "Market Grass 3", "Market Grass 3", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_3)); + locationTable[RC_MARKET_GRASS_4] = Location::Grass(RC_MARKET_GRASS_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(465, -548), "Market Grass 4", "Market Grass 4", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_4)); + locationTable[RC_MARKET_GRASS_5] = Location::Grass(RC_MARKET_GRASS_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(432, -548), "Market Grass 5", "Market Grass 5", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_5)); + locationTable[RC_MARKET_GRASS_6] = Location::Grass(RC_MARKET_GRASS_6, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(73, -428), "Market Grass 6", "Market Grass 6", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_6)); + locationTable[RC_MARKET_GRASS_7] = Location::Grass(RC_MARKET_GRASS_7, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(75, -310), "Market Grass 7", "Market Grass 7", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_7)); + locationTable[RC_MARKET_GRASS_8] = Location::Grass(RC_MARKET_GRASS_8, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(76, -190), "Market Grass 8", "Market Grass 8", RHT_MARKET_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MARKET_GRASS_8)); + locationTable[RC_HC_GRASS_1] = Location::Grass(RC_HC_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(1035, 882), "Near Storms Grotto Grass 1", "Near Storms Grotto Grass 1", RHT_HC_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GRASS_1)); + locationTable[RC_HC_GRASS_2] = Location::Grass(RC_HC_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_CASTLE, SCENE_HYRULE_CASTLE, TWO_ACTOR_PARAMS(975, 919), "Near Storms Grotto Grass 2", "Near Storms Grotto Grass 2", RHT_HC_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HC_GRASS_2)); + locationTable[RC_KAK_GRASS_1] = Location::Grass(RC_KAK_GRASS_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1116, 1581), "Near Graveyard Grass 1", "Near Graveyard Grass 1", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_1)); + locationTable[RC_KAK_GRASS_2] = Location::Grass(RC_KAK_GRASS_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1103, 1532), "Near Graveyard Grass 2", "Near Graveyard Grass 2", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_2)); + locationTable[RC_KAK_GRASS_3] = Location::Grass(RC_KAK_GRASS_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1072, 1592), "Near Graveyard Grass 3", "Near Graveyard Grass 3", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_3)); + locationTable[RC_KAK_GRASS_4] = Location::Grass(RC_KAK_GRASS_4, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-800, 521), "Tree Grass 1", "Tree Grass 1", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_4)); + locationTable[RC_KAK_GRASS_5] = Location::Grass(RC_KAK_GRASS_5, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-826, 585), "Tree Grass 2", "Tree Grass 2", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_5)); + locationTable[RC_KAK_GRASS_6] = Location::Grass(RC_KAK_GRASS_6, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-827, 465), "Tree Grass 3", "Tree Grass 3", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_6)); + locationTable[RC_KAK_GRASS_7] = Location::Grass(RC_KAK_GRASS_7, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-883, 582), "Tree Grass 4", "Tree Grass 4", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_7)); + locationTable[RC_KAK_GRASS_8] = Location::Grass(RC_KAK_GRASS_8, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-887, 467), "Tree Grass 5", "Tree Grass 5", RHT_KAK_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_GRASS_8)); + locationTable[RC_GY_GRASS_1] = Location::Grass(RC_GY_GRASS_1, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1059, 732), "Graveyard Grass 1", "Graveyard Grass 1", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_1)); + locationTable[RC_GY_GRASS_2] = Location::Grass(RC_GY_GRASS_2, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1089, 769), "Graveyard Grass 2", "Graveyard Grass 2", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_2)); + locationTable[RC_GY_GRASS_3] = Location::Grass(RC_GY_GRASS_3, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1138, 761), "Graveyard Grass 3", "Graveyard Grass 3", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_3)); + locationTable[RC_GY_GRASS_4] = Location::Grass(RC_GY_GRASS_4, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1173, 726), "Graveyard Grass 4", "Graveyard Grass 4", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_4)); + locationTable[RC_GY_GRASS_5] = Location::Grass(RC_GY_GRASS_5, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1173, 653), "Graveyard Grass 5", "Graveyard Grass 5", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_5)); + locationTable[RC_GY_GRASS_6] = Location::Grass(RC_GY_GRASS_6, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1102, 610), "Graveyard Grass 6", "Graveyard Grass 6", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_6)); + locationTable[RC_GY_GRASS_7] = Location::Grass(RC_GY_GRASS_7, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1030, 653), "Graveyard Grass 7", "Graveyard Grass 7", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_7)); + locationTable[RC_GY_GRASS_8] = Location::Grass(RC_GY_GRASS_8, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1102, 710), "Graveyard Grass 8", "Graveyard Grass 8", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_8)); + locationTable[RC_GY_GRASS_9] = Location::Grass(RC_GY_GRASS_9, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1141, 696), "Graveyard Grass 9", "Graveyard Grass 9", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_9)); + locationTable[RC_GY_GRASS_10] = Location::Grass(RC_GY_GRASS_10, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1125, 657), "Graveyard Grass 10", "Graveyard Grass 10", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_10)); + locationTable[RC_GY_GRASS_11] = Location::Grass(RC_GY_GRASS_11, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1083, 654), "Graveyard Grass 11", "Graveyard Grass 11", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_11)); + locationTable[RC_GY_GRASS_12] = Location::Grass(RC_GY_GRASS_12, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1062, 683), "Graveyard Grass 12", "Graveyard Grass 12", RHT_GY_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GY_GRASS_12)); + locationTable[RC_LH_GRASS_1] = Location::Grass(RC_LH_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1637, 2796), "LH Grass 1", "LH Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_1)); + locationTable[RC_LH_GRASS_2] = Location::Grass(RC_LH_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1667, 2833), "LH Grass 2", "LH Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_2)); + locationTable[RC_LH_GRASS_3] = Location::Grass(RC_LH_GRASS_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1716, 2825), "LH Grass 3", "LH Grass 3", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_3)); + locationTable[RC_LH_GRASS_4] = Location::Grass(RC_LH_GRASS_4, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1751, 2790), "LH Grass 4", "LH Grass 4", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_4)); + locationTable[RC_LH_GRASS_5] = Location::Grass(RC_LH_GRASS_5, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1751, 2717), "LH Grass 5", "LH Grass 5", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_5)); + locationTable[RC_LH_GRASS_6] = Location::Grass(RC_LH_GRASS_6, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1680, 2674), "LH Grass 6", "LH Grass 6", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_6)); + locationTable[RC_LH_GRASS_7] = Location::Grass(RC_LH_GRASS_7, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1608, 2717), "LH Grass 7", "LH Grass 7", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_7)); + locationTable[RC_LH_GRASS_8] = Location::Grass(RC_LH_GRASS_8, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1680, 2774), "LH Grass 8", "LH Grass 8", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_8)); + locationTable[RC_LH_GRASS_9] = Location::Grass(RC_LH_GRASS_9, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1719, 2760), "LH Grass 9", "LH Grass 9", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_9)); + locationTable[RC_LH_GRASS_10] = Location::Grass(RC_LH_GRASS_10, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1703, 2721), "LH Grass 10", "LH Grass 10", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_10)); + locationTable[RC_LH_GRASS_11] = Location::Grass(RC_LH_GRASS_11, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1661, 2718), "LH Grass 11", "LH Grass 11", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_11)); + locationTable[RC_LH_GRASS_12] = Location::Grass(RC_LH_GRASS_12, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1640, 2747), "LH Grass 12", "LH Grass 12", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_12)); + locationTable[RC_LH_GRASS_13] = Location::Grass(RC_LH_GRASS_13, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2028, 2542), "LH Grass 13", "LH Grass 13", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_13)); + locationTable[RC_LH_GRASS_14] = Location::Grass(RC_LH_GRASS_14, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2058, 2579), "LH Grass 14", "LH Grass 14", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_14)); + locationTable[RC_LH_GRASS_15] = Location::Grass(RC_LH_GRASS_15, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2107, 2571), "LH Grass 15", "LH Grass 15", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_15)); + locationTable[RC_LH_GRASS_16] = Location::Grass(RC_LH_GRASS_16, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2142, 2536), "LH Grass 16", "LH Grass 16", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_16)); + locationTable[RC_LH_GRASS_17] = Location::Grass(RC_LH_GRASS_17, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2142, 2463), "LH Grass 17", "LH Grass 17", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_17)); + locationTable[RC_LH_GRASS_18] = Location::Grass(RC_LH_GRASS_18, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2071, 2420), "LH Grass 18", "LH Grass 18", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_18)); + locationTable[RC_LH_GRASS_19] = Location::Grass(RC_LH_GRASS_19, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-1999, 2463), "LH Grass 19", "LH Grass 19", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_19)); + locationTable[RC_LH_GRASS_20] = Location::Grass(RC_LH_GRASS_20, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2071, 2520), "LH Grass 20", "LH Grass 20", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_20)); + locationTable[RC_LH_GRASS_21] = Location::Grass(RC_LH_GRASS_21, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2110, 2506), "LH Grass 21", "LH Grass 21", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_21)); + locationTable[RC_LH_GRASS_22] = Location::Grass(RC_LH_GRASS_22, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2094, 2467), "LH Grass 22", "LH Grass 22", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_22)); + locationTable[RC_LH_GRASS_23] = Location::Grass(RC_LH_GRASS_23, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2052, 2464), "LH Grass 23", "LH Grass 23", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_23)); + locationTable[RC_LH_GRASS_24] = Location::Grass(RC_LH_GRASS_24, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2031, 2493), "LH Grass 24", "LH Grass 24", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_24)); + locationTable[RC_LH_GRASS_25] = Location::Grass(RC_LH_GRASS_25, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2204, 3050), "LH Grass 25", "LH Grass 25", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_25)); + locationTable[RC_LH_GRASS_26] = Location::Grass(RC_LH_GRASS_26, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2234, 3087), "LH Grass 26", "LH Grass 26", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_26)); + locationTable[RC_LH_GRASS_27] = Location::Grass(RC_LH_GRASS_27, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2283, 3079), "LH Grass 27", "LH Grass 27", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_27)); + locationTable[RC_LH_GRASS_28] = Location::Grass(RC_LH_GRASS_28, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2318, 3044), "LH Grass 28", "LH Grass 28", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_28)); + locationTable[RC_LH_GRASS_29] = Location::Grass(RC_LH_GRASS_29, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2318, 2971), "LH Grass 29", "LH Grass 29", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_29)); + locationTable[RC_LH_GRASS_30] = Location::Grass(RC_LH_GRASS_30, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2247, 2928), "LH Grass 30", "LH Grass 30", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_30)); + locationTable[RC_LH_GRASS_31] = Location::Grass(RC_LH_GRASS_31, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2175, 2971), "LH Grass 31", "LH Grass 31", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_31)); + locationTable[RC_LH_GRASS_32] = Location::Grass(RC_LH_GRASS_32, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2247, 3028), "LH Grass 32", "LH Grass 32", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_32)); + locationTable[RC_LH_GRASS_33] = Location::Grass(RC_LH_GRASS_33, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2286, 3014), "LH Grass 33", "LH Grass 33", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_33)); + locationTable[RC_LH_GRASS_34] = Location::Grass(RC_LH_GRASS_34, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2270, 2975), "LH Grass 34", "LH Grass 34", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_34)); + locationTable[RC_LH_GRASS_35] = Location::Grass(RC_LH_GRASS_35, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2228, 2972), "LH Grass 35", "LH Grass 35", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_35)); + locationTable[RC_LH_GRASS_36] = Location::Grass(RC_LH_GRASS_36, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-2207, 3001), "LH Grass 36", "LH Grass 36", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_GRASS_36)); + locationTable[RC_LH_CHILD_GRASS_1] = Location::Grass(RC_LH_CHILD_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(13, 2735), "LH Child Grass 1", "LH Child Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_1)); + locationTable[RC_LH_CHILD_GRASS_2] = Location::Grass(RC_LH_CHILD_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-77, 2891), "LH Child Grass 2", "LH Child Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_2)); + locationTable[RC_LH_CHILD_GRASS_3] = Location::Grass(RC_LH_CHILD_GRASS_3, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-222, 2888), "LH Child Grass 3", "LH Child Grass 3", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_3)); + locationTable[RC_LH_CHILD_GRASS_4] = Location::Grass(RC_LH_CHILD_GRASS_4, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-295, 2973), "LH Child Grass 4", "LH Child Grass 4", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_CHILD_GRASS_4)); + locationTable[RC_LH_WARP_PAD_GRASS_1] = Location::Grass(RC_LH_WARP_PAD_GRASS_1, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-613, 7369), "LH Warp Pad Grass 1", "LH Warp Pad Grass 1", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_WARP_PAD_GRASS_1)); + locationTable[RC_LH_WARP_PAD_GRASS_2] = Location::Grass(RC_LH_WARP_PAD_GRASS_2, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKE_HYLIA, TWO_ACTOR_PARAMS(-662, 7352), "LH Warp Pad Grass 2", "LH Warp Pad Grass 2", RHT_LH_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_WARP_PAD_GRASS_2)); + locationTable[RC_HF_NEAR_KF_GRASS_1] = Location::Grass(RC_HF_NEAR_KF_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3186, 7571), "Near KF Grass 1", "Near KF Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_1)); + locationTable[RC_HF_NEAR_KF_GRASS_2] = Location::Grass(RC_HF_NEAR_KF_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3156, 7608), "Near KF Grass 2", "Near KF Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_2)); + locationTable[RC_HF_NEAR_KF_GRASS_3] = Location::Grass(RC_HF_NEAR_KF_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3107, 7600), "Near KF Grass 3", "Near KF Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_3)); + locationTable[RC_HF_NEAR_KF_GRASS_4] = Location::Grass(RC_HF_NEAR_KF_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3072, 7565), "Near KF Grass 4", "Near KF Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_4)); + locationTable[RC_HF_NEAR_KF_GRASS_5] = Location::Grass(RC_HF_NEAR_KF_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3072, 7492), "Near KF Grass 5", "Near KF Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_5)); + locationTable[RC_HF_NEAR_KF_GRASS_6] = Location::Grass(RC_HF_NEAR_KF_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3144, 7449), "Near KF Grass 6", "Near KF Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_6)); + locationTable[RC_HF_NEAR_KF_GRASS_7] = Location::Grass(RC_HF_NEAR_KF_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3215, 7492), "Near KF Grass 7", "Near KF Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_7)); + locationTable[RC_HF_NEAR_KF_GRASS_8] = Location::Grass(RC_HF_NEAR_KF_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3144, 7549), "Near KF Grass 8", "Near KF Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_8)); + locationTable[RC_HF_NEAR_KF_GRASS_9] = Location::Grass(RC_HF_NEAR_KF_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3104, 7535), "Near KF Grass 9", "Near KF Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_9)); + locationTable[RC_HF_NEAR_KF_GRASS_10] = Location::Grass(RC_HF_NEAR_KF_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3120, 7496), "Near KF Grass 10", "Near KF Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_10)); + locationTable[RC_HF_NEAR_KF_GRASS_11] = Location::Grass(RC_HF_NEAR_KF_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3162, 7493), "Near KF Grass 11", "Near KF Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_11)); + locationTable[RC_HF_NEAR_KF_GRASS_12] = Location::Grass(RC_HF_NEAR_KF_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(3183, 7522), "Near KF Grass 12", "Near KF Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_KF_GRASS_12)); + locationTable[RC_HF_NEAR_MARKET_GRASS_1] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(950, 3613), "Near Market Grass 1", "Near Market Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_1)); + locationTable[RC_HF_NEAR_MARKET_GRASS_2] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(920, 3650), "Near Market Grass 2", "Near Market Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_2)); + locationTable[RC_HF_NEAR_MARKET_GRASS_3] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(871, 3642), "Near Market Grass 3", "Near Market Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_3)); + locationTable[RC_HF_NEAR_MARKET_GRASS_4] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(836, 3607), "Near Market Grass 4", "Near Market Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_4)); + locationTable[RC_HF_NEAR_MARKET_GRASS_5] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(836, 3534), "Near Market Grass 5", "Near Market Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_5)); + locationTable[RC_HF_NEAR_MARKET_GRASS_6] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(908, 3491), "Near Market Grass 6", "Near Market Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_6)); + locationTable[RC_HF_NEAR_MARKET_GRASS_7] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(979, 3534), "Near Market Grass 7", "Near Market Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_7)); + locationTable[RC_HF_NEAR_MARKET_GRASS_8] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(908, 3591), "Near Market Grass 8", "Near Market Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_8)); + locationTable[RC_HF_NEAR_MARKET_GRASS_9] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(868, 3577), "Near Market Grass 9", "Near Market Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_9)); + locationTable[RC_HF_NEAR_MARKET_GRASS_10] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(884, 3538), "Near Market Grass 10", "Near Market Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_10)); + locationTable[RC_HF_NEAR_MARKET_GRASS_11] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(926, 3535), "Near Market Grass 11", "Near Market Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_11)); + locationTable[RC_HF_NEAR_MARKET_GRASS_12] = Location::Grass(RC_HF_NEAR_MARKET_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(947, 3564), "Near Market Grass 12", "Near Market Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GRASS_12)); + locationTable[RC_HF_SOUTH_GRASS_1] = Location::Grass(RC_HF_SOUTH_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-483, 11329), "South Grass 1", "South Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_1)); + locationTable[RC_HF_SOUTH_GRASS_2] = Location::Grass(RC_HF_SOUTH_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-518, 11294), "South Grass 2", "South Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_2)); + locationTable[RC_HF_SOUTH_GRASS_3] = Location::Grass(RC_HF_SOUTH_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-518, 11221), "South Grass 3", "South Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_3)); + locationTable[RC_HF_SOUTH_GRASS_4] = Location::Grass(RC_HF_SOUTH_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-447, 11178), "South Grass 4", "South Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_4)); + locationTable[RC_HF_SOUTH_GRASS_5] = Location::Grass(RC_HF_SOUTH_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-375, 11221), "South Grass 5", "South Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_5)); + locationTable[RC_HF_SOUTH_GRASS_6] = Location::Grass(RC_HF_SOUTH_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-447, 11278), "South Grass 6", "South Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_6)); + locationTable[RC_HF_SOUTH_GRASS_7] = Location::Grass(RC_HF_SOUTH_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-486, 11264), "South Grass 7", "South Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_7)); + locationTable[RC_HF_SOUTH_GRASS_8] = Location::Grass(RC_HF_SOUTH_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-470, 11225), "South Grass 8", "South Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_8)); + locationTable[RC_HF_SOUTH_GRASS_9] = Location::Grass(RC_HF_SOUTH_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-428, 11222), "South Grass 9", "South Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_9)); + locationTable[RC_HF_SOUTH_GRASS_10] = Location::Grass(RC_HF_SOUTH_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-407, 11251), "South Grass 10", "South Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_10)); + locationTable[RC_HF_SOUTH_GRASS_11] = Location::Grass(RC_HF_SOUTH_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-404, 11300), "South Grass 11", "South Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_11)); + locationTable[RC_HF_SOUTH_GRASS_12] = Location::Grass(RC_HF_SOUTH_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-434, 11337), "South Grass 12", "South Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTH_GRASS_12)); + locationTable[RC_HF_CENTRAL_GRASS_1] = Location::Grass(RC_HF_CENTRAL_GRASS_1, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-948, 9981), "Central Grass 1", "Central Grass 1", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_1)); + locationTable[RC_HF_CENTRAL_GRASS_2] = Location::Grass(RC_HF_CENTRAL_GRASS_2, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-978, 10018), "Central Grass 2", "Central Grass 2", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_2)); + locationTable[RC_HF_CENTRAL_GRASS_3] = Location::Grass(RC_HF_CENTRAL_GRASS_3, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1027, 10010), "Central Grass 3", "Central Grass 3", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_3)); + locationTable[RC_HF_CENTRAL_GRASS_4] = Location::Grass(RC_HF_CENTRAL_GRASS_4, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1062, 9975), "Central Grass 4", "Central Grass 4", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_4)); + locationTable[RC_HF_CENTRAL_GRASS_5] = Location::Grass(RC_HF_CENTRAL_GRASS_5, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1062, 9902), "Central Grass 5", "Central Grass 5", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_5)); + locationTable[RC_HF_CENTRAL_GRASS_6] = Location::Grass(RC_HF_CENTRAL_GRASS_6, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-991, 9859), "Central Grass 6", "Central Grass 6", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_6)); + locationTable[RC_HF_CENTRAL_GRASS_7] = Location::Grass(RC_HF_CENTRAL_GRASS_7, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-919, 9902), "Central Grass 7", "Central Grass 7", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_7)); + locationTable[RC_HF_CENTRAL_GRASS_8] = Location::Grass(RC_HF_CENTRAL_GRASS_8, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-991, 9959), "Central Grass 8", "Central Grass 8", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_8)); + locationTable[RC_HF_CENTRAL_GRASS_9] = Location::Grass(RC_HF_CENTRAL_GRASS_9, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1030, 9945), "Central Grass 9", "Central Grass 9", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_9)); + locationTable[RC_HF_CENTRAL_GRASS_10] = Location::Grass(RC_HF_CENTRAL_GRASS_10, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-1014, 9906), "Central Grass 10", "Central Grass 10", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_10)); + locationTable[RC_HF_CENTRAL_GRASS_11] = Location::Grass(RC_HF_CENTRAL_GRASS_11, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-972, 9903), "Central Grass 11", "Central Grass 11", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_11)); + locationTable[RC_HF_CENTRAL_GRASS_12] = Location::Grass(RC_HF_CENTRAL_GRASS_12, RCQUEST_BOTH, RCAREA_HYRULE_FIELD, SCENE_HYRULE_FIELD, TWO_ACTOR_PARAMS(-951, 9932), "Central Grass 12", "Central Grass 12", RHT_HF_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_CENTRAL_GRASS_12)); + locationTable[RC_ZR_GRASS_1] = Location::Grass(RC_ZR_GRASS_1, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1495, 1022), "Near Tree Grass 1", "Near Tree Grass 1", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_1)); + locationTable[RC_ZR_GRASS_2] = Location::Grass(RC_ZR_GRASS_2, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1465, 985), "Near Tree Grass 2", "Near Tree Grass 2", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_2)); + locationTable[RC_ZR_GRASS_3] = Location::Grass(RC_ZR_GRASS_3, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1544, 1014), "Near Tree Grass 3", "Near Tree Grass 3", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_3)); + locationTable[RC_ZR_GRASS_4] = Location::Grass(RC_ZR_GRASS_4, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1579, 979), "Near Tree Grass 4", "Near Tree Grass 4", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_4)); + locationTable[RC_ZR_GRASS_5] = Location::Grass(RC_ZR_GRASS_5, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1579, 906), "Near Tree Grass 5", "Near Tree Grass 5", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_5)); + locationTable[RC_ZR_GRASS_6] = Location::Grass(RC_ZR_GRASS_6, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1508, 863), "Near Tree Grass 6", "Near Tree Grass 6", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_6)); + locationTable[RC_ZR_GRASS_7] = Location::Grass(RC_ZR_GRASS_7, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1508, 963), "Near Tree Grass 7", "Near Tree Grass 7", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_7)); + locationTable[RC_ZR_GRASS_8] = Location::Grass(RC_ZR_GRASS_8, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1547, 949), "Near Tree Grass 8", "Near Tree Grass 8", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_8)); + locationTable[RC_ZR_GRASS_9] = Location::Grass(RC_ZR_GRASS_9, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1531, 910), "Near Tree Grass 9", "Near Tree Grass 9", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_9)); + locationTable[RC_ZR_GRASS_10] = Location::Grass(RC_ZR_GRASS_10, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1489, 907), "Near Tree Grass 10", "Near Tree Grass 10", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_10)); + locationTable[RC_ZR_GRASS_11] = Location::Grass(RC_ZR_GRASS_11, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1468, 936), "Near Tree Grass 11", "Near Tree Grass 11", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_11)); + locationTable[RC_ZR_GRASS_12] = Location::Grass(RC_ZR_GRASS_12, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(-1436, 906), "Near Tree Grass 12", "Near Tree Grass 12", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_GRASS_12)); + locationTable[RC_ZR_NEAR_FREESTANDING_POH_GRASS] = Location::Grass(RC_ZR_NEAR_FREESTANDING_POH_GRASS, RCQUEST_BOTH, RCAREA_ZORAS_RIVER, SCENE_ZORAS_RIVER, TWO_ACTOR_PARAMS(231, -1478), "Near Freestanding PoH Grass", "Near Freestanding PoH Grass", RHT_ZR_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS)); + // Grotto Grass + locationTable[RC_KF_STORMS_GROTTO_GRASS_1] = Location::Base(RC_KF_STORMS_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KOKIRI_FOREST, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x2C), "Storms Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_1)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_2] = Location::Base(RC_KF_STORMS_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KOKIRI_FOREST, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x2C), "Storms Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_2)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_3] = Location::Base(RC_KF_STORMS_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KOKIRI_FOREST, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x2C), "Storms Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_3)); + locationTable[RC_KF_STORMS_GROTTO_GRASS_4] = Location::Base(RC_KF_STORMS_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KOKIRI_FOREST, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x2C), "Storms Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_STORMS_GROTTO_GRASS_4)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_LOST_WOODS, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x14), "Near Shortcuts Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_LOST_WOODS, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x14), "Near Shortcuts Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_LOST_WOODS, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x14), "Near Shortcuts Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3)); + locationTable[RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4] = Location::Base(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_LOST_WOODS, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x14), "Near Shortcuts Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_1] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x00), "Near Market Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_2] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x00), "Near Market Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_3] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x00), "Near Market Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3)); + locationTable[RC_HF_NEAR_MARKET_GROTTO_GRASS_4] = Location::Base(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x00), "Near Market Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_1] = Location::Base(RC_HF_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x03), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_1)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_2] = Location::Base(RC_HF_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x03), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_2)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_3] = Location::Base(RC_HF_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x03), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_3)); + locationTable[RC_HF_OPEN_GROTTO_GRASS_4] = Location::Base(RC_HF_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x03), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_OPEN_GROTTO_GRASS_4)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_1] = Location::Base(RC_HF_SOUTHEAST_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x22), "Southeast Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_2] = Location::Base(RC_HF_SOUTHEAST_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x22), "Southeast Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_3] = Location::Base(RC_HF_SOUTHEAST_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x22), "Southeast Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3)); + locationTable[RC_HF_SOUTHEAST_GROTTO_GRASS_4] = Location::Base(RC_HF_SOUTHEAST_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x22), "Southeast Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4)); + locationTable[RC_HF_COW_GROTTO_GRASS_1] = Location::Base(RC_HF_COW_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3419, 0xE4), "Cow Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GRASS_1)); + locationTable[RC_HF_COW_GROTTO_GRASS_2] = Location::Base(RC_HF_COW_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_HYRULE_FIELD, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3518, 0xE4), "Cow Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HF_COW_GROTTO_GRASS_2)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_1] = Location::Base(RC_KAK_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x28), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_1)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_2] = Location::Base(RC_KAK_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x28), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_2)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_3] = Location::Base(RC_KAK_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x28), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_3)); + locationTable[RC_KAK_OPEN_GROTTO_GRASS_4] = Location::Base(RC_KAK_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_KAKARIKO_VILLAGE, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x28), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_OPEN_GROTTO_GRASS_4)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_1] = Location::Base(RC_DMT_STORMS_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x57), "Storms Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_1)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_2] = Location::Base(RC_DMT_STORMS_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x57), "Storms Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_2)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_3] = Location::Base(RC_DMT_STORMS_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x57), "Storms Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_3)); + locationTable[RC_DMT_STORMS_GROTTO_GRASS_4] = Location::Base(RC_DMT_STORMS_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x57), "Storms Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_STORMS_GROTTO_GRASS_4)); + locationTable[RC_DMT_COW_GROTTO_GRASS_1] = Location::Base(RC_DMT_COW_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2443, 0xF8), "Cow Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_GRASS_1)); + locationTable[RC_DMT_COW_GROTTO_GRASS_2] = Location::Base(RC_DMT_COW_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_TRAIL, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(2494, 0xF8), "Cow Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_GRASS_2)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_1] = Location::Base(RC_DMC_UPPER_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x7A), "Upper Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_1)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_2] = Location::Base(RC_DMC_UPPER_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x7A), "Upper Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_2)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_3] = Location::Base(RC_DMC_UPPER_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x7A), "Upper Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_3)); + locationTable[RC_DMC_UPPER_GROTTO_GRASS_4] = Location::Base(RC_DMC_UPPER_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_DEATH_MOUNTAIN_CRATER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x7A), "Upper Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_UPPER_GROTTO_GRASS_4)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_1] = Location::Base(RC_ZR_OPEN_GROTTO_GRASS_1, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_ZORAS_RIVER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(3, 0x29), "Open Grotto Grass 1", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_1)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_2] = Location::Base(RC_ZR_OPEN_GROTTO_GRASS_2, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_ZORAS_RIVER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(88, 0x29), "Open Grotto Grass 2", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_2)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_3] = Location::Base(RC_ZR_OPEN_GROTTO_GRASS_3, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_ZORAS_RIVER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(-3, 0x29), "Open Grotto Grass 3", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_3)); + locationTable[RC_ZR_OPEN_GROTTO_GRASS_4] = Location::Base(RC_ZR_OPEN_GROTTO_GRASS_4, RCQUEST_BOTH, RCTYPE_GRASS, RCAREA_ZORAS_RIVER, ACTOR_EN_KUSA, SCENE_GROTTOS, TWO_ACTOR_PARAMS(13, 0x29), "Open Grotto Grass 4", RHT_GROTTO_GRASS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ZR_OPEN_GROTTO_GRASS_4)); + // Dungeon Grass + locationTable[RC_DEKU_TREE_LOBBY_GRASS_1] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(391, -156), "Deku Tree Lobby Grass 1", "Deku Tree Lobby Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_1)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_2] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(355, -233), "Deku Tree Lobby Grass 2", "Deku Tree Lobby Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_2)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(307, -289), "Deku Tree Lobby Grass 3", "Deku Tree Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_3)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, -414), "Deku Tree Lobby Grass 4", "Deku Tree Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_4)); + locationTable[RC_DEKU_TREE_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_LOBBY_GRASS_5, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(142, -399), "Deku Tree Lobby Grass 5", "Deku Tree Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_LOBBY_GRASS_5)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1018, 1263), "Deku Tree Slingshot Grass 1", "Deku Tree Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1005, 1216), "Deku Tree Slingshot Grass 2", "Deku Tree Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1280, 1026), "Deku Tree Slingshot Grass 3", "Deku Tree Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3)); + locationTable[RC_DEKU_TREE_SLINGSHOT_GRASS_4] = Location::Grass(RC_DEKU_TREE_SLINGSHOT_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1229, 1006), "Deku Tree Slingshot Grass 4", "Deku Tree Slingshot Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4)); + locationTable[RC_DEKU_TREE_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_COMPASS_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1444, 169), "Deku Tree Compass Grass 1", "Deku Tree Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_COMPASS_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1516, 142), "Deku Tree Compass Grass 2", "Deku Tree Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(48, 130), "Deku Tree Basement Grass 1", "Deku Tree Basement Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(48, 187), "Deku Tree Basement Grass 2", "Deku Tree Basement Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-228, 792), "Deku Tree Eye Switch Grass 1", "Deku Tree Eye Switch Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-202, 751), "Deku Tree Eye Switch Grass 2", "Deku Tree Eye Switch Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(79, 794), "Deku Tree Eye Switch Grass 3", "Deku Tree Eye Switch Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3)); + locationTable[RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4] = Location::Grass(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(49, 752), "Deku Tree Eye Switch Grass 4", "Deku Tree Eye Switch Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4)); + locationTable[RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1310, 840), "Deku Tree Spike Roller Grass 1", "Deku Tree Spike Roller Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1361, 840), "Deku Tree Spike Roller Grass 2", "Deku Tree Spike Roller Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1796, 821), "Deku Tree Torches Grass 1", "Deku Tree Torches Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1919, 820), "Deku Tree Torches Grass 2", "Deku Tree Torches Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2)); + locationTable[RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1] = Location::Grass(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1955, -296), "Deku Tree Larvae Grass 1", "Deku Tree Larvae Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1)); + locationTable[RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2] = Location::Grass(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2025, -301), "Deku Tree Larvae Grass 2", "Deku Tree Larvae Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-273, -515), "Deku Tree Before Boss Grass 1", "Deku Tree Before Boss Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-273, -577), "Deku Tree Before Boss Grass 2", "Deku Tree Before Boss Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2)); + locationTable[RC_DEKU_TREE_BEFORE_BOSS_GRASS_3] = Location::Grass(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, RCQUEST_VANILLA, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-269, -643), "Deku Tree Before Boss Grass 3", "Deku Tree Before Boss Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-760, -465), "Dodongo's Cavern First Bridge Grass", "Dodongo's Cavern First Bridge Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_BLADE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_BLADE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1713, -1246), "Dodongo's Cavern Blade Room Grass", "Dodongo's Cavern Blade Room Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BLADE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3189, -485), "Dodongo's Cavern Single Eye Grass", "Dodongo's Cavern Single Eye Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, RCQUEST_VANILLA, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-249, -2519), "Dodongo's Cavern Before Boss Grass", "Dodongo's Cavern Before Boss Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-858, -1330), "Bottom of the Well Basement Behind Rocks Grass 1", "Bottom of the Well Basement Behind Rocks Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-870, -1021), "Bottom of the Well Basement Behind Rocks Grass 2", "Bottom of the Well Basement Behind Rocks Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-872, -1383), "Bottom of the Well Basement Behind Rocks Grass 3", "Bottom of the Well Basement Behind Rocks Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-874, -1447), "Bottom of the Well Basement Behind Rocks Grass 4", "Bottom of the Well Basement Behind Rocks Grass 4", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-886, -1263), "Bottom of the Well Basement Behind Rocks Grass 5", "Bottom of the Well Basement Behind Rocks Grass 5", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-918, -1131), "Bottom of the Well Basement Behind Rocks Grass 6", "Bottom of the Well Basement Behind Rocks Grass 6", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-943, -1316), "Bottom of the Well Basement Behind Rocks Grass 7", "Bottom of the Well Basement Behind Rocks Grass 7", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-956, -1377), "Bottom of the Well Basement Behind Rocks Grass 8", "Bottom of the Well Basement Behind Rocks Grass 8", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-956, -1463), "Bottom of the Well Basement Behind Rocks Grass 9", "Bottom of the Well Basement Behind Rocks Grass 9", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-619, -627), "Bottom of the Well Basement Grass 1", "Bottom of the Well Basement Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-565, -654), "Bottom of the Well Basement Grass 2", "Bottom of the Well Basement Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, RCQUEST_VANILLA, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-552, -711), "Bottom of the Well Basement Grass 3", "Bottom of the Well Basement Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3)); + // MQ Dungeon Grass + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(392, -158), "MQ Deku Tree Lobby Grass 1", "MQ Deku Tree Lobby Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(356, -235), "MQ Deku Tree Lobby Grass 2", "MQ Deku Tree Lobby Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(308, -291), "MQ Deku Tree Lobby Grass 3", "MQ Deku Tree Lobby Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(81, -416), "MQ Deku Tree Lobby Grass 4", "MQ Deku Tree Lobby Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(143, -401), "MQ Deku Tree Lobby Grass 5", "MQ Deku Tree Lobby Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_6] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-11, -344), "MQ Deku Tree Lobby Grass 6", "MQ Deku Tree Lobby Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_GRASS_7] = Location::Grass(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-159, -302), "MQ Deku Tree Lobby Grass 7", "MQ Deku Tree Lobby Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-636, 161), "MQ Deku Tree Slingshot Grass 1", "MQ Deku Tree Slingshot Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-693, 182), "MQ Deku Tree Slingshot Grass 2", "MQ Deku Tree Slingshot Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1443, 167), "MQ Deku Tree Slingshot Grass 3", "MQ Deku Tree Slingshot Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1515, 140), "MQ Deku Tree Slingshot Grass 4", "MQ Deku Tree Slingshot Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-753, 614), "MQ Deku Tree Before Compass Grass 1", "MQ Deku Tree Before Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-736, 795), "MQ Deku Tree Before Compass Grass 2", "MQ Deku Tree Before Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-575, 627), "MQ Deku Tree Before Compass Grass 3", "MQ Deku Tree Before Compass Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-572, 727), "MQ Deku Tree Before Compass Grass 4", "MQ Deku Tree Before Compass Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-788, 702), "MQ Deku Tree Before Compass Grass 5", "MQ Deku Tree Before Compass Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-654, 582), "MQ Deku Tree Before Compass Grass 6", "MQ Deku Tree Before Compass Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-643, 798), "MQ Deku Tree Before Compass Grass 7", "MQ Deku Tree Before Compass Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1279, 1024), "MQ Deku Tree Compass Grass 1", "MQ Deku Tree Compass Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1228, 1004), "MQ Deku Tree Compass Grass 2", "MQ Deku Tree Compass Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1017, 1261), "MQ Deku Tree Compass Grass 3", "MQ Deku Tree Compass Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_COMPASS_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1004, 1214), "MQ Deku Tree Compass Grass 4", "MQ Deku Tree Compass Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-15, -261), "MQ Deku Tree Basement Lower Grass 1", "MQ Deku Tree Basement Lower Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-7, -328), "MQ Deku Tree Basement Lower Grass 2", "MQ Deku Tree Basement Lower Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(5, 119), "MQ Deku Tree Basement Lower Grass 3", "MQ Deku Tree Basement Lower Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-39, 118), "MQ Deku Tree Basement Lower Grass 4", "MQ Deku Tree Basement Lower Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-807, -228), "MQ Deku Tree Basement Upper Grass 1", "MQ Deku Tree Basement Upper Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-764, 280), "MQ Deku Tree Basement Upper Grass 2", "MQ Deku Tree Basement Upper Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, 237), "MQ Deku Tree Basement Upper Grass 3", "MQ Deku Tree Basement Upper Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-466, 865), "MQ Deku Tree Spike Roller Front Grass 1", "MQ Deku Tree Spike Roller Front Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-495, 906), "MQ Deku Tree Spike Roller Front Grass 2", "MQ Deku Tree Spike Roller Front Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-538, 907), "MQ Deku Tree Spike Roller Front Grass 3", "MQ Deku Tree Spike Roller Front Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1360, 838), "MQ Deku Tree Spike Roller Back Grass 1", "MQ Deku Tree Spike Roller Back Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1309, 838), "MQ Deku Tree Spike Roller Back Grass 2", "MQ Deku Tree Spike Roller Back Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-227, 790), "MQ Deku Tree Torches Grass 1", "MQ Deku Tree Torches Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-201, 749), "MQ Deku Tree Torches Grass 2", "MQ Deku Tree Torches Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(50, 750), "MQ Deku Tree Torches Grass 3", "MQ Deku Tree Torches Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(80, 792), "MQ Deku Tree Torches Grass 4", "MQ Deku Tree Torches Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1795, 819), "MQ Deku Tree Larvae Grass 1", "MQ Deku Tree Larvae Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1918, 818), "MQ Deku Tree Larvae Grass 2", "MQ Deku Tree Larvae Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1678, -120), "MQ Deku Tree Graves Grass 1", "MQ Deku Tree Graves Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1700, 196), "MQ Deku Tree Graves Grass 2", "MQ Deku Tree Graves Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2165, 350), "MQ Deku Tree Graves Grass 3", "MQ Deku Tree Graves Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2215, 56), "MQ Deku Tree Graves Grass 4", "MQ Deku Tree Graves Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-1901, 604), "MQ Deku Tree Graves Grass 5", "MQ Deku Tree Graves Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2708, -522), "MQ Deku Tree Back Grass 1", "MQ Deku Tree Back Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2395, -587), "MQ Deku Tree Back Grass 2", "MQ Deku Tree Back Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-2553, -433), "MQ Deku Tree Back Grass 3", "MQ Deku Tree Back Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-272, -517), "MQ Deku Tree Before Boss Grass 1", "MQ Deku Tree Before Boss Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-272, -579), "MQ Deku Tree Before Boss Grass 2", "MQ Deku Tree Before Boss Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2)); + locationTable[RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3] = Location::Grass(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-268, -645), "MQ Deku Tree Before Boss Grass 3", "MQ Deku Tree Before Boss Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1721, -579), "MQ Dodongo's Cavern Compass Grass 1", "MQ Dodongo's Cavern Compass Grass 1", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1731, -45), "MQ Dodongo's Cavern Compass Grass 2", "MQ Dodongo's Cavern Compass Grass 2", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2218, -56), "MQ Dodongo's Cavern Compass Grass 3", "MQ Dodongo's Cavern Compass Grass 3", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4] = Location::Grass(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2230, -556), "MQ Dodongo's Cavern Compass Grass 4", "MQ Dodongo's Cavern Compass Grass 4", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1765, -3940), "MQ Dodongo's Cavern Armos Grass", "MQ Dodongo's Cavern Armos Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS)); + locationTable[RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS] = Location::Grass(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1285, -4693), "MQ Dodongo's Cavern Back Poe Grass", "MQ Dodongo's Cavern Back Poe Grass", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS)); + locationTable[RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1] = Location::Grass(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2644, -3368), "MQ Dodongo's Cavern Scrub Grass 1", "MQ Dodongo's Cavern Scrub Grass 1", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2] = Location::Grass(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2614, -3387), "MQ Dodongo's Cavern Scrub Grass 2", "MQ Dodongo's Cavern Scrub Grass 2", RHT_DODONGOS_CAVERN_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-219, -61), "MQ Jabu Jabu's Belly First Grass 1", "MQ Jabu Jabu's Belly First Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(213, -398), "MQ Jabu Jabu's Belly First Grass 2", "MQ Jabu Jabu's Belly First Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-192, -3209), "MQ Jabu Jabu's Belly Pit Grass 1", "MQ Jabu Jabu's Belly Pit Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(350, -3534), "MQ Jabu Jabu's Belly Pit Grass 2", "MQ Jabu Jabu's Belly Pit Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-91, -2815), "MQ Jabu Jabu's Belly Basement Grass 1", "MQ Jabu Jabu's Belly Basement Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(231, -3575), "MQ Jabu Jabu's Belly Basement Grass 2", "MQ Jabu Jabu's Belly Basement Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(305, -3481), "MQ Jabu Jabu's Belly Basement Grass 3", "MQ Jabu Jabu's Belly Basement Grass 3", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3)); + locationTable[RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1089, -1489), "MQ Jabu Jabu's Belly Wigglers Grass", "MQ Jabu Jabu's Belly Wigglers Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(652, -5687), "MQ Jabu Jabu's Belly Like Like Grass", "MQ Jabu Jabu's Belly Like Like Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1228, -2647), "MQ Jabu Jabu's Belly Basement Boomerang Grass", "MQ Jabu Jabu's Belly Basement Boomerang Grass", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS)); + locationTable[RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1360, -3606), "MQ Jabu Jabu's Belly After Big Octo Grass 1", "MQ Jabu Jabu's Belly After Big Octo Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-1086, -3346), "MQ Jabu Jabu's Belly After Big Octo Grass 2", "MQ Jabu Jabu's Belly After Big Octo Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1477, -1366), "MQ Jabu Jabu's Belly Before Boss Grass 1", "MQ Jabu Jabu's Belly Before Boss Grass 1", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2] = Location::Grass(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(1691, -1576), "MQ Jabu Jabu's Belly Before Boss Grass 2", "MQ Jabu Jabu's Belly Before Boss Grass 2", RHT_JABU_JABUS_BELLY_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1604, 3), "MQ Bottom of the Well Dead Hand Grass 1", "MQ Bottom of the Well Dead Hand Grass 1", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1529, 2), "MQ Bottom of the Well Dead Hand Grass 2", "MQ Bottom of the Well Dead Hand Grass 2", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1492, -49), "MQ Bottom of the Well Dead Hand Grass 3", "MQ Bottom of the Well Dead Hand Grass 3", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4] = Location::Grass(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, RCQUEST_MQ, RCAREA_BOTTOM_OF_THE_WELL, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(1458, -130), "MQ Bottom of the Well Dead Hand Grass 4", "MQ Bottom of the Well Dead Hand Grass 4", RHT_BOTTOM_OF_THE_WELL_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4)); + // Shared Dungeon Grass + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(545, -75), "Deku Tree Queen Gohma Grass 1", "Deku Tree Queen Gohma Grass 1", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(525, -375), "Deku Tree Queen Gohma Grass 2", "Deku Tree Queen Gohma Grass 2", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-646, 108), "Deku Tree Queen Gohma Grass 3", "Deku Tree Queen Gohma Grass 3", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-444, 323), "Deku Tree Queen Gohma Grass 4", "Deku Tree Queen Gohma Grass 4", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-848, -166), "Deku Tree Queen Gohma Grass 5", "Deku Tree Queen Gohma Grass 5", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(-855, -596), "Deku Tree Queen Gohma Grass 6", "Deku Tree Queen Gohma Grass 6", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(480, -681), "Deku Tree Queen Gohma Grass 7", "Deku Tree Queen Gohma Grass 7", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7)); + locationTable[RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8] = Location::Grass(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, RCQUEST_BOTH, RCAREA_DEKU_TREE, SCENE_DEKU_TREE_BOSS, TWO_ACTOR_PARAMS(194, -974), "Deku Tree Queen Gohma Grass 8", "Deku Tree Queen Gohma Grass 8", RHT_DEKU_TREE_GRASS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8)); + // End Grass +} + +static RegisterShipInitFunc registerShuffleGrass(RegisterShuffleGrass, { "IS_RANDO" }); +static RegisterShipInitFunc registerShuffleGrassLocations(Rando::StaticData::RegisterGrassLocations); diff --git a/soh/soh/Enhancements/randomizer/ShuffleGrass.h b/soh/soh/Enhancements/randomizer/ShuffleGrass.h new file mode 100644 index 000000000..e666f107e --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleGrass.h @@ -0,0 +1,15 @@ +#ifndef SHUFFLEGRASS_H +#define SHUFFLEGRASS_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +void EnKusa_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + +#endif //SHUFFLEGRASS_H diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 221e2176c..77f67873e 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -179,6 +179,7 @@ void Context::GenerateLocationPool() { (location.GetRandomizerCheck() == RC_LH_HYRULE_LOACH && mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_HYRULE_LOACH)) || (location.GetRCType() == RCTYPE_FISH && !mFishsanity->GetFishLocationIncluded(&location)) || (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || + (location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_OFF)) || (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || (location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || @@ -189,7 +190,8 @@ void Context::GenerateLocationPool() { // Skip stuff that is shuffled to dungeon only, i.e. tokens, pots, etc., or other checks that // should not have a shuffled item. if ((location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_DUNGEONS)) || - (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS))) { + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS)) || + (location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_DUNGEONS))) { continue; } // If we've gotten past all the conditions where an overworld location should not be @@ -201,7 +203,8 @@ void Context::GenerateLocationPool() { if (location.GetQuest() == RCQUEST_BOTH || (location.GetQuest() == RCQUEST_MQ) == dungeon->IsMQ()) { if ((location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OVERWORLD)) || - (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD))) { + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD)) || + (location.GetRCType() == RCTYPE_GRASS && mOptions[RSK_SHUFFLE_GRASS].Is(RO_SHUFFLE_GRASS_OVERWORLD))) { continue; } // also add to that dungeon's location list. diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index b6f332927..7b5f98f4b 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -392,3 +392,10 @@ Rando::Location Rando::Location::Fairy(RandomizerCheck rc, RandomizerCheckQuest RandomizerHintTextKey hintKey, SpoilerCollectionCheck collectionCheck) { return {rc, quest_, RCTYPE_FAIRY, area_, ACTOR_EN_ELF, scene_, actorParams_, std::move(shortName_), hintKey, RG_NONE, false, collectionCheck}; } + +Rando::Location Rando::Location::Grass(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + std::string&& spoilerName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck) { + return { rc, quest_, RCTYPE_GRASS, area_, ACTOR_EN_KUSA, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, false, collectionCheck }; +} diff --git a/soh/soh/Enhancements/randomizer/location.h b/soh/soh/Enhancements/randomizer/location.h index b4fb6482a..3806160c8 100644 --- a/soh/soh/Enhancements/randomizer/location.h +++ b/soh/soh/Enhancements/randomizer/location.h @@ -199,6 +199,11 @@ class Location { RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); + static Location Grass(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_); diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp index 2a913f4a9..4ec6b6773 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp @@ -131,20 +131,32 @@ void RegionTable_Init_BottomOfTheWell() { areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT] = Region("Bottom of the Well Basement", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->BlastOrSmash()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), - LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, logic->CanCutShrubs() && logic->BlastOrSmash()), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}), @@ -235,6 +247,10 @@ void RegionTable_Init_BottomOfTheWell() { //Locations LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)), LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, logic->HasExplosives() || (ctx->GetTrickOption(RT_BOTW_MQ_DEADHAND_KEY) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, logic->CanCutShrubs()), }, { //Exits //This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check. diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp index 21a7151da..129a842ef 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp @@ -25,6 +25,11 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MAP_CHEST, true), LOCATION(RC_DEKU_TREE_LOBBY_LOWER_HEART, true), LOCATION(RC_DEKU_TREE_LOBBY_UPPER_HEART, logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_LOBBY_GRASS_5, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), @@ -45,6 +50,10 @@ void RegionTable_Init_DekuTree() { //Locations LOCATION(RC_DEKU_TREE_SLINGSHOT_CHEST, true), LOCATION(RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, true), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_1, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_2, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_3, logic->CanCutShrubs() && logic->CanReflectNuts()), + LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_4, logic->CanCutShrubs() && logic->CanReflectNuts()), }, { //Exits Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}), @@ -59,6 +68,8 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_COMPASS_CHEST, true), LOCATION(RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, true), LOCATION(RC_DEKU_TREE_GS_COMPASS_ROOM, logic->CanAttack()), + LOCATION(RC_DEKU_TREE_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_COMPASS_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}), @@ -74,6 +85,8 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_BASEMENT_CHEST, true), LOCATION(RC_DEKU_TREE_GS_BASEMENT_GATE, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)), LOCATION(RC_DEKU_TREE_GS_BASEMENT_VINES, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS) ? ED_SHORT_JUMPSLASH : ED_BOMB_THROW)), + LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_LOBBY, []{return true;}), @@ -82,7 +95,13 @@ void RegionTable_Init_DekuTree() { Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}), }); - areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Location + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return logic->CanHitEyeTargets();});}), @@ -94,7 +113,11 @@ void RegionTable_Init_DekuTree() { Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}), }); - areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}), Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), @@ -104,7 +127,11 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}), @@ -114,7 +141,11 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}), EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), - }, {}, { + }, { + //Location + LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}), Entrance(RR_DEKU_TREE_BASEMENT_BACK_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->BlastOrSmash();});}), @@ -142,9 +173,12 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Region("Deku Tree Outside Boss Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), + LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()), }, { //Exits Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return true;}), @@ -159,7 +193,14 @@ void RegionTable_Init_DekuTree() { //Events EventAccess(&logic->DekuBabaSticks, []{return logic->CanKillEnemy(RE_WITHERED_DEKU_BABA);}), EventAccess(&logic->BrokeDeku1FWeb, []{return logic->HasFireSource();}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}), //may need canAvoid logic with enemy shuffle @@ -173,9 +214,11 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_2F] = Region("Deku Tree MQ 2F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), - LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), - LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_7, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -195,6 +238,10 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, logic->HasFireSourceWithTorch() || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), @@ -205,7 +252,14 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_DEKU_BABA_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return Here(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanHitEyeTargets();});}), @@ -214,7 +268,11 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Region("Deku Tree MQ Compass Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}), @@ -236,7 +294,11 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_CHEST, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -250,7 +312,13 @@ void RegionTable_Init_DekuTree() { //Events //Implies CanKillEnemy(RE_GOHMA_LARVA) EventAccess(&logic->ClearedMQDekuSERoom, []{return logic->CanKillEnemy(RE_MAD_SCRUB);}), - }, {}, { + }, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasFireSource();}), Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->ClearedMQDekuSERoom;}), @@ -262,7 +330,10 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->MQDekuWaterRoomTorches, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_STICKS) && (ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield())));}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, true), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS));}), @@ -276,14 +347,20 @@ void RegionTable_Init_DekuTree() { }, { //Locations //it blocks the chest while stunned unless you stun it from afar while it's slightly off the ground - LOCATION(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanPassEnemy(RE_BIG_SKULLTULA)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->MQDekuWaterRoomTorches && logic->CanPassEnemy(RE_BIG_SKULLTULA, logic->CanUse(RG_SONG_OF_TIME) ? ED_CLOSE : ED_SHORT_JUMPSLASH);}), Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)));}), }); - areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()), + }, { //Exits //both imply CanKillEnemy(RE_GOHMA_LARVA) Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);});}), @@ -297,6 +374,11 @@ void RegionTable_Init_DekuTree() { }, { //Locations LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG))), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->IsChild && Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}), @@ -308,6 +390,9 @@ void RegionTable_Init_DekuTree() { areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Region("Deku Tree MQ Basement Back Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return true;}), @@ -318,7 +403,10 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->PushedDekuBasementBlock, []{return true;}), }, { //Locations - LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()), + LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}), @@ -333,6 +421,9 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}), @@ -354,8 +445,16 @@ void RegionTable_Init_DekuTree() { EventAccess(&logic->DekuTreeClear, []{return logic->DekuTreeClear || logic->CanKillEnemy(RE_GOHMA);}), }, { // Locations - LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), - LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear), + LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, logic->DekuTreeClear && logic->CanCutShrubs()), + LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->DekuTreeClear && logic->CanCutShrubs()), }, { // Exits Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index 738368117..bea5801e5 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -153,6 +153,8 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, true), LOCATION(RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, true), + LOCATION(RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_BLADE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}), @@ -174,6 +176,7 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}), @@ -226,7 +229,10 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Region("Dodongos Cavern Boss Region", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->FairyPot, []{return true;}), - }, {}, { + }, { + //Location + LOCATION(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, logic->CanCutShrubs()), + }, { //Exits Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}), Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();});}), @@ -346,7 +352,11 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM] = Region("Dodongos Cavern MQ Dodongo Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET)), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET)), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return true;}), @@ -472,6 +482,8 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true))), //Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add //&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) + LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);});}), @@ -497,6 +509,7 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, true), //pulling the grave isn't required, as you can open the chest through it LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return logic->CanAttack();}), @@ -513,6 +526,7 @@ void RegionTable_Init_DodongosCavern() { Here(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) /* || bunny jumps*/);})), LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp index 8e3c8a8d4..ed28e8672 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp @@ -173,6 +173,8 @@ void RegionTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, logic->CanBreakPots()), LOCATION(RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}), @@ -220,6 +222,11 @@ void RegionTable_Init_JabuJabusBelly() { //Locations LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, logic->CanCutShrubs() && logic->HasExplosives()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, logic->CanCutShrubs() && logic->HasExplosives()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}), @@ -233,10 +240,11 @@ void RegionTable_Init_JabuJabusBelly() { //Locations LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true), //Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines. - LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanKillEnemy(RE_LIZALFOS)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || (ctx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, logic->CanBreakPots()), - LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, logic->CanKillEnemy(RE_LIZALFOS)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, (logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)) || (ctx->GetTrickOption(RT_JABU_MQ_SOT_GS) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, logic->CanCutShrubs()), }, { //Exits //without swim, jump from rang chest to the other side @@ -254,6 +262,7 @@ void RegionTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}), @@ -298,7 +307,10 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->LoweredJabuPath, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}), @@ -320,9 +332,11 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->FairyPot, []{return true;}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), - LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT))), - LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), + LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && logic->CanUse(RG_HOOKSHOT))), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp index 33022e270..bdcdf9a4c 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/castle_grounds.cpp @@ -29,6 +29,8 @@ void RegionTable_Init_CastleGrounds() { LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_HC_MALON_GOSSIP_STONE, true), LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true), + LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_CASTLE_GROUNDS, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp index 48863c695..cc5601fcb 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp @@ -114,6 +114,10 @@ void RegionTable_Init_DeathMountainCrater() { LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DMC_UPPER_LOCAL, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp index 750fbf140..b9fab96e0 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_trail.cpp @@ -73,6 +73,8 @@ void RegionTable_Init_DeathMountainTrail() { LOCATION(RC_DMT_COW_GROTTO_RUPEE_6, true), LOCATION(RC_DMT_COW_GROTTO_RED_RUPEE, true), LOCATION(RC_DMT_COW_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_DMT_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMT_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}), @@ -87,6 +89,10 @@ void RegionTable_Init_DeathMountainTrail() { LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index 6a3fb41f5..694d0e3ee 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -19,6 +19,18 @@ void RegionTable_Init_Graveyard() { LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GY_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_GY_GRASS_12, logic->CanCutShrubs()), }, { //Exits Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp index f6c9d1c40..add3a2f86 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/hyrule_field.cpp @@ -13,6 +13,54 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)), LOCATION(RC_SONG_FROM_OCARINA_OF_TIME, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)), LOCATION(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_HF_CENTRAL_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_CENTRAL_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTH_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_BRIDGE, []{return true;}), @@ -41,6 +89,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -55,6 +107,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -89,6 +145,8 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_COW_GROTTO_POT_1, logic->CanBreakPots()), LOCATION(RC_HF_COW_GROTTO_POT_2, logic->CanBreakPots()), + LOCATION(RC_HF_COW_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HF_COW_GROTTO, []{return true;}), @@ -103,6 +161,10 @@ void RegionTable_Init_HyruleField() { LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, true), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index 846e55203..7fffa5d72 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -31,6 +31,14 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_KAK_GRASS_8, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), @@ -224,6 +232,10 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_KAK_BACKYARD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp index cdd43b042..80df2bb91 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kokiri_forest.cpp @@ -40,6 +40,41 @@ void RegionTable_Init_KokiriForest() { LOCATION(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild), LOCATION(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild), LOCATION(RC_KF_GOSSIP_STONE, true), + LOCATION(RC_KF_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_5, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_6, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_7, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_8, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_9, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_10, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_11, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_12, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_CHILD_GRASS_MAZE_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_1, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_2, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_3, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_4, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_5, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_6, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_7, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_8, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_9, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_10, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_11, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_12, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_13, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_14, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_15, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_16, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_17, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_18, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_19, logic->IsAdult && logic->CanCutShrubs()), + LOCATION(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()), }, { //Exits Entrance(RR_KF_LINKS_HOUSE, []{return true;}), @@ -146,6 +181,10 @@ void RegionTable_Init_KokiriForest() { LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_KOKIRI_FOREST, []{return true;}) diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index d4b950d78..04ae5fe85 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -39,6 +39,48 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_LH_LAB_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE, true), LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE, true), + LOCATION(RC_LH_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_12, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_13, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_14, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_15, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_16, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_17, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_18, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_19, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_20, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_21, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_22, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_23, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_24, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_25, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_26, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_27, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_28, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_29, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_30, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_31, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_32, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_33, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_34, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_35, logic->CanCutShrubs()), + LOCATION(RC_LH_GRASS_36, logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_LH_WARP_PAD_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LH_WARP_PAD_GRASS_2, logic->CanCutShrubs()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp index fb146ec54..812b33a55 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lost_woods.cpp @@ -49,6 +49,9 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_GOSSIP_STONE, true), + LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_FOREST_EXIT, []{return true;}), @@ -72,6 +75,12 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_LW_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()), }, { //Exits Entrance(RR_LW_FOREST_EXIT, []{return true;}), @@ -90,6 +99,10 @@ void RegionTable_Init_LostWoods() { LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, true), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_THE_LOST_WOODS, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index 3924c858a..02dea3b56 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -12,7 +12,17 @@ void RegionTable_Init_Market() { Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), }); - areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_MARKET_GRASS_1, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_2, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_3, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_4, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_5, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_6, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_7, logic->IsChild && logic->CanCutShrubs()), + LOCATION(RC_MARKET_GRASS_8, logic->IsChild && logic->CanCutShrubs()), + }, { //Exits Entrance(RR_MARKET_ENTRANCE, []{return true;}), Entrance(RR_TOT_ENTRANCE, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp index 3a252edb0..3fbf8bdbd 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/zoras_river.cpp @@ -7,7 +7,19 @@ void RegionTable_Init_ZoraRiver() { // clang-format off areaTable[RR_ZR_FRONT] = Region("ZR Front", "Zora River", {RA_ZORAS_RIVER}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)), + LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)), + LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()), + LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZORAS_RIVER, []{return logic->IsAdult || logic->BlastOrSmash();}), @@ -48,6 +60,7 @@ void RegionTable_Init_ZoraRiver() { LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true), LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true), + LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZR_FRONT, []{return true;}), @@ -73,6 +86,10 @@ void RegionTable_Init_ZoraRiver() { LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, true), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()), LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()), + LOCATION(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()), }, { //Exits Entrance(RR_ZORAS_RIVER, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index a3184765f..576e8c334 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -449,6 +449,17 @@ void Settings::CreateOptionDescriptions() { "All Items - Shuffle all freestanding rupees & hearts."; mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = "Shuffle fairy locations."; + mOptionDescriptions[RSK_SHUFFLE_GRASS] = + "Grass/Bushes will drop a randomized item the first time they're cut and collected. " + "Grass/Bushes will have a different appearance when they hold a randomized item.\n" + "\n" + "Off - Grass/Bushes will not be shuffled.\n" + "\n" + "Dungeons - Only shuffle grass/bushes that are within dungeons.\n" + "\n" + "Overworld - Only shuffle grass/bushes that are outside of dungeons.\n" + "\n" + "All Grass/Bushes - Shuffle all grass/bushes."; mOptionDescriptions[RSK_SHUFFLE_DUNGEON_REWARDS] = "Shuffles the location of Spiritual Stones and medallions.\n" "Vanilla - Spiritual Stones and medallions will be given from their respective boss.\n" diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 4eac2e5bb..f99a38ba3 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1007,6 +1007,356 @@ std::map rcToRandomizerInf = { { RC_ZD_FISH_3, RAND_INF_ZD_FISH_3 }, { RC_ZD_FISH_4, RAND_INF_ZD_FISH_4 }, { RC_ZD_FISH_5, RAND_INF_ZD_FISH_5 }, + // Grass + { RC_KF_CHILD_GRASS_1, RAND_INF_KF_CHILD_GRASS_1 }, + { RC_KF_CHILD_GRASS_2, RAND_INF_KF_CHILD_GRASS_2 }, + { RC_KF_CHILD_GRASS_3, RAND_INF_KF_CHILD_GRASS_3 }, + { RC_KF_CHILD_GRASS_4, RAND_INF_KF_CHILD_GRASS_4 }, + { RC_KF_CHILD_GRASS_5, RAND_INF_KF_CHILD_GRASS_5 }, + { RC_KF_CHILD_GRASS_6, RAND_INF_KF_CHILD_GRASS_6 }, + { RC_KF_CHILD_GRASS_7, RAND_INF_KF_CHILD_GRASS_7 }, + { RC_KF_CHILD_GRASS_8, RAND_INF_KF_CHILD_GRASS_8 }, + { RC_KF_CHILD_GRASS_9, RAND_INF_KF_CHILD_GRASS_9 }, + { RC_KF_CHILD_GRASS_10, RAND_INF_KF_CHILD_GRASS_10 }, + { RC_KF_CHILD_GRASS_11, RAND_INF_KF_CHILD_GRASS_11 }, + { RC_KF_CHILD_GRASS_12, RAND_INF_KF_CHILD_GRASS_12 }, + { RC_KF_CHILD_GRASS_MAZE_1, RAND_INF_KF_CHILD_GRASS_MAZE_1 }, + { RC_KF_CHILD_GRASS_MAZE_2, RAND_INF_KF_CHILD_GRASS_MAZE_2 }, + { RC_KF_CHILD_GRASS_MAZE_3, RAND_INF_KF_CHILD_GRASS_MAZE_3 }, + { RC_KF_ADULT_GRASS_1, RAND_INF_KF_ADULT_GRASS_1 }, + { RC_KF_ADULT_GRASS_2, RAND_INF_KF_ADULT_GRASS_2 }, + { RC_KF_ADULT_GRASS_3, RAND_INF_KF_ADULT_GRASS_3 }, + { RC_KF_ADULT_GRASS_4, RAND_INF_KF_ADULT_GRASS_4 }, + { RC_KF_ADULT_GRASS_5, RAND_INF_KF_ADULT_GRASS_5 }, + { RC_KF_ADULT_GRASS_6, RAND_INF_KF_ADULT_GRASS_6 }, + { RC_KF_ADULT_GRASS_7, RAND_INF_KF_ADULT_GRASS_7 }, + { RC_KF_ADULT_GRASS_8, RAND_INF_KF_ADULT_GRASS_8 }, + { RC_KF_ADULT_GRASS_9, RAND_INF_KF_ADULT_GRASS_9 }, + { RC_KF_ADULT_GRASS_10, RAND_INF_KF_ADULT_GRASS_10 }, + { RC_KF_ADULT_GRASS_11, RAND_INF_KF_ADULT_GRASS_11 }, + { RC_KF_ADULT_GRASS_12, RAND_INF_KF_ADULT_GRASS_12 }, + { RC_KF_ADULT_GRASS_13, RAND_INF_KF_ADULT_GRASS_13 }, + { RC_KF_ADULT_GRASS_14, RAND_INF_KF_ADULT_GRASS_14 }, + { RC_KF_ADULT_GRASS_15, RAND_INF_KF_ADULT_GRASS_15 }, + { RC_KF_ADULT_GRASS_16, RAND_INF_KF_ADULT_GRASS_16 }, + { RC_KF_ADULT_GRASS_17, RAND_INF_KF_ADULT_GRASS_17 }, + { RC_KF_ADULT_GRASS_18, RAND_INF_KF_ADULT_GRASS_18 }, + { RC_KF_ADULT_GRASS_19, RAND_INF_KF_ADULT_GRASS_19 }, + { RC_KF_ADULT_GRASS_20, RAND_INF_KF_ADULT_GRASS_20 }, + { RC_LW_GRASS_1, RAND_INF_LW_GRASS_1 }, + { RC_LW_GRASS_2, RAND_INF_LW_GRASS_2 }, + { RC_LW_GRASS_3, RAND_INF_LW_GRASS_3 }, + { RC_LW_GRASS_4, RAND_INF_LW_GRASS_4 }, + { RC_LW_GRASS_5, RAND_INF_LW_GRASS_5 }, + { RC_LW_GRASS_6, RAND_INF_LW_GRASS_6 }, + { RC_LW_GRASS_7, RAND_INF_LW_GRASS_7 }, + { RC_LW_GRASS_8, RAND_INF_LW_GRASS_8 }, + { RC_LW_GRASS_9, RAND_INF_LW_GRASS_9 }, + { RC_MARKET_GRASS_1, RAND_INF_MARKET_GRASS_1 }, + { RC_MARKET_GRASS_2, RAND_INF_MARKET_GRASS_2 }, + { RC_MARKET_GRASS_3, RAND_INF_MARKET_GRASS_3 }, + { RC_MARKET_GRASS_4, RAND_INF_MARKET_GRASS_4 }, + { RC_MARKET_GRASS_5, RAND_INF_MARKET_GRASS_5 }, + { RC_MARKET_GRASS_6, RAND_INF_MARKET_GRASS_6 }, + { RC_MARKET_GRASS_7, RAND_INF_MARKET_GRASS_7 }, + { RC_MARKET_GRASS_8, RAND_INF_MARKET_GRASS_8 }, + { RC_HC_GRASS_1, RAND_INF_HC_GRASS_1 }, + { RC_HC_GRASS_2, RAND_INF_HC_GRASS_2 }, + { RC_KAK_GRASS_1, RAND_INF_KAK_GRASS_1 }, + { RC_KAK_GRASS_2, RAND_INF_KAK_GRASS_2 }, + { RC_KAK_GRASS_3, RAND_INF_KAK_GRASS_3 }, + { RC_KAK_GRASS_4, RAND_INF_KAK_GRASS_4 }, + { RC_KAK_GRASS_5, RAND_INF_KAK_GRASS_5 }, + { RC_KAK_GRASS_6, RAND_INF_KAK_GRASS_6 }, + { RC_KAK_GRASS_7, RAND_INF_KAK_GRASS_7 }, + { RC_KAK_GRASS_8, RAND_INF_KAK_GRASS_8 }, + { RC_GY_GRASS_1, RAND_INF_GY_GRASS_1 }, + { RC_GY_GRASS_2, RAND_INF_GY_GRASS_2 }, + { RC_GY_GRASS_3, RAND_INF_GY_GRASS_3 }, + { RC_GY_GRASS_4, RAND_INF_GY_GRASS_4 }, + { RC_GY_GRASS_5, RAND_INF_GY_GRASS_5 }, + { RC_GY_GRASS_6, RAND_INF_GY_GRASS_6 }, + { RC_GY_GRASS_7, RAND_INF_GY_GRASS_7 }, + { RC_GY_GRASS_8, RAND_INF_GY_GRASS_8 }, + { RC_GY_GRASS_9, RAND_INF_GY_GRASS_9 }, + { RC_GY_GRASS_10, RAND_INF_GY_GRASS_10 }, + { RC_GY_GRASS_11, RAND_INF_GY_GRASS_11 }, + { RC_GY_GRASS_12, RAND_INF_GY_GRASS_12 }, + { RC_LH_GRASS_1, RAND_INF_LH_GRASS_1 }, + { RC_LH_GRASS_2, RAND_INF_LH_GRASS_2 }, + { RC_LH_GRASS_3, RAND_INF_LH_GRASS_3 }, + { RC_LH_GRASS_4, RAND_INF_LH_GRASS_4 }, + { RC_LH_GRASS_5, RAND_INF_LH_GRASS_5 }, + { RC_LH_GRASS_6, RAND_INF_LH_GRASS_6 }, + { RC_LH_GRASS_7, RAND_INF_LH_GRASS_7 }, + { RC_LH_GRASS_8, RAND_INF_LH_GRASS_8 }, + { RC_LH_GRASS_9, RAND_INF_LH_GRASS_9 }, + { RC_LH_GRASS_10, RAND_INF_LH_GRASS_10 }, + { RC_LH_GRASS_11, RAND_INF_LH_GRASS_11 }, + { RC_LH_GRASS_12, RAND_INF_LH_GRASS_12 }, + { RC_LH_GRASS_13, RAND_INF_LH_GRASS_13 }, + { RC_LH_GRASS_14, RAND_INF_LH_GRASS_14 }, + { RC_LH_GRASS_15, RAND_INF_LH_GRASS_15 }, + { RC_LH_GRASS_16, RAND_INF_LH_GRASS_16 }, + { RC_LH_GRASS_17, RAND_INF_LH_GRASS_17 }, + { RC_LH_GRASS_18, RAND_INF_LH_GRASS_18 }, + { RC_LH_GRASS_19, RAND_INF_LH_GRASS_19 }, + { RC_LH_GRASS_20, RAND_INF_LH_GRASS_20 }, + { RC_LH_GRASS_21, RAND_INF_LH_GRASS_21 }, + { RC_LH_GRASS_22, RAND_INF_LH_GRASS_22 }, + { RC_LH_GRASS_23, RAND_INF_LH_GRASS_23 }, + { RC_LH_GRASS_24, RAND_INF_LH_GRASS_24 }, + { RC_LH_GRASS_25, RAND_INF_LH_GRASS_25 }, + { RC_LH_GRASS_26, RAND_INF_LH_GRASS_26 }, + { RC_LH_GRASS_27, RAND_INF_LH_GRASS_27 }, + { RC_LH_GRASS_28, RAND_INF_LH_GRASS_28 }, + { RC_LH_GRASS_29, RAND_INF_LH_GRASS_29 }, + { RC_LH_GRASS_30, RAND_INF_LH_GRASS_30 }, + { RC_LH_GRASS_31, RAND_INF_LH_GRASS_31 }, + { RC_LH_GRASS_32, RAND_INF_LH_GRASS_32 }, + { RC_LH_GRASS_33, RAND_INF_LH_GRASS_33 }, + { RC_LH_GRASS_34, RAND_INF_LH_GRASS_34 }, + { RC_LH_GRASS_35, RAND_INF_LH_GRASS_35 }, + { RC_LH_GRASS_36, RAND_INF_LH_GRASS_36 }, + { RC_LH_CHILD_GRASS_1, RAND_INF_LH_CHILD_GRASS_1 }, + { RC_LH_CHILD_GRASS_2, RAND_INF_LH_CHILD_GRASS_2 }, + { RC_LH_CHILD_GRASS_3, RAND_INF_LH_CHILD_GRASS_3 }, + { RC_LH_CHILD_GRASS_4, RAND_INF_LH_CHILD_GRASS_4 }, + { RC_LH_WARP_PAD_GRASS_1, RAND_INF_LH_WARP_PAD_GRASS_1 }, + { RC_LH_WARP_PAD_GRASS_2, RAND_INF_LH_WARP_PAD_GRASS_2 }, + { RC_HF_NEAR_KF_GRASS_1, RAND_INF_HF_NEAR_KF_GRASS_1 }, + { RC_HF_NEAR_KF_GRASS_2, RAND_INF_HF_NEAR_KF_GRASS_2 }, + { RC_HF_NEAR_KF_GRASS_3, RAND_INF_HF_NEAR_KF_GRASS_3 }, + { RC_HF_NEAR_KF_GRASS_4, RAND_INF_HF_NEAR_KF_GRASS_4 }, + { RC_HF_NEAR_KF_GRASS_5, RAND_INF_HF_NEAR_KF_GRASS_5 }, + { RC_HF_NEAR_KF_GRASS_6, RAND_INF_HF_NEAR_KF_GRASS_6 }, + { RC_HF_NEAR_KF_GRASS_7, RAND_INF_HF_NEAR_KF_GRASS_7 }, + { RC_HF_NEAR_KF_GRASS_8, RAND_INF_HF_NEAR_KF_GRASS_8 }, + { RC_HF_NEAR_KF_GRASS_9, RAND_INF_HF_NEAR_KF_GRASS_9 }, + { RC_HF_NEAR_KF_GRASS_10, RAND_INF_HF_NEAR_KF_GRASS_10 }, + { RC_HF_NEAR_KF_GRASS_11, RAND_INF_HF_NEAR_KF_GRASS_11 }, + { RC_HF_NEAR_KF_GRASS_12, RAND_INF_HF_NEAR_KF_GRASS_12 }, + { RC_HF_NEAR_MARKET_GRASS_1, RAND_INF_HF_NEAR_MARKET_GRASS_1 }, + { RC_HF_NEAR_MARKET_GRASS_2, RAND_INF_HF_NEAR_MARKET_GRASS_2 }, + { RC_HF_NEAR_MARKET_GRASS_3, RAND_INF_HF_NEAR_MARKET_GRASS_3 }, + { RC_HF_NEAR_MARKET_GRASS_4, RAND_INF_HF_NEAR_MARKET_GRASS_4 }, + { RC_HF_NEAR_MARKET_GRASS_5, RAND_INF_HF_NEAR_MARKET_GRASS_5 }, + { RC_HF_NEAR_MARKET_GRASS_6, RAND_INF_HF_NEAR_MARKET_GRASS_6 }, + { RC_HF_NEAR_MARKET_GRASS_7, RAND_INF_HF_NEAR_MARKET_GRASS_7 }, + { RC_HF_NEAR_MARKET_GRASS_8, RAND_INF_HF_NEAR_MARKET_GRASS_8 }, + { RC_HF_NEAR_MARKET_GRASS_9, RAND_INF_HF_NEAR_MARKET_GRASS_9 }, + { RC_HF_NEAR_MARKET_GRASS_10, RAND_INF_HF_NEAR_MARKET_GRASS_10 }, + { RC_HF_NEAR_MARKET_GRASS_11, RAND_INF_HF_NEAR_MARKET_GRASS_11 }, + { RC_HF_NEAR_MARKET_GRASS_12, RAND_INF_HF_NEAR_MARKET_GRASS_12 }, + { RC_HF_SOUTH_GRASS_1, RAND_INF_HF_SOUTH_GRASS_1 }, + { RC_HF_SOUTH_GRASS_2, RAND_INF_HF_SOUTH_GRASS_2 }, + { RC_HF_SOUTH_GRASS_3, RAND_INF_HF_SOUTH_GRASS_3 }, + { RC_HF_SOUTH_GRASS_4, RAND_INF_HF_SOUTH_GRASS_4 }, + { RC_HF_SOUTH_GRASS_5, RAND_INF_HF_SOUTH_GRASS_5 }, + { RC_HF_SOUTH_GRASS_6, RAND_INF_HF_SOUTH_GRASS_6 }, + { RC_HF_SOUTH_GRASS_7, RAND_INF_HF_SOUTH_GRASS_7 }, + { RC_HF_SOUTH_GRASS_8, RAND_INF_HF_SOUTH_GRASS_8 }, + { RC_HF_SOUTH_GRASS_9, RAND_INF_HF_SOUTH_GRASS_9 }, + { RC_HF_SOUTH_GRASS_10, RAND_INF_HF_SOUTH_GRASS_10 }, + { RC_HF_SOUTH_GRASS_11, RAND_INF_HF_SOUTH_GRASS_11 }, + { RC_HF_SOUTH_GRASS_12, RAND_INF_HF_SOUTH_GRASS_12 }, + { RC_HF_CENTRAL_GRASS_1, RAND_INF_HF_CENTRAL_GRASS_1 }, + { RC_HF_CENTRAL_GRASS_2, RAND_INF_HF_CENTRAL_GRASS_2 }, + { RC_HF_CENTRAL_GRASS_3, RAND_INF_HF_CENTRAL_GRASS_3 }, + { RC_HF_CENTRAL_GRASS_4, RAND_INF_HF_CENTRAL_GRASS_4 }, + { RC_HF_CENTRAL_GRASS_5, RAND_INF_HF_CENTRAL_GRASS_5 }, + { RC_HF_CENTRAL_GRASS_6, RAND_INF_HF_CENTRAL_GRASS_6 }, + { RC_HF_CENTRAL_GRASS_7, RAND_INF_HF_CENTRAL_GRASS_7 }, + { RC_HF_CENTRAL_GRASS_8, RAND_INF_HF_CENTRAL_GRASS_8 }, + { RC_HF_CENTRAL_GRASS_9, RAND_INF_HF_CENTRAL_GRASS_9 }, + { RC_HF_CENTRAL_GRASS_10, RAND_INF_HF_CENTRAL_GRASS_10 }, + { RC_HF_CENTRAL_GRASS_11, RAND_INF_HF_CENTRAL_GRASS_11 }, + { RC_HF_CENTRAL_GRASS_12, RAND_INF_HF_CENTRAL_GRASS_12 }, + { RC_ZR_GRASS_1, RAND_INF_ZR_GRASS_1 }, + { RC_ZR_GRASS_2, RAND_INF_ZR_GRASS_2 }, + { RC_ZR_GRASS_3, RAND_INF_ZR_GRASS_3 }, + { RC_ZR_GRASS_4, RAND_INF_ZR_GRASS_4 }, + { RC_ZR_GRASS_5, RAND_INF_ZR_GRASS_5 }, + { RC_ZR_GRASS_6, RAND_INF_ZR_GRASS_6 }, + { RC_ZR_GRASS_7, RAND_INF_ZR_GRASS_7 }, + { RC_ZR_GRASS_8, RAND_INF_ZR_GRASS_8 }, + { RC_ZR_GRASS_9, RAND_INF_ZR_GRASS_9 }, + { RC_ZR_GRASS_10, RAND_INF_ZR_GRASS_10 }, + { RC_ZR_GRASS_11, RAND_INF_ZR_GRASS_11 }, + { RC_ZR_GRASS_12, RAND_INF_ZR_GRASS_12 }, + { RC_ZR_NEAR_FREESTANDING_POH_GRASS, RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS }, + // Grotto Grass + { RC_KF_STORMS_GROTTO_GRASS_1, RAND_INF_KF_STORMS_GROTTO_GRASS_1 }, + { RC_KF_STORMS_GROTTO_GRASS_2, RAND_INF_KF_STORMS_GROTTO_GRASS_2 }, + { RC_KF_STORMS_GROTTO_GRASS_3, RAND_INF_KF_STORMS_GROTTO_GRASS_3 }, + { RC_KF_STORMS_GROTTO_GRASS_4, RAND_INF_KF_STORMS_GROTTO_GRASS_4 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3 }, + { RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_1, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_2, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_3, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3 }, + { RC_HF_NEAR_MARKET_GROTTO_GRASS_4, RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4 }, + { RC_HF_OPEN_GROTTO_GRASS_1, RAND_INF_HF_OPEN_GROTTO_GRASS_1 }, + { RC_HF_OPEN_GROTTO_GRASS_2, RAND_INF_HF_OPEN_GROTTO_GRASS_2 }, + { RC_HF_OPEN_GROTTO_GRASS_3, RAND_INF_HF_OPEN_GROTTO_GRASS_3 }, + { RC_HF_OPEN_GROTTO_GRASS_4, RAND_INF_HF_OPEN_GROTTO_GRASS_4 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_1, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_2, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_3, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3 }, + { RC_HF_SOUTHEAST_GROTTO_GRASS_4, RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4 }, + { RC_HF_COW_GROTTO_GRASS_1, RAND_INF_HF_COW_GROTTO_GRASS_1 }, + { RC_HF_COW_GROTTO_GRASS_2, RAND_INF_HF_COW_GROTTO_GRASS_2 }, + { RC_KAK_OPEN_GROTTO_GRASS_1, RAND_INF_KAK_OPEN_GROTTO_GRASS_1 }, + { RC_KAK_OPEN_GROTTO_GRASS_2, RAND_INF_KAK_OPEN_GROTTO_GRASS_2 }, + { RC_KAK_OPEN_GROTTO_GRASS_3, RAND_INF_KAK_OPEN_GROTTO_GRASS_3 }, + { RC_KAK_OPEN_GROTTO_GRASS_4, RAND_INF_KAK_OPEN_GROTTO_GRASS_4 }, + { RC_DMT_STORMS_GROTTO_GRASS_1, RAND_INF_DMT_STORMS_GROTTO_GRASS_1 }, + { RC_DMT_STORMS_GROTTO_GRASS_2, RAND_INF_DMT_STORMS_GROTTO_GRASS_2 }, + { RC_DMT_STORMS_GROTTO_GRASS_3, RAND_INF_DMT_STORMS_GROTTO_GRASS_3 }, + { RC_DMT_STORMS_GROTTO_GRASS_4, RAND_INF_DMT_STORMS_GROTTO_GRASS_4 }, + { RC_DMT_COW_GROTTO_GRASS_1, RAND_INF_DMT_COW_GROTTO_GRASS_1 }, + { RC_DMT_COW_GROTTO_GRASS_2, RAND_INF_DMT_COW_GROTTO_GRASS_2 }, + { RC_DMC_UPPER_GROTTO_GRASS_1, RAND_INF_DMC_UPPER_GROTTO_GRASS_1 }, + { RC_DMC_UPPER_GROTTO_GRASS_2, RAND_INF_DMC_UPPER_GROTTO_GRASS_2 }, + { RC_DMC_UPPER_GROTTO_GRASS_3, RAND_INF_DMC_UPPER_GROTTO_GRASS_3 }, + { RC_DMC_UPPER_GROTTO_GRASS_4, RAND_INF_DMC_UPPER_GROTTO_GRASS_4 }, + { RC_ZR_OPEN_GROTTO_GRASS_1, RAND_INF_ZR_OPEN_GROTTO_GRASS_1 }, + { RC_ZR_OPEN_GROTTO_GRASS_2, RAND_INF_ZR_OPEN_GROTTO_GRASS_2 }, + { RC_ZR_OPEN_GROTTO_GRASS_3, RAND_INF_ZR_OPEN_GROTTO_GRASS_3 }, + { RC_ZR_OPEN_GROTTO_GRASS_4, RAND_INF_ZR_OPEN_GROTTO_GRASS_4 }, + // Dungeon Grass + { RC_DEKU_TREE_LOBBY_GRASS_1, RAND_INF_DEKU_TREE_LOBBY_GRASS_1 }, + { RC_DEKU_TREE_LOBBY_GRASS_2, RAND_INF_DEKU_TREE_LOBBY_GRASS_2 }, + { RC_DEKU_TREE_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_LOBBY_GRASS_3 }, + { RC_DEKU_TREE_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_LOBBY_GRASS_4 }, + { RC_DEKU_TREE_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_LOBBY_GRASS_5 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3 }, + { RC_DEKU_TREE_SLINGSHOT_GRASS_4, RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4 }, + { RC_DEKU_TREE_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3 }, + { RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4 }, + { RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2 }, + { RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1 }, + { RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2 }, + { RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3 }, + { RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS }, + { RC_DODONGOS_CAVERN_BLADE_GRASS, RAND_INF_DODONGOS_CAVERN_BLADE_GRASS }, + { RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS }, + { RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3 }, + // MQ Dungeon Grass + { RC_DEKU_TREE_MQ_LOBBY_GRASS_1, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_2, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_3, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_4, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_5, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_6, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6 }, + { RC_DEKU_TREE_MQ_LOBBY_GRASS_7, RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3 }, + { RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6 }, + { RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_1, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_2, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_3, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3 }, + { RC_DEKU_TREE_MQ_COMPASS_GRASS_4, RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4 }, + { RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2 }, + { RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2 }, + { RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3 }, + { RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4 }, + { RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS }, + { RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS }, + { RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1 }, + { RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3 }, + { RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2 }, + { RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS }, + { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1 }, + { RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3 }, + { RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4 }, + // Shared Dungeon Grass + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7 }, + { RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8 }, + // End Grass { RC_KF_LINKS_HOUSE_POT, RAND_INF_KF_LINKS_HOUSE_POT }, { RC_KF_TWINS_HOUSE_POT_1, RAND_INF_KF_TWINS_HOUSE_POT_1 }, @@ -1836,6 +2186,68 @@ FishIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) { return fishIdentity; } +GrassIdentity Randomizer::IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge) { + struct GrassIdentity grassIdentity; + + grassIdentity.randomizerInf = RAND_INF_MAX; + grassIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + if (sceneNum == SCENE_GROTTOS) { + respawnData = TWO_ACTOR_PARAMS(posX, respawnData); + } else { + // We'll just pretend it's always daytime for our market bushes. + if (sceneNum == SCENE_MARKET_NIGHT) { + sceneNum = SCENE_MARKET_DAY; + + /* + The two bushes by the tree are not in the same spot + between night and day. We'll assume the coordinates + of the daytime bushes so that we can count them as + the same locations. + */ + if (posX == -74) { + posX = -106; + posZ = 277; + } + if (posX == -87) { + posX = -131; + posZ = 225; + } + } + + /* + Same as with Market. ZR has a bush slightly off pos + between Child and Adult. This is to merge them into + a single location. + */ + if (sceneNum == SCENE_ZORAS_RIVER) { + if (posX == 233) { + posX = 231; + posZ = -1478; + } + } + + // The two bushes behind the sign in KF should be separate + // locations between Child and Adult. + if (sceneNum == SCENE_KOKIRI_FOREST && linkAge == 0) { + if (posX == -498 || posX == -523) { + posZ = 0xFF; + } + } + + respawnData = TWO_ACTOR_PARAMS(posX, posZ); + } + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_KUSA, sceneNum, respawnData); + + if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + grassIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + grassIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return grassIdentity; +} + u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { return Rando::Context::GetInstance()->GetOption(randoSettingKey).Get(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 76bde6a4f..13718dac4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -54,6 +54,7 @@ class Randomizer { CowIdentity IdentifyCow(s32 sceneNum, s32 posX, s32 posZ); PotIdentity IdentifyPot(s32 sceneNum, s32 posX, s32 posZ); FishIdentity IdentifyFish(s32 sceneNum, s32 actorParams); + GrassIdentity IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge); GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true); ItemObtainability GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 2c97c50c0..9851f614b 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -294,6 +294,7 @@ typedef enum { RCTYPE_FISH, // Fishes RCTYPE_FREESTANDING, // Freestanding rupees and hearts RCTYPE_FAIRY, // Fairies + RCTYPE_GRASS, // Grass } RandomizerCheckType; typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest; @@ -2848,6 +2849,358 @@ typedef enum { RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + + // Overworld Grass + RC_KF_CHILD_GRASS_1, + RC_KF_CHILD_GRASS_2, + RC_KF_CHILD_GRASS_3, + RC_KF_CHILD_GRASS_4, + RC_KF_CHILD_GRASS_5, + RC_KF_CHILD_GRASS_6, + RC_KF_CHILD_GRASS_7, + RC_KF_CHILD_GRASS_8, + RC_KF_CHILD_GRASS_9, + RC_KF_CHILD_GRASS_10, + RC_KF_CHILD_GRASS_11, + RC_KF_CHILD_GRASS_12, + RC_KF_CHILD_GRASS_MAZE_1, + RC_KF_CHILD_GRASS_MAZE_2, + RC_KF_CHILD_GRASS_MAZE_3, + RC_KF_ADULT_GRASS_1, + RC_KF_ADULT_GRASS_2, + RC_KF_ADULT_GRASS_3, + RC_KF_ADULT_GRASS_4, + RC_KF_ADULT_GRASS_5, + RC_KF_ADULT_GRASS_6, + RC_KF_ADULT_GRASS_7, + RC_KF_ADULT_GRASS_8, + RC_KF_ADULT_GRASS_9, + RC_KF_ADULT_GRASS_10, + RC_KF_ADULT_GRASS_11, + RC_KF_ADULT_GRASS_12, + RC_KF_ADULT_GRASS_13, + RC_KF_ADULT_GRASS_14, + RC_KF_ADULT_GRASS_15, + RC_KF_ADULT_GRASS_16, + RC_KF_ADULT_GRASS_17, + RC_KF_ADULT_GRASS_18, + RC_KF_ADULT_GRASS_19, + RC_KF_ADULT_GRASS_20, + RC_LW_GRASS_1, + RC_LW_GRASS_2, + RC_LW_GRASS_3, + RC_LW_GRASS_4, + RC_LW_GRASS_5, + RC_LW_GRASS_6, + RC_LW_GRASS_7, + RC_LW_GRASS_8, + RC_LW_GRASS_9, + RC_MARKET_GRASS_1, + RC_MARKET_GRASS_2, + RC_MARKET_GRASS_3, + RC_MARKET_GRASS_4, + RC_MARKET_GRASS_5, + RC_MARKET_GRASS_6, + RC_MARKET_GRASS_7, + RC_MARKET_GRASS_8, + RC_HC_GRASS_1, + RC_HC_GRASS_2, + RC_KAK_GRASS_1, + RC_KAK_GRASS_2, + RC_KAK_GRASS_3, + RC_KAK_GRASS_4, + RC_KAK_GRASS_5, + RC_KAK_GRASS_6, + RC_KAK_GRASS_7, + RC_KAK_GRASS_8, + RC_GY_GRASS_1, + RC_GY_GRASS_2, + RC_GY_GRASS_3, + RC_GY_GRASS_4, + RC_GY_GRASS_5, + RC_GY_GRASS_6, + RC_GY_GRASS_7, + RC_GY_GRASS_8, + RC_GY_GRASS_9, + RC_GY_GRASS_10, + RC_GY_GRASS_11, + RC_GY_GRASS_12, + RC_LH_GRASS_1, + RC_LH_GRASS_2, + RC_LH_GRASS_3, + RC_LH_GRASS_4, + RC_LH_GRASS_5, + RC_LH_GRASS_6, + RC_LH_GRASS_7, + RC_LH_GRASS_8, + RC_LH_GRASS_9, + RC_LH_GRASS_10, + RC_LH_GRASS_11, + RC_LH_GRASS_12, + RC_LH_GRASS_13, + RC_LH_GRASS_14, + RC_LH_GRASS_15, + RC_LH_GRASS_16, + RC_LH_GRASS_17, + RC_LH_GRASS_18, + RC_LH_GRASS_19, + RC_LH_GRASS_20, + RC_LH_GRASS_21, + RC_LH_GRASS_22, + RC_LH_GRASS_23, + RC_LH_GRASS_24, + RC_LH_GRASS_25, + RC_LH_GRASS_26, + RC_LH_GRASS_27, + RC_LH_GRASS_28, + RC_LH_GRASS_29, + RC_LH_GRASS_30, + RC_LH_GRASS_31, + RC_LH_GRASS_32, + RC_LH_GRASS_33, + RC_LH_GRASS_34, + RC_LH_GRASS_35, + RC_LH_GRASS_36, + RC_LH_CHILD_GRASS_1, + RC_LH_CHILD_GRASS_2, + RC_LH_CHILD_GRASS_3, + RC_LH_CHILD_GRASS_4, + RC_LH_WARP_PAD_GRASS_1, + RC_LH_WARP_PAD_GRASS_2, + RC_HF_NEAR_KF_GRASS_1, + RC_HF_NEAR_KF_GRASS_2, + RC_HF_NEAR_KF_GRASS_3, + RC_HF_NEAR_KF_GRASS_4, + RC_HF_NEAR_KF_GRASS_5, + RC_HF_NEAR_KF_GRASS_6, + RC_HF_NEAR_KF_GRASS_7, + RC_HF_NEAR_KF_GRASS_8, + RC_HF_NEAR_KF_GRASS_9, + RC_HF_NEAR_KF_GRASS_10, + RC_HF_NEAR_KF_GRASS_11, + RC_HF_NEAR_KF_GRASS_12, + RC_HF_NEAR_MARKET_GRASS_1, + RC_HF_NEAR_MARKET_GRASS_2, + RC_HF_NEAR_MARKET_GRASS_3, + RC_HF_NEAR_MARKET_GRASS_4, + RC_HF_NEAR_MARKET_GRASS_5, + RC_HF_NEAR_MARKET_GRASS_6, + RC_HF_NEAR_MARKET_GRASS_7, + RC_HF_NEAR_MARKET_GRASS_8, + RC_HF_NEAR_MARKET_GRASS_9, + RC_HF_NEAR_MARKET_GRASS_10, + RC_HF_NEAR_MARKET_GRASS_11, + RC_HF_NEAR_MARKET_GRASS_12, + RC_HF_SOUTH_GRASS_1, + RC_HF_SOUTH_GRASS_2, + RC_HF_SOUTH_GRASS_3, + RC_HF_SOUTH_GRASS_4, + RC_HF_SOUTH_GRASS_5, + RC_HF_SOUTH_GRASS_6, + RC_HF_SOUTH_GRASS_7, + RC_HF_SOUTH_GRASS_8, + RC_HF_SOUTH_GRASS_9, + RC_HF_SOUTH_GRASS_10, + RC_HF_SOUTH_GRASS_11, + RC_HF_SOUTH_GRASS_12, + RC_HF_CENTRAL_GRASS_1, + RC_HF_CENTRAL_GRASS_2, + RC_HF_CENTRAL_GRASS_3, + RC_HF_CENTRAL_GRASS_4, + RC_HF_CENTRAL_GRASS_5, + RC_HF_CENTRAL_GRASS_6, + RC_HF_CENTRAL_GRASS_7, + RC_HF_CENTRAL_GRASS_8, + RC_HF_CENTRAL_GRASS_9, + RC_HF_CENTRAL_GRASS_10, + RC_HF_CENTRAL_GRASS_11, + RC_HF_CENTRAL_GRASS_12, + RC_ZR_GRASS_1, + RC_ZR_GRASS_2, + RC_ZR_GRASS_3, + RC_ZR_GRASS_4, + RC_ZR_GRASS_5, + RC_ZR_GRASS_6, + RC_ZR_GRASS_7, + RC_ZR_GRASS_8, + RC_ZR_GRASS_9, + RC_ZR_GRASS_10, + RC_ZR_GRASS_11, + RC_ZR_GRASS_12, + RC_ZR_NEAR_FREESTANDING_POH_GRASS, + // Grotto Grass + RC_KF_STORMS_GROTTO_GRASS_1, + RC_KF_STORMS_GROTTO_GRASS_2, + RC_KF_STORMS_GROTTO_GRASS_3, + RC_KF_STORMS_GROTTO_GRASS_4, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, + RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, + RC_HF_NEAR_MARKET_GROTTO_GRASS_1, + RC_HF_NEAR_MARKET_GROTTO_GRASS_2, + RC_HF_NEAR_MARKET_GROTTO_GRASS_3, + RC_HF_NEAR_MARKET_GROTTO_GRASS_4, + RC_HF_OPEN_GROTTO_GRASS_1, + RC_HF_OPEN_GROTTO_GRASS_2, + RC_HF_OPEN_GROTTO_GRASS_3, + RC_HF_OPEN_GROTTO_GRASS_4, + RC_HF_SOUTHEAST_GROTTO_GRASS_1, + RC_HF_SOUTHEAST_GROTTO_GRASS_2, + RC_HF_SOUTHEAST_GROTTO_GRASS_3, + RC_HF_SOUTHEAST_GROTTO_GRASS_4, + RC_HF_COW_GROTTO_GRASS_1, + RC_HF_COW_GROTTO_GRASS_2, + RC_KAK_OPEN_GROTTO_GRASS_1, + RC_KAK_OPEN_GROTTO_GRASS_2, + RC_KAK_OPEN_GROTTO_GRASS_3, + RC_KAK_OPEN_GROTTO_GRASS_4, + RC_DMT_STORMS_GROTTO_GRASS_1, + RC_DMT_STORMS_GROTTO_GRASS_2, + RC_DMT_STORMS_GROTTO_GRASS_3, + RC_DMT_STORMS_GROTTO_GRASS_4, + RC_DMT_COW_GROTTO_GRASS_1, + RC_DMT_COW_GROTTO_GRASS_2, + RC_DMC_UPPER_GROTTO_GRASS_1, + RC_DMC_UPPER_GROTTO_GRASS_2, + RC_DMC_UPPER_GROTTO_GRASS_3, + RC_DMC_UPPER_GROTTO_GRASS_4, + RC_ZR_OPEN_GROTTO_GRASS_1, + RC_ZR_OPEN_GROTTO_GRASS_2, + RC_ZR_OPEN_GROTTO_GRASS_3, + RC_ZR_OPEN_GROTTO_GRASS_4, + // Dungeon Grass + RC_DEKU_TREE_LOBBY_GRASS_1, + RC_DEKU_TREE_LOBBY_GRASS_2, + RC_DEKU_TREE_LOBBY_GRASS_3, + RC_DEKU_TREE_LOBBY_GRASS_4, + RC_DEKU_TREE_LOBBY_GRASS_5, + RC_DEKU_TREE_SLINGSHOT_GRASS_1, + RC_DEKU_TREE_SLINGSHOT_GRASS_2, + RC_DEKU_TREE_SLINGSHOT_GRASS_3, + RC_DEKU_TREE_SLINGSHOT_GRASS_4, + RC_DEKU_TREE_COMPASS_GRASS_1, + RC_DEKU_TREE_COMPASS_GRASS_2, + RC_DEKU_TREE_BASEMENT_GRASS_1, + RC_DEKU_TREE_BASEMENT_GRASS_2, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, + RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, + RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, + RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, + RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, + RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, + RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, + RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, + RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, + RC_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, + RC_DODONGOS_CAVERN_BLADE_GRASS, + RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, + RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, + RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, + RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, + // MQ Dungeon Grass + RC_DEKU_TREE_MQ_LOBBY_GRASS_1, + RC_DEKU_TREE_MQ_LOBBY_GRASS_2, + RC_DEKU_TREE_MQ_LOBBY_GRASS_3, + RC_DEKU_TREE_MQ_LOBBY_GRASS_4, + RC_DEKU_TREE_MQ_LOBBY_GRASS_5, + RC_DEKU_TREE_MQ_LOBBY_GRASS_6, + RC_DEKU_TREE_MQ_LOBBY_GRASS_7, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, + RC_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, + RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, + RC_DEKU_TREE_MQ_COMPASS_GRASS_1, + RC_DEKU_TREE_MQ_COMPASS_GRASS_2, + RC_DEKU_TREE_MQ_COMPASS_GRASS_3, + RC_DEKU_TREE_MQ_COMPASS_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, + RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, + RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, + RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, + RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, + RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, + RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, + RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, + RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, + RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, + RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, + RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, + RC_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, + RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, + RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, + RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, + // Shared Dungeon Grass + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, + RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, + // End Grass + RC_MAX } RandomizerCheck; @@ -4931,8 +5284,23 @@ typedef enum { RHT_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, RHT_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RHT_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + // GRASS + RHT_KF_GRASS, + RHT_LW_GRASS, + RHT_MARKET_GRASS, + RHT_HC_GRASS, + RHT_KAK_GRASS, + RHT_GY_GRASS, + RHT_LH_GRASS, + RHT_HF_GRASS, + RHT_ZR_GRASS, + RHT_GROTTO_GRASS, + RHT_DEKU_TREE_GRASS, + RHT_DODONGOS_CAVERN_GRASS, + RHT_BOTTOM_OF_THE_WELL_GRASS, + RHT_JABU_JABUS_BELLY_GRASS, // MAX - RHT_MAX + RHT_MAX, } RandomizerHintTextKey; @@ -5223,6 +5591,7 @@ typedef enum { RSK_SHUFFLE_FREESTANDING, RSK_SHUFFLE_FAIRIES, RSK_LOCK_OVERWORLD_DOORS, + RSK_SHUFFLE_GRASS, RSK_MAX } RandomizerSettingKey; @@ -5569,6 +5938,14 @@ typedef enum { RO_SHUFFLE_POTS_ALL, } RandoOptionShufflePots; +// Shuffle Grass settings (off, dungeons, overworld, all) +typedef enum { + RO_SHUFFLE_GRASS_OFF, + RO_SHUFFLE_GRASS_DUNGEONS, + RO_SHUFFLE_GRASS_OVERWORLD, + RO_SHUFFLE_GRASS_ALL, +} RandoOptionShuffleGrass; + //Link's Pocket Settings (dungeon reward, advancement, anything, nothing) typedef enum { RO_LINKS_POCKET_DUNGEON_REWARD, @@ -5664,6 +6041,11 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; +typedef struct GrassIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} GrassIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW, diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index b8d435fd8..9333913a4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -172,6 +172,7 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (location.GetRCType() != RCTYPE_BEEHIVE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_COW || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_POT || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_GRASS || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGrass"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_FISH || ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) && (location.GetRCType() != RCTYPE_ADULT_TRADE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), RO_GENERIC_NO)) && diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index aa6b8b608..7d531cb24 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -59,6 +59,8 @@ bool showWeirdEgg; bool showGerudoCard; bool showOverworldPots; bool showDungeonPots; +bool showOverworldGrass; +bool showDungeonGrass; bool showFrogSongRupees; bool showFairies; bool showStartingMapsCompasses; @@ -1269,11 +1271,32 @@ void LoadSettings() { showDungeonPots = false; break; } + + switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_GRASS)) { + case RO_SHUFFLE_GRASS_ALL: + showOverworldGrass = true; + showDungeonGrass = true; + break; + case RO_SHUFFLE_GRASS_OVERWORLD: + showOverworldGrass = true; + showDungeonGrass = false; + break; + case RO_SHUFFLE_GRASS_DUNGEONS: + showOverworldGrass = false; + showDungeonGrass = true; + break; + default: + showOverworldGrass = false; + showDungeonGrass = false; + break; + } } else { // Vanilla showOverworldTokens = true; showDungeonTokens = true; showOverworldPots = false; showDungeonPots = false; + showOverworldGrass = false; + showDungeonGrass = false; } fortressFast = false; @@ -1354,6 +1377,9 @@ bool IsCheckShuffled(RandomizerCheck rc) { (loc->GetRCType() != RCTYPE_POT || (showOverworldPots && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonPots && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_GRASS || + (showOverworldGrass && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonGrass && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_COW || showCows) && (loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && (loc->GetRCType() != RCTYPE_FREESTANDING || diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 8c4d05a4f..f061be660 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1349,6 +1349,357 @@ typedef enum { RAND_INF_ADULT_TRADES_HAS_EYEDROPS, RAND_INF_ADULT_TRADES_HAS_CLAIM_CHECK, + + // Overworld Grass + RAND_INF_KF_CHILD_GRASS_1, + RAND_INF_KF_CHILD_GRASS_2, + RAND_INF_KF_CHILD_GRASS_3, + RAND_INF_KF_CHILD_GRASS_4, + RAND_INF_KF_CHILD_GRASS_5, + RAND_INF_KF_CHILD_GRASS_6, + RAND_INF_KF_CHILD_GRASS_7, + RAND_INF_KF_CHILD_GRASS_8, + RAND_INF_KF_CHILD_GRASS_9, + RAND_INF_KF_CHILD_GRASS_10, + RAND_INF_KF_CHILD_GRASS_11, + RAND_INF_KF_CHILD_GRASS_12, + RAND_INF_KF_CHILD_GRASS_MAZE_1, + RAND_INF_KF_CHILD_GRASS_MAZE_2, + RAND_INF_KF_CHILD_GRASS_MAZE_3, + RAND_INF_KF_ADULT_GRASS_1, + RAND_INF_KF_ADULT_GRASS_2, + RAND_INF_KF_ADULT_GRASS_3, + RAND_INF_KF_ADULT_GRASS_4, + RAND_INF_KF_ADULT_GRASS_5, + RAND_INF_KF_ADULT_GRASS_6, + RAND_INF_KF_ADULT_GRASS_7, + RAND_INF_KF_ADULT_GRASS_8, + RAND_INF_KF_ADULT_GRASS_9, + RAND_INF_KF_ADULT_GRASS_10, + RAND_INF_KF_ADULT_GRASS_11, + RAND_INF_KF_ADULT_GRASS_12, + RAND_INF_KF_ADULT_GRASS_13, + RAND_INF_KF_ADULT_GRASS_14, + RAND_INF_KF_ADULT_GRASS_15, + RAND_INF_KF_ADULT_GRASS_16, + RAND_INF_KF_ADULT_GRASS_17, + RAND_INF_KF_ADULT_GRASS_18, + RAND_INF_KF_ADULT_GRASS_19, + RAND_INF_KF_ADULT_GRASS_20, + RAND_INF_LW_GRASS_1, + RAND_INF_LW_GRASS_2, + RAND_INF_LW_GRASS_3, + RAND_INF_LW_GRASS_4, + RAND_INF_LW_GRASS_5, + RAND_INF_LW_GRASS_6, + RAND_INF_LW_GRASS_7, + RAND_INF_LW_GRASS_8, + RAND_INF_LW_GRASS_9, + RAND_INF_MARKET_GRASS_1, + RAND_INF_MARKET_GRASS_2, + RAND_INF_MARKET_GRASS_3, + RAND_INF_MARKET_GRASS_4, + RAND_INF_MARKET_GRASS_5, + RAND_INF_MARKET_GRASS_6, + RAND_INF_MARKET_GRASS_7, + RAND_INF_MARKET_GRASS_8, + RAND_INF_HC_GRASS_1, + RAND_INF_HC_GRASS_2, + RAND_INF_KAK_GRASS_1, + RAND_INF_KAK_GRASS_2, + RAND_INF_KAK_GRASS_3, + RAND_INF_KAK_GRASS_4, + RAND_INF_KAK_GRASS_5, + RAND_INF_KAK_GRASS_6, + RAND_INF_KAK_GRASS_7, + RAND_INF_KAK_GRASS_8, + RAND_INF_GY_GRASS_1, + RAND_INF_GY_GRASS_2, + RAND_INF_GY_GRASS_3, + RAND_INF_GY_GRASS_4, + RAND_INF_GY_GRASS_5, + RAND_INF_GY_GRASS_6, + RAND_INF_GY_GRASS_7, + RAND_INF_GY_GRASS_8, + RAND_INF_GY_GRASS_9, + RAND_INF_GY_GRASS_10, + RAND_INF_GY_GRASS_11, + RAND_INF_GY_GRASS_12, + RAND_INF_LH_GRASS_1, + RAND_INF_LH_GRASS_2, + RAND_INF_LH_GRASS_3, + RAND_INF_LH_GRASS_4, + RAND_INF_LH_GRASS_5, + RAND_INF_LH_GRASS_6, + RAND_INF_LH_GRASS_7, + RAND_INF_LH_GRASS_8, + RAND_INF_LH_GRASS_9, + RAND_INF_LH_GRASS_10, + RAND_INF_LH_GRASS_11, + RAND_INF_LH_GRASS_12, + RAND_INF_LH_GRASS_13, + RAND_INF_LH_GRASS_14, + RAND_INF_LH_GRASS_15, + RAND_INF_LH_GRASS_16, + RAND_INF_LH_GRASS_17, + RAND_INF_LH_GRASS_18, + RAND_INF_LH_GRASS_19, + RAND_INF_LH_GRASS_20, + RAND_INF_LH_GRASS_21, + RAND_INF_LH_GRASS_22, + RAND_INF_LH_GRASS_23, + RAND_INF_LH_GRASS_24, + RAND_INF_LH_GRASS_25, + RAND_INF_LH_GRASS_26, + RAND_INF_LH_GRASS_27, + RAND_INF_LH_GRASS_28, + RAND_INF_LH_GRASS_29, + RAND_INF_LH_GRASS_30, + RAND_INF_LH_GRASS_31, + RAND_INF_LH_GRASS_32, + RAND_INF_LH_GRASS_33, + RAND_INF_LH_GRASS_34, + RAND_INF_LH_GRASS_35, + RAND_INF_LH_GRASS_36, + RAND_INF_LH_CHILD_GRASS_1, + RAND_INF_LH_CHILD_GRASS_2, + RAND_INF_LH_CHILD_GRASS_3, + RAND_INF_LH_CHILD_GRASS_4, + RAND_INF_LH_WARP_PAD_GRASS_1, + RAND_INF_LH_WARP_PAD_GRASS_2, + RAND_INF_HF_NEAR_KF_GRASS_1, + RAND_INF_HF_NEAR_KF_GRASS_2, + RAND_INF_HF_NEAR_KF_GRASS_3, + RAND_INF_HF_NEAR_KF_GRASS_4, + RAND_INF_HF_NEAR_KF_GRASS_5, + RAND_INF_HF_NEAR_KF_GRASS_6, + RAND_INF_HF_NEAR_KF_GRASS_7, + RAND_INF_HF_NEAR_KF_GRASS_8, + RAND_INF_HF_NEAR_KF_GRASS_9, + RAND_INF_HF_NEAR_KF_GRASS_10, + RAND_INF_HF_NEAR_KF_GRASS_11, + RAND_INF_HF_NEAR_KF_GRASS_12, + RAND_INF_HF_NEAR_MARKET_GRASS_1, + RAND_INF_HF_NEAR_MARKET_GRASS_2, + RAND_INF_HF_NEAR_MARKET_GRASS_3, + RAND_INF_HF_NEAR_MARKET_GRASS_4, + RAND_INF_HF_NEAR_MARKET_GRASS_5, + RAND_INF_HF_NEAR_MARKET_GRASS_6, + RAND_INF_HF_NEAR_MARKET_GRASS_7, + RAND_INF_HF_NEAR_MARKET_GRASS_8, + RAND_INF_HF_NEAR_MARKET_GRASS_9, + RAND_INF_HF_NEAR_MARKET_GRASS_10, + RAND_INF_HF_NEAR_MARKET_GRASS_11, + RAND_INF_HF_NEAR_MARKET_GRASS_12, + RAND_INF_HF_SOUTH_GRASS_1, + RAND_INF_HF_SOUTH_GRASS_2, + RAND_INF_HF_SOUTH_GRASS_3, + RAND_INF_HF_SOUTH_GRASS_4, + RAND_INF_HF_SOUTH_GRASS_5, + RAND_INF_HF_SOUTH_GRASS_6, + RAND_INF_HF_SOUTH_GRASS_7, + RAND_INF_HF_SOUTH_GRASS_8, + RAND_INF_HF_SOUTH_GRASS_9, + RAND_INF_HF_SOUTH_GRASS_10, + RAND_INF_HF_SOUTH_GRASS_11, + RAND_INF_HF_SOUTH_GRASS_12, + RAND_INF_HF_CENTRAL_GRASS_1, + RAND_INF_HF_CENTRAL_GRASS_2, + RAND_INF_HF_CENTRAL_GRASS_3, + RAND_INF_HF_CENTRAL_GRASS_4, + RAND_INF_HF_CENTRAL_GRASS_5, + RAND_INF_HF_CENTRAL_GRASS_6, + RAND_INF_HF_CENTRAL_GRASS_7, + RAND_INF_HF_CENTRAL_GRASS_8, + RAND_INF_HF_CENTRAL_GRASS_9, + RAND_INF_HF_CENTRAL_GRASS_10, + RAND_INF_HF_CENTRAL_GRASS_11, + RAND_INF_HF_CENTRAL_GRASS_12, + RAND_INF_ZR_GRASS_1, + RAND_INF_ZR_GRASS_2, + RAND_INF_ZR_GRASS_3, + RAND_INF_ZR_GRASS_4, + RAND_INF_ZR_GRASS_5, + RAND_INF_ZR_GRASS_6, + RAND_INF_ZR_GRASS_7, + RAND_INF_ZR_GRASS_8, + RAND_INF_ZR_GRASS_9, + RAND_INF_ZR_GRASS_10, + RAND_INF_ZR_GRASS_11, + RAND_INF_ZR_GRASS_12, + RAND_INF_ZR_NEAR_FREESTANDING_POH_GRASS, + // Grotto Grass + RAND_INF_KF_STORMS_GROTTO_GRASS_1, + RAND_INF_KF_STORMS_GROTTO_GRASS_2, + RAND_INF_KF_STORMS_GROTTO_GRASS_3, + RAND_INF_KF_STORMS_GROTTO_GRASS_4, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, + RAND_INF_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_1, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_2, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_3, + RAND_INF_HF_NEAR_MARKET_GROTTO_GRASS_4, + RAND_INF_HF_OPEN_GROTTO_GRASS_1, + RAND_INF_HF_OPEN_GROTTO_GRASS_2, + RAND_INF_HF_OPEN_GROTTO_GRASS_3, + RAND_INF_HF_OPEN_GROTTO_GRASS_4, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_1, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_2, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_3, + RAND_INF_HF_SOUTHEAST_GROTTO_GRASS_4, + RAND_INF_HF_COW_GROTTO_GRASS_1, + RAND_INF_HF_COW_GROTTO_GRASS_2, + RAND_INF_KAK_OPEN_GROTTO_GRASS_1, + RAND_INF_KAK_OPEN_GROTTO_GRASS_2, + RAND_INF_KAK_OPEN_GROTTO_GRASS_3, + RAND_INF_KAK_OPEN_GROTTO_GRASS_4, + RAND_INF_DMT_STORMS_GROTTO_GRASS_1, + RAND_INF_DMT_STORMS_GROTTO_GRASS_2, + RAND_INF_DMT_STORMS_GROTTO_GRASS_3, + RAND_INF_DMT_STORMS_GROTTO_GRASS_4, + RAND_INF_DMT_COW_GROTTO_GRASS_1, + RAND_INF_DMT_COW_GROTTO_GRASS_2, + RAND_INF_DMC_UPPER_GROTTO_GRASS_1, + RAND_INF_DMC_UPPER_GROTTO_GRASS_2, + RAND_INF_DMC_UPPER_GROTTO_GRASS_3, + RAND_INF_DMC_UPPER_GROTTO_GRASS_4, + RAND_INF_ZR_OPEN_GROTTO_GRASS_1, + RAND_INF_ZR_OPEN_GROTTO_GRASS_2, + RAND_INF_ZR_OPEN_GROTTO_GRASS_3, + RAND_INF_ZR_OPEN_GROTTO_GRASS_4, + // Dungeon Grass + RAND_INF_DEKU_TREE_LOBBY_GRASS_1, + RAND_INF_DEKU_TREE_LOBBY_GRASS_2, + RAND_INF_DEKU_TREE_LOBBY_GRASS_3, + RAND_INF_DEKU_TREE_LOBBY_GRASS_4, + RAND_INF_DEKU_TREE_LOBBY_GRASS_5, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_1, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_2, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_3, + RAND_INF_DEKU_TREE_SLINGSHOT_GRASS_4, + RAND_INF_DEKU_TREE_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_3, + RAND_INF_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, + RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, + RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_1, + RAND_INF_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_1, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_2, + RAND_INF_DEKU_TREE_BEFORE_BOSS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_FIRST_BRIDGE_GRASS, + RAND_INF_DODONGOS_CAVERN_BLADE_GRASS, + RAND_INF_DODONGOS_CAVERN_SINGLE_EYE_GRASS, + RAND_INF_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_3, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_4, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_5, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_6, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, + // MQ Dungeon Grass + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_1, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_2, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_3, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_4, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_5, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_6, + RAND_INF_DEKU_TREE_MQ_LOBBY_GRASS_7, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_1, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_2, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_3, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_5, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_6, + RAND_INF_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_3, + RAND_INF_DEKU_TREE_MQ_COMPASS_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_LARVAE_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_4, + RAND_INF_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, + RAND_INF_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_1, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_2, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_3, + RAND_INF_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, + RAND_INF_DODONGOS_CAVERN_MQ_ARMOS_GRASS, + RAND_INF_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, + RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_1, + RAND_INF_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_PIT_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, + RAND_INF_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, + RAND_INF_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_BASEMENT_BOOMERANG_GRASS, + RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_1, + RAND_INF_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, + RAND_INF_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, + // Shared Dungeon Grass + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_1, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_2, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_3, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_4, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_5, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_6, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7, + RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8, + // End Grass // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16) RAND_INF_MAX, diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 39f367a1e..ba049b32c 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -209,6 +209,7 @@ void Settings::CreateOptions() { OPT_BOOL(RSK_SHUFFLE_WEIRD_EGG, "Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]); OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]); OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF); + OPT_U8(RSK_SHUFFLE_GRASS, "Shuffle Grass", {"Off", "Dungeons", "Overworld", "All Grass/Bushes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleGrass"), mOptionDescriptions[RSK_SHUFFLE_GRASS], WidgetType::Combobox, RO_SHUFFLE_GRASS_OFF); OPT_BOOL(RSK_SHUFFLE_FISHING_POLE, "Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]); OPT_U8(RSK_SHUFFLE_MERCHANTS, "Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE); OPT_U8(RSK_MERCHANT_PRICES, "Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE); @@ -677,6 +678,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_100_GS_REWARD], &mOptions[RSK_SHUFFLE_BOSS_SOULS], &mOptions[RSK_SHUFFLE_FAIRIES], + &mOptions[RSK_SHUFFLE_GRASS], }, WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Dungeon Items", { &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index a456089a3..1ce04687c 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -51,6 +51,7 @@ class StaticData { static void RegisterFairyLocations(); static void RegisterPotLocations(); static void RegisterFreestandingLocations(); + static void RegisterGrassLocations(); static void InitHashMaps(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; diff --git a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c index 49623c850..23146f376 100644 --- a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c +++ b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.c @@ -10,6 +10,7 @@ #include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/object_kusa/object_kusa.h" #include "vt.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_THROW_ONLY) @@ -126,6 +127,10 @@ s32 EnKusa_SnapToFloor(EnKusa* this, PlayState* play, f32 yOffset) { void EnKusa_DropCollectible(EnKusa* this, PlayState* play) { s16 dropParams; + if (!GameInteractor_Should(VB_GRASS_DROP_ITEM, true, this)) { + return; + } + switch (this->actor.params & 3) { case ENKUSA_TYPE_0: case ENKUSA_TYPE_2: @@ -138,11 +143,9 @@ void EnKusa_DropCollectible(EnKusa* this, PlayState* play) { break; case ENKUSA_TYPE_1: if (CVarGetInteger(CVAR_ENHANCEMENT("NoRandomDrops"), 0)) { - } - else if (CVarGetInteger(CVAR_ENHANCEMENT("NoHeartDrops"), 0)) { + } else if (CVarGetInteger(CVAR_ENHANCEMENT("NoHeartDrops"), 0)) { Item_DropCollectible(play, &this->actor.world.pos, ITEM00_SEEDS); - } - else if (Rand_ZeroOne() < 0.5f) { + } else if (Rand_ZeroOne() < 0.5f) { Item_DropCollectible(play, &this->actor.world.pos, ITEM00_SEEDS); } else { Item_DropCollectible(play, &this->actor.world.pos, ITEM00_HEART); @@ -193,8 +196,8 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) { scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) & 7; - EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, - 80, KAKERA_COLOR_NONE, OBJECT_GAMEPLAY_KEEP, gCuttableShrubStalkDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 80, + KAKERA_COLOR_NONE, OBJECT_GAMEPLAY_KEEP, gCuttableShrubStalkDL); pos.x = this->actor.world.pos.x + (dir->x * this->actor.scale.x * 40.0f); pos.y = this->actor.world.pos.y + (dir->y * this->actor.scale.y * 40.0f) + 10.0f; @@ -206,8 +209,8 @@ void EnKusa_SpawnFragments(EnKusa* this, PlayState* play) { scaleIndex = (s32)(Rand_ZeroOne() * 111.1f) % 7; - EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, - 80, KAKERA_COLOR_NONE, OBJECT_GAMEPLAY_KEEP, gCuttableShrubTipDL); + EffectSsKakera_Spawn(play, &pos, &velocity, &pos, -100, 64, 40, 3, 0, sFragmentScales[scaleIndex], 0, 0, 80, + KAKERA_COLOR_NONE, OBJECT_GAMEPLAY_KEEP, gCuttableShrubTipDL); } } @@ -215,8 +218,9 @@ void EnKusa_SpawnBugs(EnKusa* this, PlayState* play) { s32 i; for (i = 0; i < 3; i++) { - Actor* bug = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, - this->actor.world.pos.y, this->actor.world.pos.z, 0, Rand_ZeroOne() * 0xFFFF, 0, 1, true); + Actor* bug = + Actor_Spawn(&play->actorCtx, play, ACTOR_EN_INSECT, this->actor.world.pos.x, this->actor.world.pos.y, + this->actor.world.pos.z, 0, Rand_ZeroOne() * 0xFFFF, 0, 1, true); if (bug == NULL) { break; @@ -288,6 +292,10 @@ void EnKusa_WaitObject(EnKusa* this, PlayState* play) { EnKusa_SetupMain(this); } + if (!GameInteractor_Should(VB_GRASS_SETUP_DRAW, true, this)) { + return; + } + this->actor.draw = EnKusa_Draw; this->actor.objBankIndex = this->objBankIndex; this->actor.flags &= ~ACTOR_FLAG_UPDATE_CULLING_DISABLED; diff --git a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h index f1e9f24d7..6db50aa28 100644 --- a/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h +++ b/soh/src/overlays/actors/ovl_En_Kusa/z_en_kusa.h @@ -20,6 +20,7 @@ typedef struct EnKusa { /* 0x0150 */ ColliderCylinder collider; /* 0x019C */ s16 timer; /* 0x019E */ s8 objBankIndex; + /* */ GrassIdentity grassIdentity; } EnKusa; // size = 0x01A0 #endif