summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEblo <7004497+Eblo@users.noreply.github.com>2025-11-20 13:33:08 -0500
committerGitHub <noreply@github.com>2025-11-20 13:33:08 -0500
commitb5fed649cd8e7bc0e268ea4fedbfc92ab6ccfa31 (patch)
tree67f7b6693dadc6f8650f0810df0b12cbf6a81a83
parenteec21ccddd8b65ff9eca67a32c0d33a8f0c881c5 (diff)
Convert mundane shuffles to ObjectExtension (#1297)
* Convert pot shuffle to ActorExtension * Convert crate shuffle to ActorExtension * Convert barrel shuffle to ActorExtension * Use ObjectExtension for mundane checks * Convert grass to ObjectExtension Add two missed grass checks in Woods of Mystery * Convert cows to ObjectExtension * Fix cow relocations * Convert freestandings to ObjectExtension * Convert remaining snowballs to use ActorListIndex * Wrong ID for one snowball * Apply feedback, document how identification works
-rw-r--r--mm/2s2h/GameInteractor/GameInteractor.h2
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ActorBehavior.cpp8
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ActorBehavior.h4
-rw-r--r--mm/2s2h/Rando/ActorBehavior/EnCow.cpp144
-rw-r--r--mm/2s2h/Rando/ActorBehavior/EnItem00.cpp133
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp1259
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp239
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjSnowball.cpp118
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp113
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp656
-rw-r--r--mm/2s2h/Rando/Logic/Regions/South.cpp2
-rw-r--r--mm/2s2h/Rando/StaticData/Checks.cpp2
-rw-r--r--mm/2s2h/Rando/Types.h2
-rw-r--r--mm/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c3
-rw-r--r--mm/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c5
15 files changed, 954 insertions, 1736 deletions
diff --git a/mm/2s2h/GameInteractor/GameInteractor.h b/mm/2s2h/GameInteractor/GameInteractor.h
index 42ba0abab..5ca04dadd 100644
--- a/mm/2s2h/GameInteractor/GameInteractor.h
+++ b/mm/2s2h/GameInteractor/GameInteractor.h
@@ -260,6 +260,8 @@ typedef enum {
VB_ENEMY_DROP_COLLECTIBLE,
VB_DRAW_SLIME_RANDO_ITEM,
VB_ENABLE_OBJECT_DEPENDENCY,
+ VB_OBJ_MURE2_SET_CHILD_ROOM,
+ VB_OBJ_MURE3_DROP_COLLECTIBLE,
} GIVanillaBehavior;
typedef enum {
diff --git a/mm/2s2h/Rando/ActorBehavior/ActorBehavior.cpp b/mm/2s2h/Rando/ActorBehavior/ActorBehavior.cpp
index 465d6f132..4689fc867 100644
--- a/mm/2s2h/Rando/ActorBehavior/ActorBehavior.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ActorBehavior.cpp
@@ -30,13 +30,13 @@ void MiscVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list opti
}
}
-RandoCheckId Rando::ActorBehavior::GetActorRandoCheckId(Actor* actor) {
- const ActorRandoCheckId* actorRandoCheckId = ObjectExtension::GetInstance().Get<ActorRandoCheckId>(actor);
+RandoCheckId Rando::ActorBehavior::GetObjectRandoCheckId(void* object) {
+ const ActorRandoCheckId* actorRandoCheckId = ObjectExtension::GetInstance().Get<ActorRandoCheckId>(object);
return actorRandoCheckId != nullptr ? actorRandoCheckId->randoCheckId : RC_UNKNOWN;
}
-void Rando::ActorBehavior::SetActorRandoCheckId(const Actor* actor, RandoCheckId rc) {
- ObjectExtension::GetInstance().Set<ActorRandoCheckId>(actor, ActorRandoCheckId{ rc });
+void Rando::ActorBehavior::SetObjectRandoCheckId(const void* object, RandoCheckId rc) {
+ ObjectExtension::GetInstance().Set<ActorRandoCheckId>(object, ActorRandoCheckId{ rc });
}
// Entry point for the module, run once on game boot
diff --git a/mm/2s2h/Rando/ActorBehavior/ActorBehavior.h b/mm/2s2h/Rando/ActorBehavior/ActorBehavior.h
index 40e0993aa..019a08a44 100644
--- a/mm/2s2h/Rando/ActorBehavior/ActorBehavior.h
+++ b/mm/2s2h/Rando/ActorBehavior/ActorBehavior.h
@@ -10,8 +10,8 @@ namespace ActorBehavior {
void Init();
void OnFileLoad();
-RandoCheckId GetActorRandoCheckId(Actor* actor);
-void SetActorRandoCheckId(const Actor* actor, RandoCheckId rc);
+RandoCheckId GetObjectRandoCheckId(void* actor);
+void SetObjectRandoCheckId(const void* object, RandoCheckId rc);
void InitDmChar01Behavior();
void InitDmChar05Behavior();
diff --git a/mm/2s2h/Rando/ActorBehavior/EnCow.cpp b/mm/2s2h/Rando/ActorBehavior/EnCow.cpp
index cbd93de7f..854b04f63 100644
--- a/mm/2s2h/Rando/ActorBehavior/EnCow.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/EnCow.cpp
@@ -1,63 +1,77 @@
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
+#include "2s2h/ObjectExtension/ActorListIndex.h"
extern "C" {
#include "variables.h"
#include "overlays/actors/ovl_En_Cow/z_en_cow.h"
}
-#define IS_AT(xx, zz) (actor->home.pos.x == xx && actor->home.pos.z == zz)
+std::map<std::tuple<s16, s16, s16>, RandoCheckId> cowMap = {
+ { { SCENE_REDEAD, 9, 0 }, RC_BENEATH_THE_WELL_COW },
+ { { SCENE_F01, 0, 7 }, RC_ROMANI_RANCH_FIELD_COW_ENTRANCE },
+ { { SCENE_F01, 0, 8 }, RC_ROMANI_RANCH_FIELD_COW_NEAR_HOUSE_BACK },
+ { { SCENE_F01, 0, 9 }, RC_ROMANI_RANCH_FIELD_COW_NEAR_HOUSE_FRONT },
+ { { SCENE_OMOYA, 0, 5 }, RC_ROMANI_RANCH_BARN_COW_MIDDLE },
+ { { SCENE_OMOYA, 0, 6 }, RC_ROMANI_RANCH_BARN_COW_LEFT },
+ { { SCENE_OMOYA, 0, 7 }, RC_ROMANI_RANCH_BARN_COW_RIGHT },
+ { { SCENE_KAKUSIANA, 10, 3 }, RC_GREAT_BAY_COAST_COW_BACK },
+ { { SCENE_KAKUSIANA, 10, 7 }, RC_GREAT_BAY_COAST_COW_FRONT },
+};
-RandoCheckId IdentifyCow(Actor* actor) {
- RandoCheckId randoCheckId = RC_UNKNOWN;
- s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_UNK_3].data;
- switch (gPlayState->sceneId) {
- case SCENE_REDEAD:
- randoCheckId = RC_BENEATH_THE_WELL_COW;
- break;
- case SCENE_F01:
- if (IS_AT(1947.0f, 1152.0f)) {
- randoCheckId = RC_ROMANI_RANCH_FIELD_COW_ENTRANCE;
- } else if (IS_AT(1126.0f, -1527.0f)) {
- randoCheckId = RC_ROMANI_RANCH_FIELD_COW_NEAR_HOUSE_BACK;
- } else if (IS_AT(1086.0f, -1290.0f)) {
- randoCheckId = RC_ROMANI_RANCH_FIELD_COW_NEAR_HOUSE_FRONT;
- }
- break;
- case SCENE_OMOYA:
- if (IS_AT(-311.0f, -97.0f)) {
- randoCheckId = RC_ROMANI_RANCH_BARN_COW_MIDDLE;
- } else if (IS_AT(-82.0f, -127.0f)) {
- randoCheckId = RC_ROMANI_RANCH_BARN_COW_LEFT;
- } else if (IS_AT(-83.0f, -32.0f)) {
- randoCheckId = RC_ROMANI_RANCH_BARN_COW_RIGHT;
+void Rando::ActorBehavior::InitEnCowBehavior() {
+ // Identify cow based on scene ID, room, and actor list index
+ COND_ID_HOOK(ShouldActorInit, ACTOR_EN_COW, IS_RANDO, [](Actor* actor, bool* should) {
+ RandoCheckId randoCheckId = RC_UNKNOWN;
+
+ s16 actorListIndex = GetActorListIndex(actor);
+ auto it = cowMap.find({ gPlayState->sceneId, gPlayState->roomCtx.curRoom.num, actorListIndex });
+ if (it != cowMap.end()) {
+ randoCheckId = it->second;
+ // Adjust for Termina Field cow grotto
+ if (gPlayState->sceneId == SCENE_KAKUSIANA && gSaveContext.respawn[RESPAWN_MODE_UNK_3].data == 31) {
+ randoCheckId = (RandoCheckId)(randoCheckId + (RC_TERMINA_FIELD_COW_BACK - RC_GREAT_BAY_COAST_COW_BACK));
}
- break;
- case SCENE_KAKUSIANA:
- if (respawnData == -1) {
- if (IS_AT(2394.0f, 907.0f)) {
- randoCheckId = RC_GREAT_BAY_COAST_COW_BACK;
- }
- if (IS_AT(2466.0f, 952.0f)) {
- randoCheckId = RC_GREAT_BAY_COAST_COW_FRONT;
- }
+
+ if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
+ return;
}
- if (respawnData == 31) {
- if (IS_AT(2394.0f, 907.0f)) {
- randoCheckId = RC_TERMINA_FIELD_COW_BACK;
- }
- if (IS_AT(2466.0f, 952.0f)) {
- randoCheckId = RC_TERMINA_FIELD_COW_FRONT;
- }
+
+ SetObjectRandoCheckId(actor, randoCheckId);
+
+ switch (randoCheckId) {
+ case RC_ROMANI_RANCH_BARN_COW_LEFT:
+ actor->world.pos.x = -470.0f;
+ actor->world.pos.y = 1.0f;
+ actor->world.pos.z = 53.0f;
+ actor->shape.rot.y = 7116.0f;
+ break;
+ case RC_ROMANI_RANCH_BARN_COW_RIGHT:
+ actor->world.pos.x = -208.0f;
+ actor->world.pos.y = 0.0f;
+ actor->world.pos.z = 87.0f;
+ actor->shape.rot.y = -32768.0f;
+ break;
+ case RC_GREAT_BAY_COAST_COW_FRONT:
+ case RC_TERMINA_FIELD_COW_FRONT:
+ actor->world.pos.x = 2503.0f;
+ actor->world.pos.y = 0.0f;
+ actor->world.pos.z = 907.0f;
+ actor->shape.rot.y = -5085.0f;
+ break;
+ case RC_GREAT_BAY_COAST_COW_BACK:
+ case RC_TERMINA_FIELD_COW_BACK:
+ actor->world.pos.x = 2269.0f;
+ actor->world.pos.y = 0.0f;
+ actor->world.pos.z = 907.0f;
+ actor->shape.rot.y = 2950.0f;
+ break;
+ default:
+ break;
}
- break;
- default:
- break;
- }
- return randoCheckId;
-}
+ }
+ });
-void Rando::ActorBehavior::InitEnCowBehavior() {
COND_VB_SHOULD(VB_GIVE_ITEM_FROM_COW, IS_RANDO, {
// Original Should is the Range check, if it fails just Return.
Actor* actor = va_arg(args, Actor*);
@@ -66,7 +80,7 @@ void Rando::ActorBehavior::InitEnCowBehavior() {
*should = false;
return;
}
- RandoCheckId randoCheckId = IdentifyCow(actor);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(actor);
if (randoCheckId == RC_UNKNOWN) {
*should = true;
@@ -90,38 +104,4 @@ void Rando::ActorBehavior::InitEnCowBehavior() {
}
*should = gPlayState->msgCtx.songPlayed == OCARINA_SONG_EPONAS;
});
-
- COND_ID_HOOK(ShouldActorInit, ACTOR_EN_COW, IS_RANDO, [](Actor* refActor, bool* should) {
- RandoCheckId randoCheckId = IdentifyCow(refActor);
- switch (randoCheckId) {
- case RC_ROMANI_RANCH_BARN_COW_LEFT:
- refActor->world.pos.x = -470.0f;
- refActor->world.pos.y = 1.0f;
- refActor->world.pos.z = 53.0f;
- refActor->shape.rot.y = 7116.0f;
- break;
- case RC_ROMANI_RANCH_BARN_COW_RIGHT:
- refActor->world.pos.x = -208.0f;
- refActor->world.pos.y = 0.0f;
- refActor->world.pos.z = 87.0f;
- refActor->shape.rot.y = -32768.0f;
- break;
- case RC_GREAT_BAY_COAST_COW_FRONT:
- case RC_TERMINA_FIELD_COW_FRONT:
- refActor->world.pos.x = 2503.0f;
- refActor->world.pos.y = 0.0f;
- refActor->world.pos.z = 907.0f;
- refActor->shape.rot.y = -5085.0f;
- break;
- case RC_GREAT_BAY_COAST_COW_BACK:
- case RC_TERMINA_FIELD_COW_BACK:
- refActor->world.pos.x = 2269.0f;
- refActor->world.pos.y = 0.0f;
- refActor->world.pos.z = 907.0f;
- refActor->shape.rot.y = 2950.0f;
- break;
- default:
- break;
- }
- });
}
diff --git a/mm/2s2h/Rando/ActorBehavior/EnItem00.cpp b/mm/2s2h/Rando/ActorBehavior/EnItem00.cpp
index 604c48883..4daa74bb1 100644
--- a/mm/2s2h/Rando/ActorBehavior/EnItem00.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/EnItem00.cpp
@@ -1,33 +1,89 @@
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
+#include "2s2h/ObjectExtension/ActorListIndex.h"
#include "2s2h/CustomItem/CustomItem.h"
extern "C" {
#include "functions.h"
#include "variables.h"
+#include "overlays/actors/ovl_Obj_Mure3/z_obj_mure3.h"
}
-std::map<std::pair<float, float>, RandoCheckId> freestandingMap = {
- // Beneath the Graveyard //
- { { -99.000000f, -260.000000f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_01 },
- { { -133.640945f, -280.000610f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_02 },
- { { -133.640945f, -319.999390f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_03 },
- { { -99.000000f, -340.000000f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_04 },
- { { -64.359055f, -319.999390f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_05 },
- { { -64.359055f, -280.000610f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_06 },
- { { -99.000000f, -300.000000f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_07 },
-
- // Deku Palace //
- { { 439.640961f, 1368.999390f }, RC_DEKU_PALACE_FREESTANDING_RUPEE_12 },
- { { 439.640961f, 1329.000610f }, RC_DEKU_PALACE_FREESTANDING_RUPEE_13 },
- { { 405.0f, 1309.0f }, RC_DEKU_PALACE_FREESTANDING_RUPEE_14 },
- { { 370.359039f, 1329.000610f }, RC_DEKU_PALACE_FREESTANDING_RUPEE_15 },
- { { 370.359039f, 1368.999390f }, RC_DEKU_PALACE_FREESTANDING_RUPEE_16 },
- { { 405.0, 1389.0 }, RC_DEKU_PALACE_FREESTANDING_RUPEE_17 },
- { { 405.0, 1349.0 }, RC_DEKU_PALACE_FREESTANDING_RUPEE_18 },
+std::map<std::tuple<u16, u8, s16>, RandoCheckId> freestandingMap = {
+ { { SCENE_HAKASHITA, 0, 0 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_FREESTANDING_RUPEE_01 },
+ { { SCENE_22DEKUCITY, 1, 17 }, RC_DEKU_PALACE_FREESTANDING_RUPEE_12 },
};
+EnItem00* spawnReplacementItem(Vec3f& pos, Rando::StaticData::RandoStaticCheck& randoStaticCheck) {
+ s16 itemParams = CustomItem::KILL_ON_TOUCH;
+ // Freestanding PoH & HC cannot be picked up by boomerangs
+ if (randoStaticCheck.randoCheckType == RCTYPE_FREESTANDING) {
+ itemParams |= CustomItem::ABLE_TO_ZORA_RANG;
+ }
+ // The heart piece in the bio baba grotto beehive needs to be tossed to fall to the ground
+ if (randoStaticCheck.randoCheckId == RC_TERMINA_FIELD_BIO_BABA_GROTTO) {
+ itemParams |= CustomItem::TOSS_ON_SPAWN;
+ }
+
+ // If it hasn't been collected yet, spawn a dummy item
+ return CustomItem::Spawn(
+ pos.x, pos.y, pos.z, 0, itemParams, randoStaticCheck.randoCheckId,
+ [](Actor* actor, PlayState* play) {
+ auto& randoStaticCheck = Rando::StaticData::Checks[(RandoCheckId)CUSTOM_ITEM_PARAM];
+ switch (randoStaticCheck.flagType) {
+ case FLAG_NONE:
+ if (RANDO_SAVE_CHECKS[randoStaticCheck.randoCheckId].shuffled) {
+ RANDO_SAVE_CHECKS[randoStaticCheck.randoCheckId].eligible = true;
+ }
+ break;
+ case FLAG_CYCL_SCENE_COLLECTIBLE:
+ Flags_SetCollectible(play, randoStaticCheck.flag);
+ break;
+ default:
+ break;
+ }
+ },
+ [](Actor* actor, PlayState* play) {
+ auto& randoSaveCheck = RANDO_SAVE_CHECKS[CUSTOM_ITEM_PARAM];
+ Matrix_Scale(30.0f, 30.0f, 30.0f, MTXMODE_APPLY);
+ Rando::DrawItem(Rando::ConvertItem(randoSaveCheck.randoItemId, (RandoCheckId)CUSTOM_ITEM_PARAM), actor);
+ });
+}
+
void Rando::ActorBehavior::InitEnItem00Behavior() {
+ // Identify freestanding based on the spawner's scene ID, room, and actor list index. The resulting RC is the base
+ // value, with each child incrementing to it to get its own RC. The RCs must be contiguous for this to work.
+ COND_VB_SHOULD(VB_OBJ_MURE3_DROP_COLLECTIBLE, IS_RANDO, {
+ Actor* actor = va_arg(args, Actor*);
+ auto it = freestandingMap.find({ gPlayState->sceneId, actor->room, GetActorListIndex(actor) });
+ if (it != freestandingMap.end()) {
+ s32 i = va_arg(args, s32);
+ RandoCheckId randoCheckId = static_cast<RandoCheckId>(it->second + i);
+ auto randoStaticCheck = Rando::StaticData::Checks[randoCheckId];
+ auto randoSaveCheck = RANDO_SAVE_CHECKS[randoStaticCheck.randoCheckId];
+ if (randoSaveCheck.shuffled && !randoSaveCheck.cycleObtained) {
+ ObjMure3* objMure3 = (ObjMure3*)actor;
+ Vec3f spawnPos;
+ spawnPos.y = objMure3->actor.world.pos.y;
+ if (i < 6) { // Ring of Rupees
+ s16 yRot = objMure3->actor.world.rot.y + 0x2AAA * i;
+ spawnPos.x = (Math_SinS(yRot) * 40.0f) + objMure3->actor.world.pos.x;
+ spawnPos.z = (Math_CosS(yRot) * 40.0f) + objMure3->actor.world.pos.z;
+ objMure3->unk148[i] = spawnReplacementItem(spawnPos, randoStaticCheck);
+ objMure3->unk148[i]->actor.room = actor->room;
+ } else { // Center Rupee
+ spawnPos.x = objMure3->actor.world.pos.x;
+ spawnPos.z = objMure3->actor.world.pos.z;
+ objMure3->unk160 = (Actor*)spawnReplacementItem(spawnPos, randoStaticCheck);
+ objMure3->unk160->room = actor->room;
+ }
+ *should = false;
+ }
+ }
+ });
+
+ // For freestandings that are identifiable based on collectible flags, pre-empt their normal spawns and spawn a
+ // custom item in their places.
COND_ID_HOOK(ShouldActorInit, ACTOR_EN_ITEM00, IS_RANDO, [](Actor* actor, bool* should) {
EnItem00* item00 = (EnItem00*)actor;
@@ -39,12 +95,7 @@ void Rando::ActorBehavior::InitEnItem00Behavior() {
auto randoStaticCheck = Rando::StaticData::GetCheckFromFlag(FLAG_CYCL_SCENE_COLLECTIBLE,
ENITEM00_GET_7F00(actor), gPlayState->sceneId);
if (randoStaticCheck.randoCheckId == RC_UNKNOWN) {
- auto it = freestandingMap.find({ item00->actor.home.pos.x, item00->actor.home.pos.z });
- if (it == freestandingMap.end()) {
- return;
- } else {
- randoStaticCheck = Rando::StaticData::Checks[it->second];
- }
+ return;
}
// Pots handle their own items, ignore them
@@ -61,38 +112,6 @@ void Rando::ActorBehavior::InitEnItem00Behavior() {
// Prevent the original item from spawning
*should = false;
- s16 itemParams = CustomItem::KILL_ON_TOUCH;
- // Freestanding PoH & HC cannot be picked up by boomerangs
- if (randoStaticCheck.randoCheckType == RCTYPE_FREESTANDING) {
- itemParams |= CustomItem::ABLE_TO_ZORA_RANG;
- }
- // The heart piece in the bio baba grotto beehive needs to be tossed to fall to the ground
- if (randoStaticCheck.randoCheckId == RC_TERMINA_FIELD_BIO_BABA_GROTTO) {
- itemParams |= CustomItem::TOSS_ON_SPAWN;
- }
-
- // If it hasn't been collected yet, spawn a dummy item
- CustomItem::Spawn(
- actor->world.pos.x, actor->world.pos.y, actor->world.pos.z, 0, itemParams, randoStaticCheck.randoCheckId,
- [](Actor* actor, PlayState* play) {
- auto& randoStaticCheck = Rando::StaticData::Checks[(RandoCheckId)CUSTOM_ITEM_PARAM];
- switch (randoStaticCheck.flagType) {
- case FLAG_NONE:
- if (RANDO_SAVE_CHECKS[randoStaticCheck.randoCheckId].shuffled) {
- RANDO_SAVE_CHECKS[randoStaticCheck.randoCheckId].eligible = true;
- }
- break;
- case FLAG_CYCL_SCENE_COLLECTIBLE:
- Flags_SetCollectible(play, randoStaticCheck.flag);
- break;
- default:
- break;
- }
- },
- [](Actor* actor, PlayState* play) {
- auto& randoSaveCheck = RANDO_SAVE_CHECKS[CUSTOM_ITEM_PARAM];
- Matrix_Scale(30.0f, 30.0f, 30.0f, MTXMODE_APPLY);
- Rando::DrawItem(Rando::ConvertItem(randoSaveCheck.randoItemId, (RandoCheckId)CUSTOM_ITEM_PARAM), actor);
- });
+ spawnReplacementItem(actor->world.pos, randoStaticCheck);
});
}
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
index 7a6727fbb..8f3ec4494 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
@@ -4,6 +4,8 @@
#include "2s2h/CustomItem/CustomItem.h"
#include "2s2h/Rando/Rando.h"
#include "2s2h/ShipInit.hpp"
+#include "2s2h/ObjectExtension/ActorListIndex.h"
+#include "2s2h/ObjectExtension/ObjectExtension.h"
#include "2s2h/Enhancements/FrameInterpolation/FrameInterpolation.h"
#include "assets/2s2h_assets.h"
#include "assets/overlays/ovl_Obj_Grass/ovl_Obj_Grass.h"
@@ -13,1014 +15,130 @@ extern "C" {
#include "overlays/actors/ovl_Obj_Grass/z_obj_grass.h"
#include "overlays/actors/ovl_En_Kusa/z_en_kusa.h"
#include "overlays/actors/ovl_Obj_Grass_Carry/z_obj_grass_carry.h"
+#include "overlays/actors/ovl_Obj_Mure2/z_obj_mure2.h"
void ObjGrass_OverrideMatrixCurrent(MtxF* matrix);
+extern ObjGrass* sGrassManager;
}
// clang-format off
-std::map<int16_t, std::map<std::pair<float, float>, RandoCheckId>> overworldGrassMap = {
- // Termina Field //
- { SCENE_00KEIKOKU,
- {
- { { -3932.00f, 2092.00f }, RC_TERMINA_FIELD_GRASS_01 },
- { { -3954.00f, 2122.00f }, RC_TERMINA_FIELD_GRASS_02 },
- { { -3996.00f, 2118.00f }, RC_TERMINA_FIELD_GRASS_03 },
- { { -4012.00f, 2080.00f }, RC_TERMINA_FIELD_GRASS_04 },
- { { -3972.00f, 2066.00f }, RC_TERMINA_FIELD_GRASS_05 },
- { { -3901.00f, 2122.00f }, RC_TERMINA_FIELD_GRASS_06 },
- { { -3972.00f, 2166.00f }, RC_TERMINA_FIELD_GRASS_07 },
- { { -4043.00f, 2122.00f }, RC_TERMINA_FIELD_GRASS_08 },
- { { -4043.00f, 2050.00f }, RC_TERMINA_FIELD_GRASS_09 },
- { { -4008.00f, 2015.00f }, RC_TERMINA_FIELD_GRASS_10 },
- { { -3960.00f, 2007.00f }, RC_TERMINA_FIELD_GRASS_11 },
- { { -3930.00f, 2044.00f }, RC_TERMINA_FIELD_GRASS_12 },
- { { -3036.00f, 2613.00f }, RC_TERMINA_FIELD_GRASS_13 },
- { { -3058.00f, 2643.00f }, RC_TERMINA_FIELD_GRASS_14 },
- { { -3100.00f, 2639.00f }, RC_TERMINA_FIELD_GRASS_15 },
- { { -3116.00f, 2601.00f }, RC_TERMINA_FIELD_GRASS_16 },
- { { -3076.00f, 2587.00f }, RC_TERMINA_FIELD_GRASS_17 },
- { { -3005.00f, 2643.00f }, RC_TERMINA_FIELD_GRASS_18 },
- { { -3076.00f, 2687.00f }, RC_TERMINA_FIELD_GRASS_19 },
- { { -3147.00f, 2643.00f }, RC_TERMINA_FIELD_GRASS_20 },
- { { -3147.00f, 2571.00f }, RC_TERMINA_FIELD_GRASS_21 },
- { { -3112.00f, 2536.00f }, RC_TERMINA_FIELD_GRASS_22 },
- { { -3064.00f, 2528.00f }, RC_TERMINA_FIELD_GRASS_23 },
- { { -3034.00f, 2565.00f }, RC_TERMINA_FIELD_GRASS_24 },
- { { -2852.00f, 1585.00f }, RC_TERMINA_FIELD_GRASS_25 },
- { { -2874.00f, 1615.00f }, RC_TERMINA_FIELD_GRASS_26 },
- { { -2916.00f, 1611.00f }, RC_TERMINA_FIELD_GRASS_27 },
- { { -2932.00f, 1573.00f }, RC_TERMINA_FIELD_GRASS_28 },
- { { -2892.00f, 1559.00f }, RC_TERMINA_FIELD_GRASS_29 },
- { { -2821.00f, 1615.00f }, RC_TERMINA_FIELD_GRASS_30 },
- { { -2892.00f, 1659.00f }, RC_TERMINA_FIELD_GRASS_31 },
- { { -2963.00f, 1615.00f }, RC_TERMINA_FIELD_GRASS_32 },
- { { -2963.00f, 1543.00f }, RC_TERMINA_FIELD_GRASS_33 },
- { { -2928.00f, 1508.00f }, RC_TERMINA_FIELD_GRASS_34 },
- { { -2880.00f, 1500.00f }, RC_TERMINA_FIELD_GRASS_35 },
- { { -2850.00f, 1537.00f }, RC_TERMINA_FIELD_GRASS_36 },
- { { -2676.00f, -1137.00f }, RC_TERMINA_FIELD_GRASS_37 },
- { { -2698.00f, -1107.00f }, RC_TERMINA_FIELD_GRASS_38 },
- { { -2740.00f, -1111.00f }, RC_TERMINA_FIELD_GRASS_39 },
- { { -2756.00f, -1149.00f }, RC_TERMINA_FIELD_GRASS_40 },
- { { -2716.00f, -1163.00f }, RC_TERMINA_FIELD_GRASS_41 },
- { { -2645.00f, -1107.00f }, RC_TERMINA_FIELD_GRASS_42 },
- { { -2716.00f, -1063.00f }, RC_TERMINA_FIELD_GRASS_43 },
- { { -2787.00f, -1107.00f }, RC_TERMINA_FIELD_GRASS_44 },
- { { -2787.00f, -1179.00f }, RC_TERMINA_FIELD_GRASS_45 },
- { { -2752.00f, -1214.00f }, RC_TERMINA_FIELD_GRASS_46 },
- { { -2704.00f, -1222.00f }, RC_TERMINA_FIELD_GRASS_47 },
- { { -2674.00f, -1185.00f }, RC_TERMINA_FIELD_GRASS_48 },
- { { -2645.00f, 4303.00f }, RC_TERMINA_FIELD_GRASS_49 },
- { { -2667.00f, 4333.00f }, RC_TERMINA_FIELD_GRASS_50 },
- { { -2709.00f, 4329.00f }, RC_TERMINA_FIELD_GRASS_51 },
- { { -2725.00f, 4291.00f }, RC_TERMINA_FIELD_GRASS_52 },
- { { -2685.00f, 4277.00f }, RC_TERMINA_FIELD_GRASS_53 },
- { { -2614.00f, 4333.00f }, RC_TERMINA_FIELD_GRASS_54 },
- { { -2685.00f, 4377.00f }, RC_TERMINA_FIELD_GRASS_55 },
- { { -2756.00f, 4333.00f }, RC_TERMINA_FIELD_GRASS_56 },
- { { -2756.00f, 4261.00f }, RC_TERMINA_FIELD_GRASS_57 },
- { { -2721.00f, 4226.00f }, RC_TERMINA_FIELD_GRASS_58 },
- { { -2673.00f, 4218.00f }, RC_TERMINA_FIELD_GRASS_59 },
- { { -2643.00f, 4255.00f }, RC_TERMINA_FIELD_GRASS_60 },
- { { -1418.00f, -2600.00f }, RC_TERMINA_FIELD_GRASS_61 },
- { { -1440.00f, -2570.00f }, RC_TERMINA_FIELD_GRASS_62 },
- { { -1482.00f, -2574.00f }, RC_TERMINA_FIELD_GRASS_63 },
- { { -1498.00f, -2612.00f }, RC_TERMINA_FIELD_GRASS_64 },
- { { -1458.00f, -2626.00f }, RC_TERMINA_FIELD_GRASS_65 },
- { { -1387.00f, -2570.00f }, RC_TERMINA_FIELD_GRASS_66 },
- { { -1458.00f, -2526.00f }, RC_TERMINA_FIELD_GRASS_67 },
- { { -1529.00f, -2570.00f }, RC_TERMINA_FIELD_GRASS_68 },
- { { -1529.00f, -2642.00f }, RC_TERMINA_FIELD_GRASS_69 },
- { { -1494.00f, -2677.00f }, RC_TERMINA_FIELD_GRASS_70 },
- { { -1446.00f, -2685.00f }, RC_TERMINA_FIELD_GRASS_71 },
- { { -1416.00f, -2648.00f }, RC_TERMINA_FIELD_GRASS_72 },
- { { -1383.00f, 3960.00f }, RC_TERMINA_FIELD_GRASS_73 },
- { { -1405.00f, 3990.00f }, RC_TERMINA_FIELD_GRASS_74 },
- { { -1447.00f, 3986.00f }, RC_TERMINA_FIELD_GRASS_75 },
- { { -1463.00f, 3948.00f }, RC_TERMINA_FIELD_GRASS_76 },
- { { -1423.00f, 3934.00f }, RC_TERMINA_FIELD_GRASS_77 },
- { { -1352.00f, 3990.00f }, RC_TERMINA_FIELD_GRASS_78 },
- { { -1423.00f, 4034.00f }, RC_TERMINA_FIELD_GRASS_79 },
- { { -1494.00f, 3990.00f }, RC_TERMINA_FIELD_GRASS_80 },
- { { -1494.00f, 3918.00f }, RC_TERMINA_FIELD_GRASS_81 },
- { { -1459.00f, 3883.00f }, RC_TERMINA_FIELD_GRASS_82 },
- { { -1411.00f, 3875.00f }, RC_TERMINA_FIELD_GRASS_83 },
- { { -1381.00f, 3912.00f }, RC_TERMINA_FIELD_GRASS_84 },
- { { -271.00f, 3243.00f }, RC_TERMINA_FIELD_GRASS_85 },
- { { -293.00f, 3273.00f }, RC_TERMINA_FIELD_GRASS_86 },
- { { -335.00f, 3269.00f }, RC_TERMINA_FIELD_GRASS_87 },
- { { -351.00f, 3231.00f }, RC_TERMINA_FIELD_GRASS_88 },
- { { -311.00f, 3217.00f }, RC_TERMINA_FIELD_GRASS_89 },
- { { -240.00f, 3273.00f }, RC_TERMINA_FIELD_GRASS_90 },
- { { -311.00f, 3317.00f }, RC_TERMINA_FIELD_GRASS_91 },
- { { -382.00f, 3273.00f }, RC_TERMINA_FIELD_GRASS_92 },
- { { -382.00f, 3201.00f }, RC_TERMINA_FIELD_GRASS_93 },
- { { -347.00f, 3166.00f }, RC_TERMINA_FIELD_GRASS_94 },
- { { -299.00f, 3158.00f }, RC_TERMINA_FIELD_GRASS_95 },
- { { -269.00f, 3195.00f }, RC_TERMINA_FIELD_GRASS_96 },
- { { 954.00f, -2549.00f }, RC_TERMINA_FIELD_GRASS_97 },
- { { 932.00f, -2519.00f }, RC_TERMINA_FIELD_GRASS_98 },
- { { 890.00f, -2523.00f }, RC_TERMINA_FIELD_GRASS_99 },
- { { 874.00f, -2561.00f }, RC_TERMINA_FIELD_GRASS_100 },
- { { 914.00f, -2575.00f }, RC_TERMINA_FIELD_GRASS_101 },
- { { 985.00f, -2519.00f }, RC_TERMINA_FIELD_GRASS_102 },
- { { 914.00f, -2475.00f }, RC_TERMINA_FIELD_GRASS_103 },
- { { 843.00f, -2519.00f }, RC_TERMINA_FIELD_GRASS_104 },
- { { 843.00f, -2591.00f }, RC_TERMINA_FIELD_GRASS_105 },
- { { 878.00f, -2626.00f }, RC_TERMINA_FIELD_GRASS_106 },
- { { 926.00f, -2634.00f }, RC_TERMINA_FIELD_GRASS_107 },
- { { 956.00f, -2597.00f }, RC_TERMINA_FIELD_GRASS_108 },
- { { 1286.00f, 3183.00f }, RC_TERMINA_FIELD_GRASS_109 },
- { { 1264.00f, 3213.00f }, RC_TERMINA_FIELD_GRASS_110 },
- { { 1222.00f, 3209.00f }, RC_TERMINA_FIELD_GRASS_111 },
- { { 1206.00f, 3171.00f }, RC_TERMINA_FIELD_GRASS_112 },
- { { 1246.00f, 3157.00f }, RC_TERMINA_FIELD_GRASS_113 },
- { { 1317.00f, 3213.00f }, RC_TERMINA_FIELD_GRASS_114 },
- { { 1246.00f, 3257.00f }, RC_TERMINA_FIELD_GRASS_115 },
- { { 1175.00f, 3213.00f }, RC_TERMINA_FIELD_GRASS_116 },
- { { 1175.00f, 3141.00f }, RC_TERMINA_FIELD_GRASS_117 },
- { { 1210.00f, 3106.00f }, RC_TERMINA_FIELD_GRASS_118 },
- { { 1258.00f, 3098.00f }, RC_TERMINA_FIELD_GRASS_119 },
- { { 1288.00f, 3135.00f }, RC_TERMINA_FIELD_GRASS_120 },
- { { 1554.00f, 2053.00f }, RC_TERMINA_FIELD_GRASS_121 },
- { { 1532.00f, 2083.00f }, RC_TERMINA_FIELD_GRASS_122 },
- { { 1490.00f, 2079.00f }, RC_TERMINA_FIELD_GRASS_123 },
- { { 1474.00f, 2041.00f }, RC_TERMINA_FIELD_GRASS_124 },
- { { 1514.00f, 2027.00f }, RC_TERMINA_FIELD_GRASS_125 },
- { { 1585.00f, 2083.00f }, RC_TERMINA_FIELD_GRASS_126 },
- { { 1514.00f, 2127.00f }, RC_TERMINA_FIELD_GRASS_127 },
- { { 1443.00f, 2083.00f }, RC_TERMINA_FIELD_GRASS_128 },
- { { 1443.00f, 2011.00f }, RC_TERMINA_FIELD_GRASS_129 },
- { { 1478.00f, 1976.00f }, RC_TERMINA_FIELD_GRASS_130 },
- { { 1526.00f, 1968.00f }, RC_TERMINA_FIELD_GRASS_131 },
- { { 1556.00f, 2005.00f }, RC_TERMINA_FIELD_GRASS_132 },
- { { 1770.00f, 2736.00f }, RC_TERMINA_FIELD_GRASS_133 },
- { { 1748.00f, 2766.00f }, RC_TERMINA_FIELD_GRASS_134 },
- { { 1706.00f, 2762.00f }, RC_TERMINA_FIELD_GRASS_135 },
- { { 1690.00f, 2724.00f }, RC_TERMINA_FIELD_GRASS_136 },
- { { 1730.00f, 2710.00f }, RC_TERMINA_FIELD_GRASS_137 },
- { { 1801.00f, 2766.00f }, RC_TERMINA_FIELD_GRASS_138 },
- { { 1730.00f, 2810.00f }, RC_TERMINA_FIELD_GRASS_139 },
- { { 1659.00f, 2766.00f }, RC_TERMINA_FIELD_GRASS_140 },
- { { 1659.00f, 2694.00f }, RC_TERMINA_FIELD_GRASS_141 },
- { { 1694.00f, 2659.00f }, RC_TERMINA_FIELD_GRASS_142 },
- { { 1742.00f, 2651.00f }, RC_TERMINA_FIELD_GRASS_143 },
- { { 1772.00f, 2688.00f }, RC_TERMINA_FIELD_GRASS_144 },
- { { 2007.00f, -1295.00f }, RC_TERMINA_FIELD_GRASS_145 },
- { { 1985.00f, -1265.00f }, RC_TERMINA_FIELD_GRASS_146 },
- { { 1943.00f, -1269.00f }, RC_TERMINA_FIELD_GRASS_147 },
- { { 1927.00f, -1307.00f }, RC_TERMINA_FIELD_GRASS_148 },
- { { 1967.00f, -1321.00f }, RC_TERMINA_FIELD_GRASS_149 },
- { { 2038.00f, -1265.00f }, RC_TERMINA_FIELD_GRASS_150 },
- { { 1967.00f, -1221.00f }, RC_TERMINA_FIELD_GRASS_151 },
- { { 1896.00f, -1265.00f }, RC_TERMINA_FIELD_GRASS_152 },
- { { 1896.00f, -1337.00f }, RC_TERMINA_FIELD_GRASS_153 },
- { { 1931.00f, -1372.00f }, RC_TERMINA_FIELD_GRASS_154 },
- { { 1979.00f, -1380.00f }, RC_TERMINA_FIELD_GRASS_155 },
- { { 2009.00f, -1343.00f }, RC_TERMINA_FIELD_GRASS_156 },
- { { 2637.00f, 565.00f }, RC_TERMINA_FIELD_GRASS_157 },
- { { 2615.00f, 595.00f }, RC_TERMINA_FIELD_GRASS_158 },
- { { 2573.00f, 591.00f }, RC_TERMINA_FIELD_GRASS_159 },
- { { 2557.00f, 553.00f }, RC_TERMINA_FIELD_GRASS_160 },
- { { 2597.00f, 539.00f }, RC_TERMINA_FIELD_GRASS_161 },
- { { 2668.00f, 595.00f }, RC_TERMINA_FIELD_GRASS_162 },
- { { 2597.00f, 639.00f }, RC_TERMINA_FIELD_GRASS_163 },
- { { 2526.00f, 595.00f }, RC_TERMINA_FIELD_GRASS_164 },
- { { 2526.00f, 523.00f }, RC_TERMINA_FIELD_GRASS_165 },
- { { 2561.00f, 488.00f }, RC_TERMINA_FIELD_GRASS_166 },
- { { 2609.00f, 480.00f }, RC_TERMINA_FIELD_GRASS_167 },
- { { 2639.00f, 517.00f }, RC_TERMINA_FIELD_GRASS_168 },
- { { 2718.00f, 2414.00f }, RC_TERMINA_FIELD_GRASS_169 },
- { { 2696.00f, 2444.00f }, RC_TERMINA_FIELD_GRASS_170 },
- { { 2654.00f, 2440.00f }, RC_TERMINA_FIELD_GRASS_171 },
- { { 2638.00f, 2402.00f }, RC_TERMINA_FIELD_GRASS_172 },
- { { 2678.00f, 2388.00f }, RC_TERMINA_FIELD_GRASS_173 },
- { { 2749.00f, 2444.00f }, RC_TERMINA_FIELD_GRASS_174 },
- { { 2678.00f, 2488.00f }, RC_TERMINA_FIELD_GRASS_175 },
- { { 2607.00f, 2444.00f }, RC_TERMINA_FIELD_GRASS_176 },
- { { 2607.00f, 2372.00f }, RC_TERMINA_FIELD_GRASS_177 },
- { { 2642.00f, 2337.00f }, RC_TERMINA_FIELD_GRASS_178 },
- { { 2690.00f, 2329.00f }, RC_TERMINA_FIELD_GRASS_179 },
- { { 2720.00f, 2366.00f }, RC_TERMINA_FIELD_GRASS_180 },
- { { 2933.00f, 1832.00f }, RC_TERMINA_FIELD_GRASS_181 },
- { { 2911.00f, 1862.00f }, RC_TERMINA_FIELD_GRASS_182 },
- { { 2869.00f, 1858.00f }, RC_TERMINA_FIELD_GRASS_183 },
- { { 2853.00f, 1820.00f }, RC_TERMINA_FIELD_GRASS_184 },
- { { 2893.00f, 1806.00f }, RC_TERMINA_FIELD_GRASS_185 },
- { { 2964.00f, 1862.00f }, RC_TERMINA_FIELD_GRASS_186 },
- { { 2893.00f, 1906.00f }, RC_TERMINA_FIELD_GRASS_187 },
- { { 2822.00f, 1862.00f }, RC_TERMINA_FIELD_GRASS_188 },
- { { 2822.00f, 1790.00f }, RC_TERMINA_FIELD_GRASS_189 },
- { { 2857.00f, 1755.00f }, RC_TERMINA_FIELD_GRASS_190 },
- { { 2905.00f, 1747.00f }, RC_TERMINA_FIELD_GRASS_191 },
- { { 2935.00f, 1784.00f }, RC_TERMINA_FIELD_GRASS_192 },
- { { 3847.00f, 742.00f }, RC_TERMINA_FIELD_GRASS_193 },
- { { 3825.00f, 772.00f }, RC_TERMINA_FIELD_GRASS_194 },
- { { 3783.00f, 768.00f }, RC_TERMINA_FIELD_GRASS_195 },
- { { 3767.00f, 730.00f }, RC_TERMINA_FIELD_GRASS_196 },
- { { 3807.00f, 716.00f }, RC_TERMINA_FIELD_GRASS_197 },
- { { 3878.00f, 772.00f }, RC_TERMINA_FIELD_GRASS_198 },
- { { 3807.00f, 816.00f }, RC_TERMINA_FIELD_GRASS_199 },
- { { 3736.00f, 772.00f }, RC_TERMINA_FIELD_GRASS_200 },
- { { 3736.00f, 700.00f }, RC_TERMINA_FIELD_GRASS_201 },
- { { 3771.00f, 665.00f }, RC_TERMINA_FIELD_GRASS_202 },
- { { 3819.00f, 657.00f }, RC_TERMINA_FIELD_GRASS_203 },
- { { 3849.00f, 694.00f }, RC_TERMINA_FIELD_GRASS_204 },
- { { 4455.00f, 418.00f }, RC_TERMINA_FIELD_GRASS_205 },
- { { 4433.00f, 448.00f }, RC_TERMINA_FIELD_GRASS_206 },
- { { 4391.00f, 444.00f }, RC_TERMINA_FIELD_GRASS_207 },
- { { 4375.00f, 406.00f }, RC_TERMINA_FIELD_GRASS_208 },
- { { 4415.00f, 392.00f }, RC_TERMINA_FIELD_GRASS_209 },
- { { 4486.00f, 448.00f }, RC_TERMINA_FIELD_GRASS_210 },
- { { 4415.00f, 492.00f }, RC_TERMINA_FIELD_GRASS_211 },
- { { 4344.00f, 448.00f }, RC_TERMINA_FIELD_GRASS_212 },
- { { 4344.00f, 376.00f }, RC_TERMINA_FIELD_GRASS_213 },
- { { 4379.00f, 341.00f }, RC_TERMINA_FIELD_GRASS_214 },
- { { 4427.00f, 333.00f }, RC_TERMINA_FIELD_GRASS_215 },
- { { 4457.00f, 370.00f }, RC_TERMINA_FIELD_GRASS_216 },
- } },
- // Great Bay Coast
- { SCENE_30GYOSON,
- {
- { { 863.00f, 4646.00f }, RC_GREAT_BAY_COAST_GRASS_01 },
- { { 769.00f, 4647.00f }, RC_GREAT_BAY_COAST_GRASS_02 },
- { { 885.00f, 4881.00f }, RC_GREAT_BAY_COAST_GRASS_03 },
- { { 793.00f, 4880.00f }, RC_GREAT_BAY_COAST_GRASS_04 },
- { { 782.00f, 4766.00f }, RC_GREAT_BAY_COAST_GRASS_05 },
- } },
- // Clock Town
- { SCENE_ALLEY,
- {
- { { -1900.00f, 316.00f }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_01 },
- { { -1921.00f, 228.00f }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_02 },
- { { -1864.00f, 216.00f }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_03 },
- } },
- // Romani Ranch
- { SCENE_F01,
- {
- { { -135.00f, 1834.00f }, RC_ROMANI_RANCH_GRASS_01 },
- { { -157.00f, 1864.00f }, RC_ROMANI_RANCH_GRASS_02 },
- { { -199.00f, 1860.00f }, RC_ROMANI_RANCH_GRASS_03 },
- { { -215.00f, 1822.00f }, RC_ROMANI_RANCH_GRASS_04 },
- { { -175.00f, 1808.00f }, RC_ROMANI_RANCH_GRASS_05 },
- { { -104.00f, 1864.00f }, RC_ROMANI_RANCH_GRASS_06 },
- { { -175.00f, 1908.00f }, RC_ROMANI_RANCH_GRASS_07 },
- { { -246.00f, 1864.00f }, RC_ROMANI_RANCH_GRASS_08 },
- { { -246.00f, 1792.00f }, RC_ROMANI_RANCH_GRASS_09 },
- { { -211.00f, 1757.00f }, RC_ROMANI_RANCH_GRASS_10 },
- { { -163.00f, 1749.00f }, RC_ROMANI_RANCH_GRASS_11 },
- { { -133.00f, 1786.00f }, RC_ROMANI_RANCH_GRASS_12 },
- { { -1529.00f, 1630.00f }, RC_ROMANI_RANCH_GRASS_13 },
- { { -1551.00f, 1660.00f }, RC_ROMANI_RANCH_GRASS_14 },
- { { -1593.00f, 1656.00f }, RC_ROMANI_RANCH_GRASS_15 },
- { { -1609.00f, 1618.00f }, RC_ROMANI_RANCH_GRASS_16 },
- { { -1569.00f, 1604.00f }, RC_ROMANI_RANCH_GRASS_17 },
- { { -1498.00f, 1660.00f }, RC_ROMANI_RANCH_GRASS_18 },
- { { -1569.00f, 1704.00f }, RC_ROMANI_RANCH_GRASS_19 },
- { { -1640.00f, 1660.00f }, RC_ROMANI_RANCH_GRASS_20 },
- { { -1640.00f, 1588.00f }, RC_ROMANI_RANCH_GRASS_21 },
- { { -1605.00f, 1553.00f }, RC_ROMANI_RANCH_GRASS_22 },
- { { -1557.00f, 1545.00f }, RC_ROMANI_RANCH_GRASS_23 },
- { { -1527.00f, 1582.00f }, RC_ROMANI_RANCH_GRASS_24 },
- { { 1874.00f, 1167.00f }, RC_ROMANI_RANCH_GRASS_25 },
- { { 1852.00f, 1197.00f }, RC_ROMANI_RANCH_GRASS_26 },
- { { 1810.00f, 1193.00f }, RC_ROMANI_RANCH_GRASS_27 },
- { { 1794.00f, 1155.00f }, RC_ROMANI_RANCH_GRASS_28 },
- { { 1834.00f, 1141.00f }, RC_ROMANI_RANCH_GRASS_29 },
- { { 1905.00f, 1197.00f }, RC_ROMANI_RANCH_GRASS_30 },
- { { 1834.00f, 1241.00f }, RC_ROMANI_RANCH_GRASS_31 },
- { { 1763.00f, 1197.00f }, RC_ROMANI_RANCH_GRASS_32 },
- { { 1763.00f, 1125.00f }, RC_ROMANI_RANCH_GRASS_33 },
- { { 1798.00f, 1090.00f }, RC_ROMANI_RANCH_GRASS_34 },
- { { 1846.00f, 1082.00f }, RC_ROMANI_RANCH_GRASS_35 },
- { { 1876.00f, 1119.00f }, RC_ROMANI_RANCH_GRASS_36 },
- { { 1203.00f, -1379.00f }, RC_ROMANI_RANCH_GRASS_37 },
- { { 1181.00f, -1349.00f }, RC_ROMANI_RANCH_GRASS_38 },
- { { 1139.00f, -1353.00f }, RC_ROMANI_RANCH_GRASS_39 },
- { { 1123.00f, -1391.00f }, RC_ROMANI_RANCH_GRASS_40 },
- { { 1163.00f, -1405.00f }, RC_ROMANI_RANCH_GRASS_41 },
- { { 1234.00f, -1349.00f }, RC_ROMANI_RANCH_GRASS_42 },
- { { 1163.00f, -1305.00f }, RC_ROMANI_RANCH_GRASS_43 },
- { { 1092.00f, -1349.00f }, RC_ROMANI_RANCH_GRASS_44 },
- { { 1092.00f, -1421.00f }, RC_ROMANI_RANCH_GRASS_45 },
- { { 1127.00f, -1456.00f }, RC_ROMANI_RANCH_GRASS_46 },
- { { 1175.00f, -1464.00f }, RC_ROMANI_RANCH_GRASS_47 },
- { { 1205.00f, -1427.00f }, RC_ROMANI_RANCH_GRASS_48 },
- { { -223.00f, -2271.00f }, RC_ROMANI_RANCH_GRASS_49 },
- { { -143.00f, -2271.00f }, RC_ROMANI_RANCH_GRASS_50 },
- { { -166.00f, -2214.00f }, RC_ROMANI_RANCH_GRASS_51 },
- { { -223.00f, -2191.00f }, RC_ROMANI_RANCH_GRASS_52 },
- { { -280.00f, -2214.00f }, RC_ROMANI_RANCH_GRASS_53 },
- { { -303.00f, -2271.00f }, RC_ROMANI_RANCH_GRASS_54 },
- { { -280.00f, -2328.00f }, RC_ROMANI_RANCH_GRASS_55 },
- { { -223.00f, -2351.00f }, RC_ROMANI_RANCH_GRASS_56 },
- { { -166.00f, -2328.00f }, RC_ROMANI_RANCH_GRASS_57 },
- } },
- // Southern Swamp(Cleaned)
- { SCENE_20SICHITAI2,
- {
- { { 115.00f, -977.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_01 },
- { { 93.00f, -947.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_02 },
- { { 51.00f, -951.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_03 },
- { { 35.00f, -989.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_04 },
- { { 75.00f, -1003.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_05 },
- { { 146.00f, -947.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_06 },
- { { 75.00f, -903.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_07 },
- { { 4.00f, -947.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_08 },
- { { 4.00f, -1019.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_09 },
- { { 39.00f, -1054.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_10 },
- { { 87.00f, -1062.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_11 },
- { { 117.00f, -1025.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_12 },
- { { 3013.00f, -896.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_13 },
- { { 3093.00f, -896.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_14 },
- { { 3070.00f, -839.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_15 },
- { { 3013.00f, -816.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_16 },
- { { 2956.00f, -839.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_17 },
- { { 2933.00f, -896.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_18 },
- { { 2956.00f, -953.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_19 },
- { { 3013.00f, -976.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_20 },
- { { 3070.00f, -953.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_21 },
- { { 2982.00f, -1255.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_22 },
- { { 3062.00f, -1255.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_23 },
- { { 3039.00f, -1198.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_24 },
- { { 2982.00f, -1175.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_25 },
- { { 2925.00f, -1198.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_26 },
- { { 2902.00f, -1255.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_27 },
- { { 2925.00f, -1312.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_28 },
- { { 2982.00f, -1335.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_29 },
- { { 3039.00f, -1312.00f }, RC_SOUTHERN_SWAMP_CLEARED_GRASS_30 },
- } },
- // Southern Swamp(Poisoned)
- { SCENE_20SICHITAI,
- {
- { { 115.00f, -977.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_01 },
- { { 93.00f, -947.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_02 },
- { { 51.00f, -951.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_03 },
- { { 35.00f, -989.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_04 },
- { { 75.00f, -1003.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_05 },
- { { 146.00f, -947.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_06 },
- { { 75.00f, -903.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_07 },
- { { 4.00f, -947.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_08 },
- { { 4.00f, -1019.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_09 },
- { { 39.00f, -1054.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_10 },
- { { 87.00f, -1062.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_11 },
- { { 117.00f, -1025.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_12 },
- { { 3013.00f, -896.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_13 },
- { { 3093.00f, -896.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_14 },
- { { 3070.00f, -839.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_15 },
- { { 3013.00f, -816.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_16 },
- { { 2956.00f, -839.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_17 },
- { { 2933.00f, -896.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_18 },
- { { 2956.00f, -953.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_19 },
- { { 3013.00f, -976.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_20 },
- { { 3070.00f, -953.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_21 },
- { { 2982.00f, -1255.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_22 },
- { { 3062.00f, -1255.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_23 },
- { { 3039.00f, -1198.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_24 },
- { { 2982.00f, -1175.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_25 },
- { { 2925.00f, -1198.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_26 },
- { { 2902.00f, -1255.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_27 },
- { { 2925.00f, -1312.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_28 },
- { { 2982.00f, -1335.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_29 },
- { { 3039.00f, -1312.00f }, RC_SOUTHERN_SWAMP_POISON_GRASS_30 },
- } },
- // Road to Southern Swamp
- { SCENE_24KEMONOMITI,
- {
- { { 2734.00f, 3399.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_01 },
- { { 2757.00f, 3443.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_02 },
- { { 127.00f, 1839.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_03 },
- { { 47.00f, 1839.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_04 },
- { { 70.00f, 1782.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_05 },
- { { 127.00f, 1759.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_06 },
- { { 184.00f, 1782.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_07 },
- { { 207.00f, 1839.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_08 },
- { { 184.00f, 1896.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_09 },
- { { 127.00f, 1919.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_10 },
- { { 70.00f, 1896.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_11 },
- { { 321.00f, 1647.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_12 },
- { { 241.00f, 1647.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_13 },
- { { 264.00f, 1590.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_14 },
- { { 321.00f, 1567.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_15 },
- { { 378.00f, 1590.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_16 },
- { { 401.00f, 1647.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_17 },
- { { 378.00f, 1704.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_18 },
- { { 321.00f, 1727.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_19 },
- { { 264.00f, 1704.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_20 },
- } },
- { SCENE_10YUKIYAMANOMURA2,
- {
- { { -279.00f, 1379.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_01 },
- { { -203.00f, 1155.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_02 },
- { { -545.00f, 1069.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_03 },
- { { 267.00f, 402.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_04 },
- { { 267.00f, 482.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_05 },
- { { 324.00f, 459.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_06 },
- { { 347.00f, 402.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_07 },
- { { 324.00f, 345.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_08 },
- { { 267.00f, 322.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_09 },
- { { 210.00f, 345.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_10 },
- { { 187.00f, 402.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_11 },
- { { 210.00f, 459.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_12 },
- { { 86.00f, 145.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_13 },
- { { 86.00f, 225.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_14 },
- { { 143.00f, 202.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_15 },
- { { 166.00f, 145.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_16 },
- { { 143.00f, 88.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_17 },
- { { 86.00f, 65.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_18 },
- { { 29.00f, 88.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_19 },
- { { 6.00f, 145.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_20 },
- { { 29.00f, 202.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_21 },
- { { 365.00f, 165.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_22 },
- { { 365.00f, 245.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_23 },
- { { 422.00f, 222.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_24 },
- { { 445.00f, 165.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_25 },
- { { 422.00f, 108.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_26 },
- { { 365.00f, 85.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_27 },
- { { 308.00f, 108.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_28 },
- { { 285.00f, 165.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_29 },
- { { 308.00f, 222.00f }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_30 },
- } },
- { SCENE_17SETUGEN2,
- {
- { { -1383.00f, 1049.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_01 },
- { { -1405.00f, 1079.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_02 },
- { { -1447.00f, 1075.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_03 },
- { { -1463.00f, 1037.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_04 },
- { { -1423.00f, 1023.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_05 },
- { { -1352.00f, 1079.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_06 },
- { { -1423.00f, 1123.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_07 },
- { { -1494.00f, 1079.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_08 },
- { { -1494.00f, 1007.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_09 },
- { { -1459.00f, 972.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_10 },
- { { -1411.00f, 964.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_11 },
- { { -1381.00f, 1001.00f }, RC_TWIN_ISLANDS_SPRING_GRASS_12 },
- } },
- { SCENE_BOTI,
- {
- { { -597.00f, -1943.00f }, RC_IKANA_GRAVEYARD_GRASS_01 },
- { { -597.00f, -1863.00f }, RC_IKANA_GRAVEYARD_GRASS_02 },
- { { -540.00f, -1886.00f }, RC_IKANA_GRAVEYARD_GRASS_03 },
- { { -517.00f, -1943.00f }, RC_IKANA_GRAVEYARD_GRASS_04 },
- { { -540.00f, -2000.00f }, RC_IKANA_GRAVEYARD_GRASS_05 },
- { { -597.00f, -2023.00f }, RC_IKANA_GRAVEYARD_GRASS_06 },
- { { -654.00f, -2000.00f }, RC_IKANA_GRAVEYARD_GRASS_07 },
- { { -677.00f, -1943.00f }, RC_IKANA_GRAVEYARD_GRASS_08 },
- { { -654.00f, -1886.00f }, RC_IKANA_GRAVEYARD_GRASS_09 },
- } },
- { SCENE_KOEPONARACE,
- {
- { { 2810.00f, 446.00f }, RC_GORMAN_TRACK_GRASS_01 },
- { { 2788.00f, 476.00f }, RC_GORMAN_TRACK_GRASS_02 },
- { { 2746.00f, 472.00f }, RC_GORMAN_TRACK_GRASS_03 },
- { { 2730.00f, 434.00f }, RC_GORMAN_TRACK_GRASS_04 },
- { { 2770.00f, 420.00f }, RC_GORMAN_TRACK_GRASS_05 },
- { { 2841.00f, 476.00f }, RC_GORMAN_TRACK_GRASS_06 },
- { { 2770.00f, 520.00f }, RC_GORMAN_TRACK_GRASS_07 },
- { { 2699.00f, 476.00f }, RC_GORMAN_TRACK_GRASS_08 },
- { { 2699.00f, 404.00f }, RC_GORMAN_TRACK_GRASS_09 },
- { { 2734.00f, 369.00f }, RC_GORMAN_TRACK_GRASS_10 },
- { { 2782.00f, 361.00f }, RC_GORMAN_TRACK_GRASS_11 },
- { { 2812.00f, 398.00f }, RC_GORMAN_TRACK_GRASS_12 },
- { { 2502.00f, -353.00f }, RC_GORMAN_TRACK_GRASS_13 },
- { { 2480.00f, -323.00f }, RC_GORMAN_TRACK_GRASS_14 },
- { { 2438.00f, -327.00f }, RC_GORMAN_TRACK_GRASS_15 },
- { { 2422.00f, -365.00f }, RC_GORMAN_TRACK_GRASS_16 },
- { { 2462.00f, -379.00f }, RC_GORMAN_TRACK_GRASS_17 },
- { { 2533.00f, -323.00f }, RC_GORMAN_TRACK_GRASS_18 },
- { { 2462.00f, -279.00f }, RC_GORMAN_TRACK_GRASS_19 },
- { { 2391.00f, -323.00f }, RC_GORMAN_TRACK_GRASS_20 },
- { { 2391.00f, -395.00f }, RC_GORMAN_TRACK_GRASS_21 },
- { { 2426.00f, -430.00f }, RC_GORMAN_TRACK_GRASS_22 },
- { { 2474.00f, -438.00f }, RC_GORMAN_TRACK_GRASS_23 },
- { { 2504.00f, -401.00f }, RC_GORMAN_TRACK_GRASS_24 },
- } },
- { SCENE_26SARUNOMORI,
- {
- { { 81.00f, 85.00f }, RC_WOODS_OF_MYSTERY_GRASS_01 },
- { { 44.00f, 125.00f }, RC_WOODS_OF_MYSTERY_GRASS_02 },
- { { 91.00f, 137.00f }, RC_WOODS_OF_MYSTERY_GRASS_03 },
- { { -77.00f, 779.00f }, RC_WOODS_OF_MYSTERY_GRASS_04 },
- { { 6.00f, 988.00f }, RC_WOODS_OF_MYSTERY_GRASS_05 },
- { { -796.00f, 793.00f }, RC_WOODS_OF_MYSTERY_GRASS_06 },
- { { -946.00f, 1054.00f }, RC_WOODS_OF_MYSTERY_GRASS_07 },
- { { -798.00f, 56.00f }, RC_WOODS_OF_MYSTERY_GRASS_08 },
- { { -872.00f, -3.00f }, RC_WOODS_OF_MYSTERY_GRASS_09 },
- { { -952.00f, 77.00f }, RC_WOODS_OF_MYSTERY_GRASS_10 },
- { { -915.00f, -74.00f }, RC_WOODS_OF_MYSTERY_GRASS_11 },
- { { -958.00f, -755.00f }, RC_WOODS_OF_MYSTERY_GRASS_12 },
- { { -906.00f, -1034.00f }, RC_WOODS_OF_MYSTERY_GRASS_13 },
- { { -1894.00f, -874.00f }, RC_WOODS_OF_MYSTERY_GRASS_14 },
- { { -1876.00f, -821.00f }, RC_WOODS_OF_MYSTERY_GRASS_15 },
- { { -1696.00f, -892.00f }, RC_WOODS_OF_MYSTERY_GRASS_16 },
- { { -1690.00f, -1023.00f }, RC_WOODS_OF_MYSTERY_GRASS_17 },
- { { -1631.00f, -727.00f }, RC_WOODS_OF_MYSTERY_GRASS_18 },
- { { -1942.00f, 42.00f }, RC_WOODS_OF_MYSTERY_GRASS_19 },
- { { -1702.00f, -24.00f }, RC_WOODS_OF_MYSTERY_GRASS_20 },
- { { 100.00f, -970.00f }, RC_WOODS_OF_MYSTERY_GRASS_21 },
- } },
- { SCENE_21MITURINMAE,
- {
- { { -135.00f, -1401.00f }, RC_WOODFALL_GRASS_01 },
- { { -200.00f, -1447.00f }, RC_WOODFALL_GRASS_02 },
- { { -186.00f, -1379.00f }, RC_WOODFALL_GRASS_03 },
- { { 70.00f, -1409.00f }, RC_WOODFALL_GRASS_04 },
- { { 126.00f, -1455.00f }, RC_WOODFALL_GRASS_05 },
- { { 114.00f, -1377.00f }, RC_WOODFALL_GRASS_06 },
- } },
+// For large swathes of grass that share a singular actor
+std::map<std::tuple<s16, u8>, std::tuple<s16, RandoCheckId>> grassObjMap = {
+ { { SCENE_00KEIKOKU, 0 }, { 18, RC_TERMINA_FIELD_GRASS_01 } },
+ { { SCENE_F01, 0 }, { 5, RC_ROMANI_RANCH_GRASS_01 } },
+ { { SCENE_20SICHITAI2, 0 }, { 1, RC_SOUTHERN_SWAMP_CLEARED_GRASS_01 } },
+ { { SCENE_20SICHITAI2, 2 }, { 1, RC_SOUTHERN_SWAMP_CLEARED_GRASS_13 } },
+ { { SCENE_20SICHITAI, 0 }, { 1, RC_SOUTHERN_SWAMP_POISON_GRASS_01 } },
+ { { SCENE_20SICHITAI, 2 }, { 1, RC_SOUTHERN_SWAMP_POISON_GRASS_13 } },
+ { { SCENE_24KEMONOMITI, 0 }, { 2, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_03 } },
+ { { SCENE_17SETUGEN2, 0 }, { 1, RC_TWIN_ISLANDS_SPRING_GRASS_01 } },
+ { { SCENE_KOEPONARACE, 0 }, { 2, RC_GORMAN_TRACK_GRASS_01 } },
+ { { SCENE_KAKUSIANA, 5 }, { 2, RC_LONE_PEAK_SHRINE_GRASS_01 } },
+ { { SCENE_KAKUSIANA, 12 }, { 1, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_01 } },
+ { { SCENE_KAKUSIANA, 13 }, { 1, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_01 } },
};
-std::map<int16_t, std::map<std::pair<float, float>, RandoCheckId>> grottoGrassMap = {
- { -1,
- {
- { { 2285.00f, 883.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_01 },
- { { 2263.00f, 913.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_02 },
- { { 2221.00f, 909.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_03 },
- { { 2205.00f, 871.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_04 },
- { { 2245.00f, 857.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_05 },
- { { 2316.00f, 913.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_06 },
- { { 2245.00f, 957.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_07 },
- { { 2174.00f, 913.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_08 },
- { { 2174.00f, 841.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_09 },
- { { 2209.00f, 806.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_10 },
- { { 2257.00f, 798.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_11 },
- { { 2287.00f, 835.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_12 },
- { { 2324.00f, 1073.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_13 },
- { { 2302.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_14 },
- { { 2260.00f, 1099.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_15 },
- { { 2244.00f, 1061.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_16 },
- { { 2284.00f, 1047.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_17 },
- { { 2355.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_18 },
- { { 2284.00f, 1147.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_19 },
- { { 2213.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_20 },
- { { 2213.00f, 1031.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_21 },
- { { 2248.00f, 996.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_22 },
- { { 2296.00f, 988.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_23 },
- { { 2326.00f, 1025.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_24 },
- { { 2438.00f, 993.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_25 },
- { { 2416.00f, 1023.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_26 },
- { { 2374.00f, 1019.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_27 },
- { { 2358.00f, 981.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_28 },
- { { 2398.00f, 967.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_29 },
- { { 2469.00f, 1023.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_30 },
- { { 2398.00f, 1067.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_31 },
- { { 2327.00f, 1023.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_32 },
- { { 2327.00f, 951.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_33 },
- { { 2362.00f, 916.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_34 },
- { { 2410.00f, 908.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_35 },
- { { 2440.00f, 945.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_36 },
- { { 2466.00f, 747.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_37 },
- { { 2444.00f, 777.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_38 },
- { { 2402.00f, 773.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_39 },
- { { 2386.00f, 735.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_40 },
- { { 2426.00f, 721.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_41 },
- { { 2497.00f, 777.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_42 },
- { { 2426.00f, 821.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_43 },
- { { 2355.00f, 777.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_44 },
- { { 2355.00f, 705.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_45 },
- { { 2390.00f, 670.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_46 },
- { { 2438.00f, 662.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_47 },
- { { 2468.00f, 699.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_48 },
- { { 2576.00f, 842.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_49 },
- { { 2554.00f, 872.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_50 },
- { { 2512.00f, 868.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_51 },
- { { 2496.00f, 830.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_52 },
- { { 2536.00f, 816.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_53 },
- { { 2607.00f, 872.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_54 },
- { { 2536.00f, 916.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_55 },
- { { 2465.00f, 872.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_56 },
- { { 2465.00f, 800.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_57 },
- { { 2500.00f, 765.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_58 },
- { { 2548.00f, 757.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_59 },
- { { 2578.00f, 794.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_60 },
- { { 2593.00f, 1073.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_61 },
- { { 2571.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_62 },
- { { 2529.00f, 1099.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_63 },
- { { 2513.00f, 1061.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_64 },
- { { 2553.00f, 1047.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_65 },
- { { 2624.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_66 },
- { { 2553.00f, 1147.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_67 },
- { { 2482.00f, 1103.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_68 },
- { { 2482.00f, 1031.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_69 },
- { { 2517.00f, 996.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_70 },
- { { 2565.00f, 988.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_71 },
- { { 2595.00f, 1025.00f }, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_72 },
- } },
- { ENTRANCE(GROTTOS, 16),
- {
- { { 4323.00f, -466.00f }, RC_LONE_PEAK_SHRINE_GRASS_01 },
- { { 4301.00f, -436.00f }, RC_LONE_PEAK_SHRINE_GRASS_02 },
- { { 4259.00f, -440.00f }, RC_LONE_PEAK_SHRINE_GRASS_03 },
- { { 4243.00f, -478.00f }, RC_LONE_PEAK_SHRINE_GRASS_04 },
- { { 4283.00f, -492.00f }, RC_LONE_PEAK_SHRINE_GRASS_05 },
- { { 4354.00f, -436.00f }, RC_LONE_PEAK_SHRINE_GRASS_06 },
- { { 4283.00f, -392.00f }, RC_LONE_PEAK_SHRINE_GRASS_07 },
- { { 4212.00f, -436.00f }, RC_LONE_PEAK_SHRINE_GRASS_08 },
- { { 4212.00f, -508.00f }, RC_LONE_PEAK_SHRINE_GRASS_09 },
- { { 4247.00f, -543.00f }, RC_LONE_PEAK_SHRINE_GRASS_10 },
- { { 4295.00f, -551.00f }, RC_LONE_PEAK_SHRINE_GRASS_11 },
- { { 4325.00f, -514.00f }, RC_LONE_PEAK_SHRINE_GRASS_12 },
- { { 4592.00f, -613.00f }, RC_LONE_PEAK_SHRINE_GRASS_13 },
- { { 4570.00f, -583.00f }, RC_LONE_PEAK_SHRINE_GRASS_14 },
- { { 4528.00f, -587.00f }, RC_LONE_PEAK_SHRINE_GRASS_15 },
- { { 4512.00f, -625.00f }, RC_LONE_PEAK_SHRINE_GRASS_16 },
- { { 4552.00f, -639.00f }, RC_LONE_PEAK_SHRINE_GRASS_17 },
- { { 4623.00f, -583.00f }, RC_LONE_PEAK_SHRINE_GRASS_18 },
- { { 4552.00f, -539.00f }, RC_LONE_PEAK_SHRINE_GRASS_19 },
- { { 4481.00f, -583.00f }, RC_LONE_PEAK_SHRINE_GRASS_20 },
- { { 4481.00f, -655.00f }, RC_LONE_PEAK_SHRINE_GRASS_21 },
- { { 4516.00f, -690.00f }, RC_LONE_PEAK_SHRINE_GRASS_22 },
- { { 4564.00f, -698.00f }, RC_LONE_PEAK_SHRINE_GRASS_23 },
- { { 4594.00f, -661.00f }, RC_LONE_PEAK_SHRINE_GRASS_24 },
- } },
- { ENTRANCE(GROTTOS, 12),
- {
- { { 4137.00f, 1073.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_01 },
- { { 4115.00f, 1103.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_02 },
- { { 4073.00f, 1099.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_03 },
- { { 4057.00f, 1061.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_04 },
- { { 4097.00f, 1047.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_05 },
- { { 4168.00f, 1103.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_06 },
- { { 4097.00f, 1147.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_07 },
- { { 4026.00f, 1103.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_08 },
- { { 4026.00f, 1031.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_09 },
- { { 4061.00f, 996.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_10 },
- { { 4109.00f, 988.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_11 },
- { { 4139.00f, 1025.00f }, RC_DEKU_PALACE_BEAN_SALESMAN_GROTTO_GRASS_12 },
- } },
- { 31,
- {
- { { 2285.00f, 883.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_01 },
- { { 2263.00f, 913.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_02 },
- { { 2221.00f, 909.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_03 },
- { { 2205.00f, 871.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_04 },
- { { 2245.00f, 857.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_05 },
- { { 2316.00f, 913.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_06 },
- { { 2245.00f, 957.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_07 },
- { { 2174.00f, 913.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_08 },
- { { 2174.00f, 841.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_09 },
- { { 2209.00f, 806.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_10 },
- { { 2257.00f, 798.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_11 },
- { { 2287.00f, 835.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_12 },
- { { 2324.00f, 1073.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_13 },
- { { 2302.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_14 },
- { { 2260.00f, 1099.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_15 },
- { { 2244.00f, 1061.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_16 },
- { { 2284.00f, 1047.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_17 },
- { { 2355.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_18 },
- { { 2284.00f, 1147.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_19 },
- { { 2213.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_20 },
- { { 2213.00f, 1031.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_21 },
- { { 2248.00f, 996.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_22 },
- { { 2296.00f, 988.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_23 },
- { { 2326.00f, 1025.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_24 },
- { { 2438.00f, 993.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_25 },
- { { 2416.00f, 1023.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_26 },
- { { 2374.00f, 1019.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_27 },
- { { 2358.00f, 981.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_28 },
- { { 2398.00f, 967.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_29 },
- { { 2469.00f, 1023.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_30 },
- { { 2398.00f, 1067.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_31 },
- { { 2327.00f, 1023.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_32 },
- { { 2327.00f, 951.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_33 },
- { { 2362.00f, 916.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_34 },
- { { 2410.00f, 908.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_35 },
- { { 2440.00f, 945.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_36 },
- { { 2466.00f, 747.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_37 },
- { { 2444.00f, 777.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_38 },
- { { 2402.00f, 773.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_39 },
- { { 2386.00f, 735.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_40 },
- { { 2426.00f, 721.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_41 },
- { { 2497.00f, 777.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_42 },
- { { 2426.00f, 821.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_43 },
- { { 2355.00f, 777.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_44 },
- { { 2355.00f, 705.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_45 },
- { { 2390.00f, 670.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_46 },
- { { 2438.00f, 662.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_47 },
- { { 2468.00f, 699.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_48 },
- { { 2576.00f, 842.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_49 },
- { { 2554.00f, 872.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_50 },
- { { 2512.00f, 868.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_51 },
- { { 2496.00f, 830.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_52 },
- { { 2536.00f, 816.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_53 },
- { { 2607.00f, 872.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_54 },
- { { 2536.00f, 916.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_55 },
- { { 2465.00f, 872.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_56 },
- { { 2465.00f, 800.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_57 },
- { { 2500.00f, 765.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_58 },
- { { 2548.00f, 757.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_59 },
- { { 2578.00f, 794.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_60 },
- { { 2593.00f, 1073.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_61 },
- { { 2571.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_62 },
- { { 2529.00f, 1099.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_63 },
- { { 2513.00f, 1061.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_64 },
- { { 2553.00f, 1047.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_65 },
- { { 2624.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_66 },
- { { 2553.00f, 1147.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_67 },
- { { 2482.00f, 1103.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_68 },
- { { 2482.00f, 1031.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_69 },
- { { 2517.00f, 996.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_70 },
- { { 2565.00f, 988.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_71 },
- { { 2595.00f, 1025.00f }, RC_TERMINA_FIELD_COW_GROTTO_GRASS_72 },
- } },
- { ENTRANCE(GROTTOS, 11),
- {
- { { 2927.00f, 1308.00f }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_01 },
- { { 2966.00f, 1409.00f }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_02 },
- } },
- { ENTRANCE(GROTTOS, 13),
- {
- { { 5415.00f, 454.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_01 },
- { { 5393.00f, 484.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_02 },
- { { 5351.00f, 480.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_03 },
- { { 5335.00f, 442.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_04 },
- { { 5375.00f, 428.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_05 },
- { { 5446.00f, 484.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_06 },
- { { 5375.00f, 528.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_07 },
- { { 5304.00f, 484.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_08 },
- { { 5304.00f, 412.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_09 },
- { { 5339.00f, 377.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_10 },
- { { 5387.00f, 369.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_11 },
- { { 5417.00f, 406.00f }, RC_TERMINA_FIELD_PEAHAT_GROTTO_GRASS_12 },
- } },
- { ENTRANCE(GROTTOS, 2),
- {
- { { 1153.00f, 218.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_01 },
- { { 1199.00f, -365.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_02 },
- { { 1252.00f, -372.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_03 },
- { { 1295.00f, 27.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_04 },
- { { 1321.00f, 113.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_05 },
- } },
- { ENTRANCE(GROTTOS, 0),
- {
- { { -42.00f, -3.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_01 },
- { { 87.00f, -26.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_02 },
- { { 103.00f, -112.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_03 },
- { { 113.00f, 43.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_04 },
- { { 137.00f, 93.00f }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_05 },
- } },
- { 51,
- {
- { { 2339.00f, 129.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_14 },
- } },
- { 55,
- {
- { { 2339.00f, 129.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_14 },
- } },
- { 59,
- {
- { { 2339.00f, 129.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_14 },
- } },
- { 61,
- {
- { { 2339.00f, 129.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_SOUTHERN_SWAMP_GROTTO_GRASS_14 },
- } },
- { 62,
- {
- { { 2339.00f, 129.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_14 },
- } },
- { 63,
- {
- { { 2339.00f, 129.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_14 },
- } },
- { -72,
- {
- { { 2339.00f, 129.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_IKANA_GRAVEYARD_GROTTO_GRASS_14 },
- } },
- { -76,
- {
- { { 2339.00f, 129.00f }, RC_IKANA_CANYON_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_IKANA_CANYON_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_IKANA_CANYON_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_IKANA_CANYON_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_IKANA_CANYON_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_IKANA_CANYON_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_IKANA_CANYON_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_IKANA_CANYON_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_IKANA_CANYON_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_IKANA_CANYON_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_IKANA_CANYON_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_IKANA_CANYON_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_IKANA_CANYON_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_IKANA_CANYON_GROTTO_GRASS_14 },
- } },
- { 92,
- {
- { { 2339.00f, 129.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_14 },
- } },
- { -102,
- {
- { { 2339.00f, 129.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_14 },
- } },
- { -103,
- {
- { { 2339.00f, 129.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_14 },
- } },
- { -106,
- {
- { { 2339.00f, 129.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_ROAD_TO_IKANA_GROTTO_GRASS_14 },
- } },
- { -107,
- {
- { { 2339.00f, 129.00f }, RC_ZORA_CAPE_GROTTO_GRASS_01 },
- { { 2345.00f, -174.00f }, RC_ZORA_CAPE_GROTTO_GRASS_02 },
- { { 2355.00f, -310.00f }, RC_ZORA_CAPE_GROTTO_GRASS_03 },
- { { 2355.00f, -225.00f }, RC_ZORA_CAPE_GROTTO_GRASS_04 },
- { { 2391.00f, -313.00f }, RC_ZORA_CAPE_GROTTO_GRASS_05 },
- { { 2403.00f, -360.00f }, RC_ZORA_CAPE_GROTTO_GRASS_06 },
- { { 2460.00f, 215.00f }, RC_ZORA_CAPE_GROTTO_GRASS_07 },
- { { 2484.00f, -213.00f }, RC_ZORA_CAPE_GROTTO_GRASS_08 },
- { { 2500.00f, 26.00f }, RC_ZORA_CAPE_GROTTO_GRASS_09 },
- { { 2508.00f, 152.00f }, RC_ZORA_CAPE_GROTTO_GRASS_10 },
- { { 2520.00f, -463.00f }, RC_ZORA_CAPE_GROTTO_GRASS_11 },
- { { 2522.00f, -243.00f }, RC_ZORA_CAPE_GROTTO_GRASS_12 },
- { { 2524.00f, 58.00f }, RC_ZORA_CAPE_GROTTO_GRASS_13 },
- { { 2534.00f, -190.00f }, RC_ZORA_CAPE_GROTTO_GRASS_14 },
- } },
+std::map<s8, std::tuple<s16, RandoCheckId>> cowGrottoMap = {
+ { -1, { 6, RC_GREAT_BAY_COAST_COW_GROTTO_GRASS_01 } },
+ { 31, { 6, RC_TERMINA_FIELD_COW_GROTTO_GRASS_01 } },
};
-// clang-format on
-
-#define ENKUSA_RC (actor->home.rot.x)
-
-float roundToWholeNumber(float value) {
- int rounded = std::round(value);
- float fnum = static_cast<float>(rounded);
-
- return fnum;
-}
-RandoCheckId IdentifyGrass(Vec3f pos) {
- RandoCheckId randoCheckId = RC_UNKNOWN;
- pos.x = roundToWholeNumber(pos.x);
- pos.z = roundToWholeNumber(pos.z);
-
- const auto& grassMap = (gPlayState->sceneId != SCENE_KAKUSIANA) ? overworldGrassMap : grottoGrassMap;
- uint32_t key =
- (gPlayState->sceneId != SCENE_KAKUSIANA) ? static_cast<uint16_t>(gPlayState->sceneId)
- : (gSaveContext.save.entrance == ENTRANCE(GROTTOS, 4) || gSaveContext.save.entrance == ENTRANCE(GROTTOS, 10))
- ? gSaveContext.respawn[RESPAWN_MODE_UNK_3].data
- : gSaveContext.save.entrance;
-
- auto it = grassMap.find(key);
- if (it == grassMap.end()) {
- return randoCheckId;
- }
-
- auto innerIt = it->second.find({ pos.x, pos.z });
- if (innerIt == it->second.end()) {
- return randoCheckId;
- }
+// For lone grass actors spawned directly by the scene
+std::map<std::tuple<s16, s16, s16>, RandoCheckId> enKusaMap = {
+ { { SCENE_30GYOSON, 0, 110 }, RC_GREAT_BAY_COAST_GRASS_01 },
+ { { SCENE_30GYOSON, 0, 111 }, RC_GREAT_BAY_COAST_GRASS_02 },
+ { { SCENE_30GYOSON, 0, 112 }, RC_GREAT_BAY_COAST_GRASS_03 },
+ { { SCENE_30GYOSON, 0, 113 }, RC_GREAT_BAY_COAST_GRASS_04 },
+ { { SCENE_30GYOSON, 0, 114 }, RC_GREAT_BAY_COAST_GRASS_05 },
+ // Laundry Pool
+ { { SCENE_ALLEY, 0, 13 }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_01 },
+ { { SCENE_ALLEY, 0, 14 }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_02 },
+ { { SCENE_ALLEY, 0, 15 }, RC_CLOCK_TOWN_LAUNDRY_POOL_GRASS_03 },
+ // Road to Southern Swamp
+ { { SCENE_24KEMONOMITI, 0, 47 }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_01 },
+ { { SCENE_24KEMONOMITI, 0, 48 }, RC_ROAD_TO_SOUTHERN_SWAMP_GRASS_02 },
+ // Mountain Village (spring)
+ { { SCENE_10YUKIYAMANOMURA2, 0, 26 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_01 },
+ { { SCENE_10YUKIYAMANOMURA2, 0, 27 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_02 },
+ { { SCENE_10YUKIYAMANOMURA2, 0, 28 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_03 },
+ // Woods of Mystery
+ { { SCENE_26SARUNOMORI, 1, 3 }, RC_WOODS_OF_MYSTERY_GRASS_01 },
+ { { SCENE_26SARUNOMORI, 1, 4 }, RC_WOODS_OF_MYSTERY_GRASS_02 },
+ { { SCENE_26SARUNOMORI, 1, 5 }, RC_WOODS_OF_MYSTERY_GRASS_03 },
+ { { SCENE_26SARUNOMORI, 0, 0 }, RC_WOODS_OF_MYSTERY_GRASS_04 },
+ { { SCENE_26SARUNOMORI, 0, 1 }, RC_WOODS_OF_MYSTERY_GRASS_05 },
+ { { SCENE_26SARUNOMORI, 3, 7 }, RC_WOODS_OF_MYSTERY_GRASS_06 },
+ { { SCENE_26SARUNOMORI, 3, 8 }, RC_WOODS_OF_MYSTERY_GRASS_07 },
+ { { SCENE_26SARUNOMORI, 4, 6 }, RC_WOODS_OF_MYSTERY_GRASS_08 },
+ { { SCENE_26SARUNOMORI, 4, 7 }, RC_WOODS_OF_MYSTERY_GRASS_09 },
+ { { SCENE_26SARUNOMORI, 4, 8 }, RC_WOODS_OF_MYSTERY_GRASS_10 },
+ { { SCENE_26SARUNOMORI, 4, 9 }, RC_WOODS_OF_MYSTERY_GRASS_11 },
+ { { SCENE_26SARUNOMORI, 5, 7 }, RC_WOODS_OF_MYSTERY_GRASS_12 },
+ { { SCENE_26SARUNOMORI, 5, 8 }, RC_WOODS_OF_MYSTERY_GRASS_13 },
+ { { SCENE_26SARUNOMORI, 8, 1 }, RC_WOODS_OF_MYSTERY_GRASS_14 },
+ { { SCENE_26SARUNOMORI, 8, 2 }, RC_WOODS_OF_MYSTERY_GRASS_15 },
+ { { SCENE_26SARUNOMORI, 8, 3 }, RC_WOODS_OF_MYSTERY_GRASS_16 },
+ { { SCENE_26SARUNOMORI, 8, 4 }, RC_WOODS_OF_MYSTERY_GRASS_17 },
+ { { SCENE_26SARUNOMORI, 8, 6 }, RC_WOODS_OF_MYSTERY_GRASS_18 },
+ { { SCENE_26SARUNOMORI, 7, 7 }, RC_WOODS_OF_MYSTERY_GRASS_19 },
+ { { SCENE_26SARUNOMORI, 7, 8 }, RC_WOODS_OF_MYSTERY_GRASS_20 },
+ { { SCENE_26SARUNOMORI, 2, 1 }, RC_WOODS_OF_MYSTERY_GRASS_21 },
+ { { SCENE_26SARUNOMORI, 6, 1 }, RC_WOODS_OF_MYSTERY_GRASS_22 },
+ { { SCENE_26SARUNOMORI, 6, 2 }, RC_WOODS_OF_MYSTERY_GRASS_23 },
+ // Woodfall
+ { { SCENE_21MITURINMAE, 0, 18 }, RC_WOODFALL_GRASS_01 },
+ { { SCENE_21MITURINMAE, 0, 17 }, RC_WOODFALL_GRASS_02 },
+ { { SCENE_21MITURINMAE, 0, 19 }, RC_WOODFALL_GRASS_03 },
+ { { SCENE_21MITURINMAE, 0, 22 }, RC_WOODFALL_GRASS_04 },
+ { { SCENE_21MITURINMAE, 0, 21 }, RC_WOODFALL_GRASS_05 },
+ { { SCENE_21MITURINMAE, 0, 20 }, RC_WOODFALL_GRASS_06 },
+ // Woodfall (Clear)
+ { { SCENE_21MITURINMAE, 0, 10 }, RC_WOODFALL_GRASS_01 },
+ { { SCENE_21MITURINMAE, 0, 9 }, RC_WOODFALL_GRASS_02 },
+ { { SCENE_21MITURINMAE, 0, 11 }, RC_WOODFALL_GRASS_03 },
+ { { SCENE_21MITURINMAE, 0, 14 }, RC_WOODFALL_GRASS_04 },
+ { { SCENE_21MITURINMAE, 0, 13 }, RC_WOODFALL_GRASS_05 },
+ { { SCENE_21MITURINMAE, 0, 12 }, RC_WOODFALL_GRASS_06 },
+ // Grottos (unique)
+ { { SCENE_KAKUSIANA, 0, 1 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_01 },
+ { { SCENE_KAKUSIANA, 0, 4 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_02 },
+ { { SCENE_KAKUSIANA, 0, 6 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_03 },
+ { { SCENE_KAKUSIANA, 0, 7 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_04 },
+ { { SCENE_KAKUSIANA, 0, 8 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_3_GRASS_05 },
+ { { SCENE_KAKUSIANA, 2, 0 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_01 },
+ { { SCENE_KAKUSIANA, 2, 1 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_02 },
+ { { SCENE_KAKUSIANA, 2, 2 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_03 },
+ { { SCENE_KAKUSIANA, 2, 3 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_04 },
+ { { SCENE_KAKUSIANA, 2, 4 }, RC_TERMINA_FIELD_GOSSIP_STONE_GROTTO_4_GRASS_05 },
+ { { SCENE_KAKUSIANA, 11, 0 }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_01 },
+ { { SCENE_KAKUSIANA, 11, 3 }, RC_TERMINA_FIELD_BIO_BABA_GROTTO_GRASS_02 },
+};
- randoCheckId = innerIt->second;
- if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
- return RC_UNKNOWN;
- }
+// For lone grass actors spawned in chest grottos
+std::map<s8, RandoCheckId> chestGrottoMap = {
+ { 51, RC_PATH_TO_SNOWHEAD_GROTTO_GRASS_01 },
+ { 55, RC_GREAT_BAY_COAST_FISHERMAN_GROTTO_GRASS_01 },
+ { 59, RC_MOUNTAIN_VILLAGE_TUNNEL_GROTTO_GRASS_01 },
+ { 61, RC_SOUTHERN_SWAMP_GROTTO_GRASS_01 },
+ { 62, RC_ROAD_TO_SOUTHERN_SWAMP_GROTTO_GRASS_01 },
+ { 63, RC_TERMINA_FIELD_TALL_GRASS_GROTTO_GRASS_01 },
+ { -72, RC_IKANA_GRAVEYARD_GROTTO_GRASS_01 },
+ { -76, RC_IKANA_CANYON_GROTTO_GRASS_01 },
+ { 92, RC_WOODS_OF_MYSTERY_GROTTO_GRASS_01 },
+ { -102, RC_TERMINA_FIELD_PILLAR_GROTTO_GRASS_01 },
+ { -103, RC_TWIN_ISLANDS_RAMP_GROTTO_GRASS_01 },
+ { -106, RC_ROAD_TO_IKANA_GROTTO_GRASS_01 },
+ { -107, RC_ZORA_CAPE_GROTTO_GRASS_01 },
+};
- return randoCheckId;
-}
+// For batches of grass spawned by Obj_Mure2
+std::map<std::tuple<u16, u8, s16>, RandoCheckId> objMure2GrassMap = {
+ { { SCENE_10YUKIYAMANOMURA2, 0, 29 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_04 },
+ { { SCENE_10YUKIYAMANOMURA2, 0, 30 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_13 },
+ { { SCENE_10YUKIYAMANOMURA2, 0, 31 }, RC_MOUNTAIN_VILLAGE_SPRING_GRASS_22 },
+ { { SCENE_BOTI, 1, 47 }, RC_IKANA_GRAVEYARD_GRASS_01 },
+};
+// clang-format on
void SpawnGrassDrop(Vec3f pos, RandoCheckId randoCheckId) {
CustomItem::Spawn(
@@ -1044,7 +162,8 @@ void EnKusaBush_RandoDraw(Actor* actor, PlayState* play) {
return;
}
- RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[ENKUSA_RC].randoItemId, (RandoCheckId)ENKUSA_RC);
+ RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
+ RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId);
RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType;
switch (randoItemType) {
@@ -1196,8 +315,30 @@ void ObjGrass_RandoDrawXlu(ObjGrass* objGrass, ObjGrassElement* grassElem, Rando
}
void Rando::ActorBehavior::InitObjGrassBehavior() {
+ /*
+ * Identify directly spawned actor grass by scene ID, room, and actor list index. If this is a common chest grotto,
+ * use respawn data to retrieve the base RC. The grass actors and RCs are both in contiguous order, so the base RC
+ * can be incremented to get each grass actor's target RC value.
+ */
COND_ID_HOOK(OnActorInit, ACTOR_EN_KUSA, IS_RANDO, [](Actor* actor) {
- RandoCheckId randoCheckId = IdentifyGrass(actor->home.pos);
+ s16 actorListIndex = GetActorListIndex(actor);
+ if (actorListIndex < 0) { // This grass was placed by a spawner, not scene data
+ return;
+ }
+
+ RandoCheckId randoCheckId = RC_UNKNOWN;
+ if (gPlayState->sceneId == SCENE_KAKUSIANA && actor->room == 4) { // Common chest grotto
+ auto it = chestGrottoMap.find(gSaveContext.respawn[RESPAWN_MODE_UNK_3].data);
+ if (it != chestGrottoMap.end()) {
+ randoCheckId = static_cast<RandoCheckId>(it->second + actorListIndex);
+ }
+ } else {
+ auto it = enKusaMap.find({ gPlayState->sceneId, actor->room, actorListIndex });
+ if (it != enKusaMap.end()) {
+ randoCheckId = it->second;
+ }
+ }
+
if (randoCheckId == RC_UNKNOWN) {
return;
}
@@ -1206,12 +347,99 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
return;
}
- ENKUSA_RC = randoCheckId;
+ SetObjectRandoCheckId(actor, randoCheckId);
+ });
+
+ /*
+ * Identify actor grass that was spawned by a spawner actor, by scene ID, room, and the spawner's actor list index.
+ * The RCs and child grass are contiguous, so they can increment the base value to get their target RC.
+ */
+ COND_VB_SHOULD(VB_OBJ_MURE2_SET_CHILD_ROOM, IS_RANDO, {
+ Actor* actor = va_arg(args, Actor*);
+ ObjMure2* objMure2 = (ObjMure2*)actor;
+ s32 i = va_arg(args, s32);
+ Actor* child = objMure2->actors[i];
+ if (child != nullptr && child->id == ACTOR_EN_KUSA) {
+ auto it = objMure2GrassMap.find({ gPlayState->sceneId, actor->room, GetActorListIndex(actor) });
+ if (it != objMure2GrassMap.end()) {
+ RandoCheckId randoCheckId = static_cast<RandoCheckId>(it->second + i);
+ SetObjectRandoCheckId(child, randoCheckId);
+ }
+ }
+ });
+
+ /*
+ * This handles non-actor grass, which can be complicated to follow. Scenes define Obj_Grass_Unit, which itself has
+ * multiple grass children elements. Once a grass unit is done initializing, its child elements get added to a
+ * singleton ObjGrass manager to handle all the grass elements in the scene and room. The grass unit itself gets
+ * killed.
+ *
+ * This hook checks that, upon killing a grass object, whether it is the last one for the scene. If it is, it then
+ * consults the ObjGrass manager singleton to iterate its children and grandchildren for each ObjGrassElement to
+ * assign its respective RC. RCs are derived from the scene ID and room, as there is only one ObjGrass manager per
+ * scene. Cow grottos use respawn data instead. The order that grass elements are processed is deterministic each
+ * load and contiguous, so we can just increment the base RC like always.
+ */
+ COND_ID_HOOK(OnActorKill, ACTOR_OBJ_GRASS_UNIT, IS_RANDO, [](Actor* actor) {
+ s16 maxActiveGrassGroups = 0;
+ RandoCheckId baseCheckId;
+
+ if (gPlayState->sceneId == SCENE_KAKUSIANA && actor->room == 10) { // Cow grottos
+ auto it = cowGrottoMap.find(gSaveContext.respawn[RESPAWN_MODE_UNK_3].data);
+ if (it == cowGrottoMap.end()) {
+ return;
+ }
+ maxActiveGrassGroups = std::get<s16>(it->second);
+ baseCheckId = std::get<RandoCheckId>(it->second);
+ } else {
+ auto it = grassObjMap.find({ gPlayState->sceneId, actor->room });
+ if (it == grassObjMap.end()) {
+ return;
+ }
+ maxActiveGrassGroups = std::get<s16>(it->second);
+ baseCheckId = std::get<RandoCheckId>(it->second);
+ }
+
+ if (sGrassManager->activeGrassGroups < maxActiveGrassGroups) {
+ return;
+ }
+
+ ObjGrassGroup* grassGroup;
+ int grassIndex = 0;
+ for (int i = 0; i < sGrassManager->activeGrassGroups; i++) {
+ grassGroup = &sGrassManager->grassGroups[i];
+ for (int j = 0; j < grassGroup->count; j++) {
+ RandoCheckId randoCheckId = RandoCheckId(baseCheckId + grassIndex++);
+ if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
+ continue;
+ }
+ SetObjectRandoCheckId(&grassGroup->elements[j], randoCheckId);
+ }
+ }
+ });
+
+ // If actor grass was not spawned directly in the scene, we must manually free the extension RC.
+ COND_ID_HOOK(OnActorDestroy, ACTOR_EN_KUSA, IS_RANDO, [](Actor* actor) {
+ if (GetActorListIndex(actor) < 0) {
+ ObjectExtension_Free(actor);
+ }
+ });
+
+ // There should only be one of this actor active at any time. Iterate its grandchildren and free the extension.
+ COND_ID_HOOK(OnActorDestroy, ACTOR_OBJ_GRASS, IS_RANDO, [](Actor* actor) {
+ ObjGrassGroup* grassGroup;
+ ObjGrass* objGrass = (ObjGrass*)actor;
+ for (int i = 0; i < objGrass->activeGrassGroups; i++) {
+ grassGroup = &objGrass->grassGroups[i];
+ for (int j = 0; j < grassGroup->count; j++) {
+ ObjectExtension_Free(&grassGroup->elements[j]);
+ }
+ }
});
COND_VB_SHOULD(VB_KUSA_BUSH_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- if (ENKUSA_RC != RC_UNKNOWN) {
+ if (GetObjectRandoCheckId(actor) != RC_UNKNOWN) {
*should = false;
actor->draw = EnKusaBush_RandoDraw;
}
@@ -1221,7 +449,7 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
ObjGrass* objGrass = va_arg(args, ObjGrass*);
ObjGrassElement* grassElem = va_arg(args, ObjGrassElement*);
s32 j = va_arg(args, s32);
- RandoCheckId randoCheckId = IdentifyGrass(grassElem->pos);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(grassElem);
if (randoCheckId != RC_UNKNOWN) {
*should = false;
ObjGrass_RandoDrawOpa(objGrass, grassElem, j, randoCheckId);
@@ -1231,7 +459,7 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
COND_VB_SHOULD(VB_OBJGRASS_XLU_DRAW_BE_OVERRIDDEN, IS_RANDO, {
ObjGrass* objGrass = va_arg(args, ObjGrass*);
ObjGrassElement* grassElem = va_arg(args, ObjGrassElement*);
- RandoCheckId randoCheckId = IdentifyGrass(grassElem->pos);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(grassElem);
if (randoCheckId != RC_UNKNOWN) {
*should = false;
ObjGrass_RandoDrawXlu(objGrass, grassElem, randoCheckId);
@@ -1241,37 +469,34 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
COND_VB_SHOULD(VB_CARRY_GRASS_DRAW_BE_OVERRIDDEN, IS_RANDO, {
ObjGrassCarry* grassCarryActor = va_arg(args, ObjGrassCarry*);
Actor* actor = &grassCarryActor->actor;
- RandoCheckId randoCheckId = IdentifyGrass(grassCarryActor->grassElem->pos);
- ENKUSA_RC = randoCheckId;
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(grassCarryActor->grassElem);
+ SetObjectRandoCheckId(actor, randoCheckId);
if (randoCheckId != RC_UNKNOWN) {
*should = false;
grassCarryActor->actor.draw = EnKusaBush_RandoDraw;
}
});
+ // The grass has been destroyed, so spawn a collectible item based on the grass's RC value.
COND_VB_SHOULD(VB_GRASS_DROP_COLLECTIBLE, IS_RANDO, {
auto actorId = static_cast<ActorId>(va_arg(args, int32_t));
- ObjGrassElement* grassElemActor;
- EnKusa* kusaActor;
- ObjGrassCarry* grassCarryActor;
- Vec3f grassIdPos = gZeroVec3f;
Vec3f collectiblePos = gZeroVec3f;
+ RandoCheckId randoCheckId;
if (actorId == ACTOR_OBJ_GRASS) {
- grassElemActor = va_arg(args, ObjGrassElement*);
- grassIdPos = grassElemActor->pos;
- collectiblePos = grassIdPos;
+ ObjGrassElement* grassElemActor = va_arg(args, ObjGrassElement*);
+ collectiblePos = grassElemActor->pos;
+ randoCheckId = GetObjectRandoCheckId(grassElemActor);
} else if (actorId == ACTOR_EN_KUSA) {
- kusaActor = va_arg(args, EnKusa*);
- grassIdPos = kusaActor->actor.home.pos;
+ EnKusa* kusaActor = va_arg(args, EnKusa*);
collectiblePos = kusaActor->actor.world.pos;
+ randoCheckId = GetObjectRandoCheckId(kusaActor);
} else if (actorId == ACTOR_OBJ_GRASS_CARRY) {
- grassCarryActor = va_arg(args, ObjGrassCarry*);
- grassIdPos = grassCarryActor->grassElem->pos;
+ ObjGrassCarry* grassCarryActor = va_arg(args, ObjGrassCarry*);
collectiblePos = grassCarryActor->actor.world.pos;
+ randoCheckId = GetObjectRandoCheckId(grassCarryActor);
}
- RandoCheckId randoCheckId = IdentifyGrass(grassIdPos);
if (randoCheckId == RC_UNKNOWN) {
return;
}
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp b/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
index eff252a17..a21d48762 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
@@ -1,6 +1,7 @@
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
#include "2s2h/CustomItem/CustomItem.h"
+#include "2s2h/ObjectExtension/ActorListIndex.h"
#include "assets/2s2h_assets.h"
extern "C" {
@@ -9,122 +10,133 @@ extern "C" {
#include "src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h"
}
-#define OBJKIBAKO_RC (actor->home.rot.x)
-
-std::map<std::pair<float, float>, RandoCheckId> crateMap = {
+std::map<std::tuple<s16, s16, s16>, RandoCheckId> crateMap = {
// Clock Town //
- { { -1668.0f, 615.0f }, RC_CLOCK_TOWN_LAUNDRY_SMALL_CRATE },
- { { 759.0f, -458.0f }, RC_CLOCK_TOWN_EAST_SMALL_CRATE_01 },
- { { 1100.0f, -460.0f }, RC_CLOCK_TOWN_EAST_SMALL_CRATE_02 },
+ { { SCENE_ALLEY, 0, 7 }, RC_CLOCK_TOWN_LAUNDRY_SMALL_CRATE },
+ { { SCENE_TOWN, 0, 11 }, RC_CLOCK_TOWN_EAST_SMALL_CRATE_01 },
+ { { SCENE_TOWN, 0, 10 }, RC_CLOCK_TOWN_EAST_SMALL_CRATE_02 },
// Great Bay Temple //
- { { 1725.0f, -2100.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_01 },
- { { 1725.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_02 },
- { { 1755.0f, -2100.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_03 },
- { { 1755.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_04 },
- { { 960.0f, -2100.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_05 },
- { { 930.0f, -2100.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_06 },
- { { 960.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_07 },
- { { 930.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_08 },
- { { 960.0f, -2880.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_09 },
- { { 960.0f, -2910.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_10 },
- { { 930.0f, -2880.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_11 },
- { { 930.0f, -2910.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_12 },
- { { 1725.0f, -2880.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_13 },
- { { 1755.0f, -2880.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_14 },
- { { 1725.0f, -2910.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_15 },
- { { 1755.0f, -2910.0f }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_16 },
- { { 2415.0f, 240.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_01 },
- { { 2415.0f, 192.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_02 },
- { { 2415.0f, 144.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_03 },
- { { 2409.0f, 990.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_04 },
- { { 2457.0f, 990.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_05 },
- { { 2457.0f, 1050.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_06 },
- { { 2409.0f, 1050.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_07 },
- { { 1845.0f, 1944.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_01 },
- { { 1845.0f, 1992.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_02 },
- { { 1845.0f, 2040.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_03 },
- { { 1305.0f, 1944.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_04 },
- { { 1245.0f, 1944.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_05 },
+ { { SCENE_SEA, 5, 15 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_01 },
+ { { SCENE_SEA, 5, 7 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_02 },
+ { { SCENE_SEA, 5, 9 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_03 },
+ { { SCENE_SEA, 5, 17 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_04 },
+ { { SCENE_SEA, 5, 13 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_05 },
+ { { SCENE_SEA, 5, 3 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_06 },
+ { { SCENE_SEA, 5, 5 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_07 },
+ { { SCENE_SEA, 5, 11 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_08 },
+ { { SCENE_SEA, 5, 12 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_09 },
+ { { SCENE_SEA, 5, 4 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_10 },
+ { { SCENE_SEA, 5, 2 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_11 },
+ { { SCENE_SEA, 5, 10 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_12 },
+ { { SCENE_SEA, 5, 14 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_13 },
+ { { SCENE_SEA, 5, 8 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_14 },
+ { { SCENE_SEA, 5, 6 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_15 },
+ { { SCENE_SEA, 5, 16 }, RC_GREAT_BAY_TEMPLE_GEKKO_SMALL_CRATE_16 },
+ { { SCENE_SEA, 10, 28 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_01 },
+ { { SCENE_SEA, 10, 27 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_02 },
+ { { SCENE_SEA, 10, 26 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_03 },
+ { { SCENE_SEA, 10, 22 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_04 },
+ { { SCENE_SEA, 10, 24 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_05 },
+ { { SCENE_SEA, 10, 25 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_06 },
+ { { SCENE_SEA, 10, 23 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_LARGE_CRATE_07 },
+ { { SCENE_SEA, 2, 12 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_01 },
+ { { SCENE_SEA, 2, 14 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_02 },
+ { { SCENE_SEA, 2, 13 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_03 },
+ { { SCENE_SEA, 2, 11 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_04 },
+ { { SCENE_SEA, 2, 10 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_LARGE_CRATE_05 },
// Pirates Fortress //
- { { 797.0f, -915.0f }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_01 },
- { { 1151.0f, 180.0f }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_02 },
- { { 889.0f, 180.0f }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_03 },
+ { { SCENE_KAIZOKU, 0, 27 }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_01 },
+ { { SCENE_KAIZOKU, 0, 28 }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_02 },
+ { { SCENE_KAIZOKU, 0, 29 }, RC_PIRATE_FORTRESS_PLAZA_LARGE_CRATE_03 },
// Snowhead Temple //
- { { 1247.0f, 49.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_LARGE_CRATE },
- { { 263.0f, 1301.0f }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_ROOM_LARGE_CRATE_01 },
- { { 282.0f, 1257.0f }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_ROOM_LARGE_CRATE_02 },
- { { 1296.0f, 330.0f }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_01 },
- { { 1248.0f, 330.0f }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_02 },
- { { 1200.0f, 330.0f }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_03 },
- { { 1152.0f, 330.0f }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_04 },
- { { 1104.0f, 330.0f }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_05 },
+ { { SCENE_HAKUGIN, 2, 17 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_LARGE_CRATE },
+ { { SCENE_HAKUGIN, 8, 16 }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_ROOM_LARGE_CRATE_01 },
+ { { SCENE_HAKUGIN, 8, 15 }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_ROOM_LARGE_CRATE_02 },
+ { { SCENE_HAKUGIN, 9, 6 }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_01 },
+ { { SCENE_HAKUGIN, 9, 9 }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_02 },
+ { { SCENE_HAKUGIN, 9, 10 }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_03 },
+ { { SCENE_HAKUGIN, 9, 8 }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_04 },
+ { { SCENE_HAKUGIN, 9, 7 }, RC_SNOWHEAD_TEMPLE_MAP_ROOM_LARGE_CRATE_05 },
// Stone Tower Temple //
- { { 435.0f, -705.0f }, RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_01 },
- { { 465.0f, -705.0f }, RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_02 },
- { { 1050.0f, -2910.0f }, RC_STONE_TOWER_TEMPLE_MIRRORS_ROOM_LARGE_CRATE_01 },
- { { 1530.0f, -2910.0f }, RC_STONE_TOWER_TEMPLE_MIRRORS_ROOM_LARGE_CRATE_02 },
- { { 495.0f, -885.0f }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_01 },
- { { 495.0f, -855.0f }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_02 },
- { { 495.0f, -825.0f }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_03 },
- { { -1410.0f, -330.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_01 },
- { { -1410.0f, -390.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_02 },
- { { -1410.0f, -450.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_03 },
- { { -1410.0f, -510.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_04 },
- { { -1410.0f, -570.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_05 },
- { { -1485.0f, -390.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_SMALL_CRATE_01 },
- { { -1485.0f, -510.0f }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_SMALL_CRATE_02 },
- { { 495.0f, -705.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_01 },
- { { 495.0f, -735.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_02 },
- { { -525.0f, -165.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_03 },
- { { -555.0f, -165.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_04 },
- { { -585.0f, -165.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_05 },
- { { 1815.0f, -1215.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_01 },
- { { 1845.0f, -1215.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_02 },
- { { 1875.0f, -1215.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_03 },
- { { 1815.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_04 },
- { { 1845.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_05 },
- { { 1875.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_06 },
+ { { SCENE_INISIE_N, 0, 17 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_01 },
+ { { SCENE_INISIE_N, 0, 18 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_SMALL_CRATE_02 },
+ { { SCENE_INISIE_N, 7, 30 }, RC_STONE_TOWER_TEMPLE_MIRRORS_ROOM_LARGE_CRATE_01 },
+ { { SCENE_INISIE_N, 7, 29 }, RC_STONE_TOWER_TEMPLE_MIRRORS_ROOM_LARGE_CRATE_02 },
+ { { SCENE_INISIE_N, 1, 22 }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_01 },
+ { { SCENE_INISIE_N, 1, 23 }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_02 },
+ { { SCENE_INISIE_N, 1, 24 }, RC_STONE_TOWER_TEMPLE_CENTER_SMALL_CRATE_03 },
+ { { SCENE_INISIE_N, 2, 28 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_01 },
+ { { SCENE_INISIE_N, 2, 27 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_02 },
+ { { SCENE_INISIE_N, 2, 26 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_03 },
+ { { SCENE_INISIE_N, 2, 25 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_04 },
+ { { SCENE_INISIE_N, 2, 24 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_LARGE_CRATE_05 },
+ { { SCENE_INISIE_N, 2, 31 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_SMALL_CRATE_01 },
+ { { SCENE_INISIE_N, 2, 30 }, RC_STONE_TOWER_TEMPLE_SWITCH_ROOM_SMALL_CRATE_02 },
+ { { SCENE_INISIE_R, 0, 12 }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_01 },
+ { { SCENE_INISIE_R, 0, 11 }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_02 },
+ { { SCENE_INISIE_R, 0, 15 }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_03 },
+ { { SCENE_INISIE_R, 0, 14 }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_04 },
+ { { SCENE_INISIE_R, 0, 13 }, RC_STONE_TOWER_TEMPLE_INVERTED_ENTRANCE_SMALL_CRATE_05 },
+ { { SCENE_INISIE_R, 3, 43 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_01 },
+ { { SCENE_INISIE_R, 3, 44 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_02 },
+ { { SCENE_INISIE_R, 3, 42 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_03 },
+ { { SCENE_INISIE_R, 3, 39 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_04 },
+ { { SCENE_INISIE_R, 3, 40 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_05 },
+ { { SCENE_INISIE_R, 3, 41 }, RC_STONE_TOWER_TEMPLE_INVERTED_PATH_TO_GOMESS_SMALL_CRATE_06 },
// Termina Field //
- { { 1750.0f, 830.0f }, RC_TERMINA_FIELD_SCRUB_LARGE_CRATE },
+ { { SCENE_KAKUSIANA, 9, 0 }, RC_TERMINA_FIELD_SCRUB_LARGE_CRATE },
// Gorman Track //
- { { -1624.0f, -891.0f }, RC_GORMAN_TRACK_LARGE_CRATE },
+ { { SCENE_KOEPONARACE, 0, 73 }, RC_GORMAN_TRACK_LARGE_CRATE },
// Romani Ranch //
- { { -576.0f, -1193.0f }, RC_ROMANI_RANCH_FIELD_LARGE_CRATE },
+ { { SCENE_F01, 0, 35 }, RC_ROMANI_RANCH_FIELD_LARGE_CRATE },
// Cucco Shack //
- { { -3439.0f, -583.0f }, RC_CUCCO_SHACK_LARGE_CRATE_01 },
- { { -3382.0f, -565.0f }, RC_CUCCO_SHACK_LARGE_CRATE_02 },
- { { -3325.0f, -546.0f }, RC_CUCCO_SHACK_LARGE_CRATE_03 },
+ { { SCENE_F01C, 0, 22 }, RC_CUCCO_SHACK_LARGE_CRATE_01 },
+ { { SCENE_F01C, 0, 15 }, RC_CUCCO_SHACK_LARGE_CRATE_02 },
+ { { SCENE_F01C, 0, 14 }, RC_CUCCO_SHACK_LARGE_CRATE_03 },
- // Goron Village //
- { { -1184.0f, -3051.0f }, RC_GORON_VILLAGE_LARGE_CRATE },
+ // Goron Village (winter and spring) //
+ { { SCENE_11GORONNOSATO, 1, 3 }, RC_GORON_VILLAGE_LARGE_CRATE },
+ { { SCENE_11GORONNOSATO2, 1, 3 }, RC_GORON_VILLAGE_LARGE_CRATE },
// Swamp Spider House //
- { { -828.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_01 },
- { { -876.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_02 },
- { { -876.0f, -509.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_03 },
- { { -870.0f, -876.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_04 },
- { { -810.0f, -876.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_05 },
- { { -690.0f, -876.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_06 },
- { { -301.0f, -1299.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_LARGE_CRATE_01 },
- { { -241.0f, -1299.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_LARGE_CRATE_02 },
+ { { SCENE_KINSTA1, 3, 8 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_01 },
+ { { SCENE_KINSTA1, 3, 5 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_02 },
+ { { SCENE_KINSTA1, 3, 6 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_03 },
+ { { SCENE_KINSTA1, 3, 7 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_04 },
+ { { SCENE_KINSTA1, 3, 9 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_05 },
+ { { SCENE_KINSTA1, 3, 10 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_LARGE_CRATE_06 },
+ { { SCENE_KINSTA1, 2, 7 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_LARGE_CRATE_01 },
+ { { SCENE_KINSTA1, 2, 8 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_LARGE_CRATE_02 },
};
+// Identify the crate RC by scene ID, room, and actor list index
+RandoCheckId getCrateRandoCheck(Actor* actor) {
+ RandoCheckId randoCheckId = RC_UNKNOWN;
+
+ s16 actorListIndex = GetActorListIndex(actor);
+ auto it = crateMap.find({ gPlayState->sceneId, gPlayState->roomCtx.curRoom.num, actorListIndex });
+ if (it != crateMap.end()) {
+ randoCheckId = it->second;
+ }
+ return randoCheckId;
+}
+
void ObjKibako_RandoDraw(Actor* actor, PlayState* play) {
if (!CVarGetInteger("gRando.CSMC", 0)) {
Gfx_DrawDListOpa(play, (Gfx*)gSmallJunkCrateDL);
return;
}
- RandoItemId randoItemId =
- Rando::ConvertItem(RANDO_SAVE_CHECKS[OBJKIBAKO_RC].randoItemId, (RandoCheckId)OBJKIBAKO_RC);
+ RandoCheckId randoCheckId = getCrateRandoCheck(actor);
+ RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId);
RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType;
switch (randoItemType) {
@@ -164,8 +176,8 @@ void ObjKibako2_RandoDraw(Actor* actor, PlayState* play) {
return;
}
- RandoItemId randoItemId =
- Rando::ConvertItem(RANDO_SAVE_CHECKS[OBJKIBAKO_RC].randoItemId, (RandoCheckId)OBJKIBAKO_RC);
+ RandoCheckId randoCheckId = getCrateRandoCheck(actor);
+ RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId);
RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType;
switch (randoItemType) {
@@ -199,46 +211,29 @@ void ObjKibako2_RandoDraw(Actor* actor, PlayState* play) {
}
}
-void Rando::ActorBehavior::InitObjKibakoBehavior() {
- COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, IS_RANDO, [](Actor* actor) {
- RandoCheckId randoCheckId = RC_UNKNOWN;
-
- auto it = crateMap.find({ actor->home.pos.x, actor->home.pos.z });
- if (it == crateMap.end()) {
- return;
- }
-
- randoCheckId = it->second;
+void initCrateBehavior(Actor* actor) {
+ RandoCheckId randoCheckId = getCrateRandoCheck(actor);
+ if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
+ return;
+ }
- if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
- return;
- }
+ Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
+}
- OBJKIBAKO_RC = randoCheckId;
+void Rando::ActorBehavior::InitObjKibakoBehavior() {
+ COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, IS_RANDO, [](Actor* actor) {
+ initCrateBehavior(actor);
actor->draw = ObjKibako_RandoDraw;
});
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, IS_RANDO, [](Actor* actor) {
- RandoCheckId randoCheckId = RC_UNKNOWN;
-
- auto it = crateMap.find({ actor->home.pos.x, actor->home.pos.z });
- if (it == crateMap.end()) {
- return;
- }
-
- randoCheckId = it->second;
-
- if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
- return;
- }
-
- OBJKIBAKO_RC = randoCheckId;
+ initCrateBehavior(actor);
actor->draw = ObjKibako2_RandoDraw;
});
COND_VB_SHOULD(VB_CRATE_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- if (OBJKIBAKO_RC != RC_UNKNOWN) {
+ if (getCrateRandoCheck(actor) != RC_UNKNOWN) {
*should = false;
actor->draw = ObjKibako_RandoDraw;
}
@@ -251,7 +246,9 @@ void Rando::ActorBehavior::InitObjKibakoBehavior() {
return;
}
- if (OBJKIBAKO_RC == RC_UNKNOWN) {
+ RandoCheckId randoCheckId = getCrateRandoCheck(actor);
+
+ if (randoCheckId == RC_UNKNOWN) {
return;
}
@@ -259,7 +256,7 @@ void Rando::ActorBehavior::InitObjKibakoBehavior() {
EnItem00* spawn = CustomItem::Spawn(
actor->world.pos.x, actor->world.pos.y, actor->world.pos.z, 0,
- CustomItem::KILL_ON_TOUCH | CustomItem::TOSS_ON_SPAWN, OBJKIBAKO_RC,
+ CustomItem::KILL_ON_TOUCH | CustomItem::TOSS_ON_SPAWN, randoCheckId,
[](Actor* actor, PlayState* play) {
auto& randoStaticCheck = Rando::StaticData::Checks[(RandoCheckId)CUSTOM_ITEM_PARAM];
switch (randoStaticCheck.flagType) {
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjSnowball.cpp b/mm/2s2h/Rando/ActorBehavior/ObjSnowball.cpp
index 4ca166bdd..1e7e0acda 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjSnowball.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjSnowball.cpp
@@ -104,39 +104,88 @@ std::map<std::tuple<s16, s16, s16>, RandoCheckId> snowballActorIdMap = {
{ { SCENE_17SETUGEN, 0, 65 }, RC_TWIN_ISLANDS_SMALL_SNOWBALL_04 },
{ { SCENE_17SETUGEN, 0, 66 }, RC_TWIN_ISLANDS_SMALL_SNOWBALL_05 },
{ { SCENE_17SETUGEN, 0, 67 }, RC_TWIN_ISLANDS_SMALL_SNOWBALL_06 },
-};
-std::map<std::pair<float, float>, RandoCheckId> snowballCoordsMap = {
- { { -1025.00f, 137.00f }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
- { { -1062.00f, 891.00f }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
- { { 1863.00f, 705.00f }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
- { { -197.00f, -172.00f }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
- { { 1462.00f, 863.00f }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_05 },
- { { 1674.00f, 6811.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
- { { 2061.00f, 6748.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
- { { 203.00f, 6068.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
- { { 623.00f, 6237.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
- { { 987.00f, 4607.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_09 },
- { { 976.00f, 4691.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_10 },
- { { 979.00f, 4517.00f }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_11 },
- { { 427.00f, -613.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_01 },
- { { 65.00f, 345.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_02 },
- { { -179.00f, -876.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_03 },
- { { 851.00f, 643.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_04 },
- { { 371.00f, 778.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_05 },
- { { -563.00f, -523.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_06 },
- { { 1203.00f, 109.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_07 },
- { { -1029.00f, -25.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_08 },
- { { -880.00f, 497.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_09 },
- { { -395.00f, 677.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_10 },
- { { 5.00f, -560.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_11 },
- { { 60.00f, -46.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_12 },
- { { 1001.00f, -426.00f }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_13 },
+ // The following large snowballs have different ActorListIndex values each day. Having repeat check map entries is
+ // fine, so long as there are no overlaps in values for a given scene. Duplicates are organized by Day 1, 2, 3:
+ { { SCENE_10YUKIYAMANOMURA, 0, 14 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 45 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 16 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 17 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 13 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 12 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 18 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 47 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 44 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 46 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 48 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 34 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 52 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_05 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 15 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_05 },
+ { { SCENE_10YUKIYAMANOMURA, 0, 51 }, RC_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_05 },
+ { { SCENE_13HUBUKINOMITI, 0, 26 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_13HUBUKINOMITI, 0, 28 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_13HUBUKINOMITI, 0, 23 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_01 },
+ { { SCENE_13HUBUKINOMITI, 0, 42 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_13HUBUKINOMITI, 0, 24 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_13HUBUKINOMITI, 0, 19 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_02 },
+ { { SCENE_13HUBUKINOMITI, 0, 31 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_13HUBUKINOMITI, 0, 46 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_13HUBUKINOMITI, 0, 22 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_03 },
+ { { SCENE_13HUBUKINOMITI, 0, 30 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_13HUBUKINOMITI, 0, 27 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_13HUBUKINOMITI, 0, 29 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_04 },
+ { { SCENE_13HUBUKINOMITI, 0, 41 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_09 },
+ { { SCENE_13HUBUKINOMITI, 0, 45 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_09 },
+ { { SCENE_13HUBUKINOMITI, 0, 47 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_09 },
+ { { SCENE_13HUBUKINOMITI, 0, 43 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_10 },
+ { { SCENE_13HUBUKINOMITI, 0, 48 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_10 },
+ { { SCENE_13HUBUKINOMITI, 0, 20 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_10 },
+ { { SCENE_13HUBUKINOMITI, 0, 44 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_11 },
+ { { SCENE_13HUBUKINOMITI, 0, 25 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_11 },
+ { { SCENE_13HUBUKINOMITI, 0, 21 }, RC_PATH_TO_MOUNTAIN_VILLAGE_LARGE_SNOWBALL_11 },
+ { { SCENE_17SETUGEN, 0, 18 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_01 },
+ { { SCENE_17SETUGEN, 0, 53 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_01 },
+ { { SCENE_17SETUGEN, 0, 43 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_01 },
+ { { SCENE_17SETUGEN, 0, 19 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_02 },
+ { { SCENE_17SETUGEN, 0, 49 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_02 },
+ { { SCENE_17SETUGEN, 0, 45 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_02 },
+ { { SCENE_17SETUGEN, 0, 22 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_03 },
+ { { SCENE_17SETUGEN, 0, 17 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_03 },
+ { { SCENE_17SETUGEN, 0, 42 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_03 },
+ { { SCENE_17SETUGEN, 0, 30 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_04 },
+ { { SCENE_17SETUGEN, 0, 52 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_04 },
+ { { SCENE_17SETUGEN, 0, 44 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_04 },
+ { { SCENE_17SETUGEN, 0, 54 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_05 },
+ { { SCENE_17SETUGEN, 0, 21 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_05 },
+ { { SCENE_17SETUGEN, 0, 28 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_05 },
+ { { SCENE_17SETUGEN, 0, 55 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_06 },
+ { { SCENE_17SETUGEN, 0, 51 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_06 },
+ { { SCENE_17SETUGEN, 0, 13 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_06 },
+ { { SCENE_17SETUGEN, 0, 56 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_07 },
+ { { SCENE_17SETUGEN, 0, 47 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_07 },
+ { { SCENE_17SETUGEN, 0, 40 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_07 },
+ { { SCENE_17SETUGEN, 0, 57 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_08 },
+ { { SCENE_17SETUGEN, 0, 48 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_08 },
+ { { SCENE_17SETUGEN, 0, 20 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_08 },
+ { { SCENE_17SETUGEN, 0, 58 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_09 },
+ { { SCENE_17SETUGEN, 0, 16 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_09 },
+ { { SCENE_17SETUGEN, 0, 46 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_09 },
+ { { SCENE_17SETUGEN, 0, 59 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_10 },
+ { { SCENE_17SETUGEN, 0, 11 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_10 },
+ { { SCENE_17SETUGEN, 0, 14 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_10 },
+ { { SCENE_17SETUGEN, 0, 60 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_11 },
+ { { SCENE_17SETUGEN, 0, 29 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_11 },
+ { { SCENE_17SETUGEN, 0, 41 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_11 },
+ { { SCENE_17SETUGEN, 0, 61 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_12 },
+ // Note: RC_TWIN_ISLANDS_LARGE_SNOWBALL_12 does not exist on Day 2
+ { { SCENE_17SETUGEN, 0, 15 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_12 },
+ { { SCENE_17SETUGEN, 0, 12 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_13 },
+ { { SCENE_17SETUGEN, 0, 50 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_13 },
+ { { SCENE_17SETUGEN, 0, 4 }, RC_TWIN_ISLANDS_LARGE_SNOWBALL_13 },
};
// clang-format on
-// We primarily rely on the ActorListIndex, however in some scenes the ActorListIndex for Large
-// snowballs is inconsistent based on the day, so we fallback to the coords which are consistent
+// Identify the snowball based on scene ID, room, and actor list index
void IdentifySnowball(Actor* actor, bool* should) {
s16 actorListIndex = GetActorListIndex(actor);
RandoCheckId randoCheckId = RC_UNKNOWN;
@@ -144,18 +193,13 @@ void IdentifySnowball(Actor* actor, bool* should) {
auto it = snowballActorIdMap.find({ gPlayState->sceneId, gPlayState->roomCtx.curRoom.num, actorListIndex });
if (it != snowballActorIdMap.end()) {
randoCheckId = it->second;
- } else {
- auto it2 = snowballCoordsMap.find({ actor->home.pos.x, actor->home.pos.z });
- if (it2 != snowballCoordsMap.end()) {
- randoCheckId = it2->second;
- }
}
if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
return;
}
- Rando::ActorBehavior::SetActorRandoCheckId(actor, randoCheckId);
+ Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
}
void SpawnSnowballDrop(Vec3f pos, RandoCheckId randoCheckId) {
@@ -180,7 +224,7 @@ void Rando::ActorBehavior::InitObjSnowballBehavior() {
COND_VB_SHOULD(VB_SNOWBALL_DROP_COLLECTIBLE, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- RandoCheckId randoCheckId = GetActorRandoCheckId(actor);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(actor);
if (randoCheckId == RC_UNKNOWN) {
return;
@@ -202,7 +246,7 @@ void Rando::ActorBehavior::InitObjSnowballBehavior() {
return;
}
- RandoCheckId randoCheckId = GetActorRandoCheckId(actor);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(actor);
if (randoCheckId == RC_UNKNOWN) {
return;
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp b/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
index 50aba379c..19532e82a 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
@@ -1,5 +1,6 @@
#include "ActorBehavior.h"
#include <libultraship/bridge/consolevariablebridge.h>
+#include "2s2h/ObjectExtension/ActorListIndex.h"
#include "2s2h/CustomItem/CustomItem.h"
#include "assets/2s2h_assets.h"
@@ -8,56 +9,54 @@ extern "C" {
#include "src/overlays/actors/ovl_Obj_Taru/z_obj_taru.h"
}
-#define OBJTARU_RC (actor->home.rot.x)
-
-std::map<std::pair<float, float>, RandoCheckId> barrelMap = {
+std::map<std::tuple<s16, s16, s16>, RandoCheckId> barrelMap = {
// Great Bay Temple //
- { { -540.0f, 3450.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_01 },
- { { -480.0f, 3450.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_02 },
- { { -540.0f, 3510.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_03 },
- { { -480.0f, 3510.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_04 },
- { { 480.0f, 3510.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_05 },
- { { 540.0f, 3510.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_06 },
- { { 480.0f, 3450.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_07 },
- { { 540.0f, 3450.0f }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_08 },
- { { -360.0f, -1455.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_01 },
- { { -240.0f, -1455.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_02 },
- { { -300.0f, -1590.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_03 },
- { { 2685.0f, -1200.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_BARREL_01 },
- { { 2685.0f, -1260.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_BARREL_02 },
- { { 1785.0f, 2190.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_01 },
- { { 1785.0f, 2070.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_02 },
- { { 1785.0f, 2010.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_03 },
- { { 1305.0f, 2058.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_04 },
- { { 1305.0f, 1998.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_05 },
+ { { SCENE_SEA, 13, 0 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_01 },
+ { { SCENE_SEA, 13, 1 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_02 },
+ { { SCENE_SEA, 13, 2 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_03 },
+ { { SCENE_SEA, 13, 3 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_04 },
+ { { SCENE_SEA, 13, 4 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_05 },
+ { { SCENE_SEA, 13, 5 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_06 },
+ { { SCENE_SEA, 13, 6 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_07 },
+ { { SCENE_SEA, 13, 7 }, RC_GREAT_BAY_TEMPLE_ENTRANCE_BARREL_08 },
+ { { SCENE_SEA, 12, 11 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_01 },
+ { { SCENE_SEA, 12, 12 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_02 },
+ { { SCENE_SEA, 12, 10 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_BARREL_03 },
+ { { SCENE_SEA, 9, 7 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_BARREL_01 },
+ { { SCENE_SEA, 9, 6 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_BARREL_02 },
+ { { SCENE_SEA, 2, 2 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_01 },
+ { { SCENE_SEA, 2, 5 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_02 },
+ { { SCENE_SEA, 2, 6 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_03 },
+ { { SCENE_SEA, 2, 4 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_04 },
+ { { SCENE_SEA, 2, 3 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_SWITCH_ROOM_BARREL_05 },
// Pirates Fortress //
- { { 3880.0f, -850.0f }, RC_PIRATE_FORTRESS_CAPTAIN_ROOM_BARREL_01 },
- { { 3880.0f, -910.0f }, RC_PIRATE_FORTRESS_CAPTAIN_ROOM_BARREL_02 },
- { { -80.0f, 1320.0f }, RC_PIRATE_FORTRESS_ENTRANCE_BARREL },
- { { 3740.0f, -1860.0f }, RC_PIRATE_FORTRESS_INTERIOR_GUARDED_BARREL },
- { { 2680.0f, -1440.0f }, RC_PIRATE_FORTRESS_PLAZA_BARREL },
- { { 2520.0f, 440.0f }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_01 },
- { { 2580.0f, 400.0f }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_02 },
- { { 2520.0f, 381.0f }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_03 },
- { { 2580.0f, 341.0f }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_04 },
- { { 2520.0f, 321.0f }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_05 },
- { { 1880.0f, -2020.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_01 },
- { { 1880.0f, -2080.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_02 },
- { { 1880.0f, -2140.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_03 },
- { { 2171.0f, -1503.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_04 },
- { { 2171.0f, -1443.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_05 },
- { { 2171.0f, -1383.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_06 },
- { { 2070.0f, -2250.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_07 },
- { { 2070.0f, -2310.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_08 },
- { { 2070.0f, -2370.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_09 },
- { { 2070.0f, -2430.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_10 },
- { { 1570.0f, -2310.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_11 },
- { { 1510.0f, -2310.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_12 },
- { { 1570.0f, -2370.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_13 },
- { { 1570.0f, -2430.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_14 },
- { { 1510.0f, -2370.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_15 },
- { { 1510.0f, -2430.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_16 },
+ { { SCENE_PIRATE, 3, 7 }, RC_PIRATE_FORTRESS_CAPTAIN_ROOM_BARREL_01 },
+ { { SCENE_PIRATE, 3, 6 }, RC_PIRATE_FORTRESS_CAPTAIN_ROOM_BARREL_02 },
+ { { SCENE_TORIDE, 0, 7 }, RC_PIRATE_FORTRESS_ENTRANCE_BARREL },
+ { { SCENE_PIRATE, 13, 1 }, RC_PIRATE_FORTRESS_INTERIOR_GUARDED_BARREL },
+ { { SCENE_KAIZOKU, 0, 8 }, RC_PIRATE_FORTRESS_PLAZA_BARREL },
+ { { SCENE_PIRATE, 9, 8 }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_01 },
+ { { SCENE_PIRATE, 9, 9 }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_02 },
+ { { SCENE_PIRATE, 9, 7 }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_03 },
+ { { SCENE_PIRATE, 9, 6 }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_04 },
+ { { SCENE_PIRATE, 9, 5 }, RC_PIRATE_FORTRESS_SEWERS_END_BARREL_05 },
+ { { SCENE_PIRATE, 11, 21 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_01 },
+ { { SCENE_PIRATE, 11, 20 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_02 },
+ { { SCENE_PIRATE, 11, 19 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_03 },
+ { { SCENE_PIRATE, 11, 18 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_04 },
+ { { SCENE_PIRATE, 11, 17 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_05 },
+ { { SCENE_PIRATE, 11, 16 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_06 },
+ { { SCENE_PIRATE, 11, 12 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_07 },
+ { { SCENE_PIRATE, 11, 10 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_08 },
+ { { SCENE_PIRATE, 11, 9 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_09 },
+ { { SCENE_PIRATE, 11, 15 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_10 },
+ { { SCENE_PIRATE, 11, 7 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_11 },
+ { { SCENE_PIRATE, 11, 6 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_12 },
+ { { SCENE_PIRATE, 11, 11 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_13 },
+ { { SCENE_PIRATE, 11, 14 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_14 },
+ { { SCENE_PIRATE, 11, 8 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_15 },
+ { { SCENE_PIRATE, 11, 13 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_BARREL_16 },
};
void ObjTaru_RandoDraw(Actor* actor, PlayState* play) {
@@ -66,7 +65,8 @@ void ObjTaru_RandoDraw(Actor* actor, PlayState* play) {
return;
}
- RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[OBJTARU_RC].randoItemId, (RandoCheckId)OBJTARU_RC);
+ RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
+ RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId);
RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType;
switch (randoItemType) {
@@ -101,28 +101,29 @@ void ObjTaru_RandoDraw(Actor* actor, PlayState* play) {
}
void Rando::ActorBehavior::InitObjTaruBehavior() {
+ // Identify the barrel based on scene ID, room, and actor list index
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_TARU, IS_RANDO, [](Actor* actor) {
RandoCheckId randoCheckId = RC_UNKNOWN;
- auto it = barrelMap.find({ actor->home.pos.x, actor->home.pos.z });
- if (it == barrelMap.end()) {
- return;
+ s16 actorListIndex = GetActorListIndex(actor);
+ auto it = barrelMap.find({ gPlayState->sceneId, gPlayState->roomCtx.curRoom.num, actorListIndex });
+ if (it != barrelMap.end()) {
+ randoCheckId = it->second;
}
- randoCheckId = it->second;
-
if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
return;
}
- OBJTARU_RC = randoCheckId;
+ Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
actor->draw = ObjTaru_RandoDraw;
});
COND_VB_SHOULD(VB_BARREL_OR_CRATE_DROP_COLLECTIBLE, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(actor);
- if (actor->id != ACTOR_OBJ_TARU || OBJTARU_RC == RC_UNKNOWN) {
+ if (actor->id != ACTOR_OBJ_TARU || randoCheckId == RC_UNKNOWN) {
return;
}
@@ -130,7 +131,7 @@ void Rando::ActorBehavior::InitObjTaruBehavior() {
EnItem00* spawn = CustomItem::Spawn(
actor->world.pos.x, actor->world.pos.y, actor->world.pos.z, 0,
- CustomItem::KILL_ON_TOUCH | CustomItem::TOSS_ON_SPAWN, OBJTARU_RC,
+ CustomItem::KILL_ON_TOUCH | CustomItem::TOSS_ON_SPAWN, randoCheckId,
[](Actor* actor, PlayState* play) {
auto& randoStaticCheck = Rando::StaticData::Checks[(RandoCheckId)CUSTOM_ITEM_PARAM];
switch (randoStaticCheck.flagType) {
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp b/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
index 356524558..4517c1273 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
@@ -4,6 +4,7 @@
#include "2s2h/CustomItem/CustomItem.h"
#include "2s2h/Rando/Rando.h"
#include "2s2h/ShipInit.hpp"
+#include "2s2h/ObjectExtension/ActorListIndex.h"
#include "assets/2s2h_assets.h"
extern "C" {
@@ -14,372 +15,322 @@ extern "C" {
void ObjTsubo_Draw(Actor* actor, PlayState* play);
}
-std::map<SceneId, std::map<std::pair<float, float>, RandoCheckId>> potMap = {
+std::map<std::tuple<s16, s16, s16>, RandoCheckId> potMap = {
// Deku Shrine //
- { SCENE_DANPEI,
- {
- { { 1881.0f, 980.0f }, RC_DEKU_SHRINE_POT_01 },
- { { 2373.0f, 0.0f }, RC_DEKU_SHRINE_POT_02 },
- } },
+ { { SCENE_DANPEI, 0, 14 }, RC_DEKU_SHRINE_POT_01 },
+ { { SCENE_DANPEI, 0, 15 }, RC_DEKU_SHRINE_POT_02 },
// Stone Tower //
- { SCENE_F40,
- {
- { { 1204.0f, 1871.0f }, RC_STONE_TOWER_HIGHER_SCARECROW_POT_02 },
- { { 1364.0f, 2391.0f }, RC_STONE_TOWER_HIGHER_SCARECROW_POT_08 },
- { { -1116.0f, 2231.0f }, RC_STONE_TOWER_LOWER_SCARECROW_POT_02 },
- { { -1116.0f, 2031.0f }, RC_STONE_TOWER_LOWER_SCARECROW_POT_04 },
- { { -1116.0f, 1511.0f }, RC_STONE_TOWER_LOWER_SCARECROW_POT_11 },
- } },
+ { { SCENE_F40, 0, 52 }, RC_STONE_TOWER_HIGHER_SCARECROW_POT_02 },
+ { { SCENE_F40, 0, 57 }, RC_STONE_TOWER_HIGHER_SCARECROW_POT_08 },
+ { { SCENE_F40, 0, 47 }, RC_STONE_TOWER_LOWER_SCARECROW_POT_02 },
+ { { SCENE_F40, 0, 45 }, RC_STONE_TOWER_LOWER_SCARECROW_POT_04 },
+ { { SCENE_F40, 0, 48 }, RC_STONE_TOWER_LOWER_SCARECROW_POT_11 },
// Beneath the Graveyard //
- { SCENE_HAKASHITA,
- {
- { { 1270.0f, 380.0f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_1_BATS_POT_03 },
- { { -1121.0f, -879.0f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_01 },
- { { -1200.0f, -881.0f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_02 },
- { { -1200.0f, -1400.0f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_03 },
- { { -1120.0f, -1400.0f }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_04 },
- } },
+ { { SCENE_HAKASHITA, 1, 6 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_1_BATS_POT_03 },
+ { { SCENE_HAKASHITA, 3, 12 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_01 },
+ { { SCENE_HAKASHITA, 3, 11 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_02 },
+ { { SCENE_HAKASHITA, 3, 7 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_03 },
+ { { SCENE_HAKASHITA, 3, 8 }, RC_BENEATH_THE_GRAVEYARD_NIGHT_2_AFTER_PIT_POT_04 },
// Snowhead Temple - Goht's Lair //
- { SCENE_HAKUGIN_BS,
- {
- { { -1250.0f, -1250.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_01 },
- { { -1400.0f, -60.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_02 },
- { { -1600.0f, -60.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_03 },
- { { -1250.0f, 1250.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_04 },
- { { 61.0f, 1440.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_05 },
- { { 61.0f, 1740.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_06 },
- { { 1250.0f, 1250.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_07 },
- { { 1460.0f, -60.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_08 },
- { { 1660.0f, -60.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_09 },
- { { 1250.0f, -1250.0f }, RC_SNOWHEAD_TEMPLE_BOSS_POT_10 },
- { { 150.0f, -1170.0f }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_01 },
- { { -150.0f, -1170.0f }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_02 },
- { { 0.0f, -1400.0f }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_03 },
- { { 0.0f, -1600.0f }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_04 },
- } },
+ { { SCENE_HAKUGIN_BS, 0, 9 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_01 },
+ { { SCENE_HAKUGIN_BS, 0, 1 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_02 },
+ { { SCENE_HAKUGIN_BS, 0, 3 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_03 },
+ { { SCENE_HAKUGIN_BS, 0, 10 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_04 },
+ { { SCENE_HAKUGIN_BS, 0, 7 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_05 },
+ { { SCENE_HAKUGIN_BS, 0, 8 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_06 },
+ { { SCENE_HAKUGIN_BS, 0, 11 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_07 },
+ { { SCENE_HAKUGIN_BS, 0, 2 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_08 },
+ { { SCENE_HAKUGIN_BS, 0, 4 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_09 },
+ { { SCENE_HAKUGIN_BS, 0, 12 }, RC_SNOWHEAD_TEMPLE_BOSS_POT_10 },
+ { { SCENE_HAKUGIN_BS, 0, 13 }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_01 },
+ { { SCENE_HAKUGIN_BS, 0, 14 }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_02 },
+ { { SCENE_HAKUGIN_BS, 0, 5 }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_03 },
+ { { SCENE_HAKUGIN_BS, 0, 6 }, RC_SNOWHEAD_TEMPLE_BOSS_EARLY_POT_04 },
// Snowhead Temple //
- { SCENE_HAKUGIN,
- {
- { { -1052.0f, 338.0f }, RC_SNOWHEAD_TEMPLE_BLOCK_ROOM_POT_01 },
- { { -1091.0f, 327.0f }, RC_SNOWHEAD_TEMPLE_BLOCK_ROOM_POT_02 },
- { { 930.0f, 1065.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_01 },
- { { 810.0f, 1065.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_02 },
- { { 870.0f, 1005.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_03 },
- { { 870.0f, 1125.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_04 },
- { { 870.0f, 1065.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_05 },
- { { 795.0f, -60.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_AFTER_POT_01 },
- { { 825.0f, -75.0f }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_AFTER_POT_02 },
- { { -585.0f, -645.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_01 },
- { { -645.0f, -585.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_02 },
- { { 570.0f, -90.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_LEVEL_2_POT_01 },
- { { 510.0f, -90.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_LEVEL_2_POT_02 },
- { { 435.0f, -570.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_NEAR_BOSS_KEY_POT_01 },
- { { 410.0f, -526.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_NEAR_BOSS_KEY_POT_02 },
- { { 473.0f, 458.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_SCARECROW_POT_01 },
- { { 519.0f, 535.0f }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_SCARECROW_POT_02 },
- { { -1543.0f, 703.0f }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_01 },
- { { -1507.0f, 655.0f }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_02 },
- { { -351.0f, 1153.0f }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_03 },
- { { -378.0f, 1169.0f }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_04 },
- { { -1525.0f, 679.0f }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_05 },
- { { -727.0f, 993.0f }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_POT_01 },
- { { -675.0f, 920.0f }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_POT_02 },
- { { 225.0f, 975.0f }, RC_SNOWHEAD_TEMPLE_ENTRANCE_POT_01 },
- { { 225.0f, 1065.0f }, RC_SNOWHEAD_TEMPLE_ENTRANCE_POT_02 },
- { { -452.0f, -995.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_01 },
- { { -473.0f, -958.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_02 },
- { { -493.0f, -921.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_03 },
- { { -420.0f, -930.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_04 },
- { { -1275.0f, -600.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_05 },
- { { -1305.0f, -623.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_06 },
- { { -1335.0f, -645.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_07 },
- { { -870.0f, -105.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_01 },
- { { -915.0f, -105.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_02 },
- { { 135.0f, -1050.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_03 },
- { { 150.0f, -990.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_04 },
- { { -1184.0f, -1316.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_05 },
- { { -1116.0f, -1374.0f }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_06 },
- { { 1320.0f, -690.0f }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_01 },
- { { 1440.0f, -690.0f }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_02 },
- { { 1380.0f, -690.0f }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_03 },
- { { 1440.0f, -630.0f }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_04 },
- { { 1440.0f, -570.0f }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_05 },
- } },
+ { { SCENE_HAKUGIN, 3, 7 }, RC_SNOWHEAD_TEMPLE_BLOCK_ROOM_POT_01 },
+ { { SCENE_HAKUGIN, 3, 0 }, RC_SNOWHEAD_TEMPLE_BLOCK_ROOM_POT_02 },
+ { { SCENE_HAKUGIN, 2, 8 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_01 },
+ { { SCENE_HAKUGIN, 2, 7 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_02 },
+ { { SCENE_HAKUGIN, 2, 9 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_03 },
+ { { SCENE_HAKUGIN, 2, 10 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_04 },
+ { { SCENE_HAKUGIN, 2, 11 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_POT_05 },
+ { { SCENE_HAKUGIN, 2, 2 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_AFTER_POT_01 },
+ { { SCENE_HAKUGIN, 2, 1 }, RC_SNOWHEAD_TEMPLE_BRIDGE_ROOM_AFTER_POT_02 },
+ { { SCENE_HAKUGIN, 4, 48 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_01 },
+ { { SCENE_HAKUGIN, 4, 49 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_BOTTOM_POT_02 },
+ { { SCENE_HAKUGIN, 4, 47 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_LEVEL_2_POT_01 },
+ { { SCENE_HAKUGIN, 4, 46 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_LEVEL_2_POT_02 },
+ { { SCENE_HAKUGIN, 4, 29 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_NEAR_BOSS_KEY_POT_01 },
+ { { SCENE_HAKUGIN, 4, 30 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_NEAR_BOSS_KEY_POT_02 },
+ { { SCENE_HAKUGIN, 4, 27 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_SCARECROW_POT_01 },
+ { { SCENE_HAKUGIN, 4, 28 }, RC_SNOWHEAD_TEMPLE_CENTRAL_ROOM_SCARECROW_POT_02 },
+ { { SCENE_HAKUGIN, 1, 5 }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_01 },
+ { { SCENE_HAKUGIN, 1, 6 }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_02 },
+ { { SCENE_HAKUGIN, 1, 7 }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_03 },
+ { { SCENE_HAKUGIN, 1, 8 }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_04 },
+ { { SCENE_HAKUGIN, 1, 9 }, RC_SNOWHEAD_TEMPLE_COMPASS_ROOM_POT_05 },
+ { { SCENE_HAKUGIN, 8, 12 }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_POT_01 },
+ { { SCENE_HAKUGIN, 8, 11 }, RC_SNOWHEAD_TEMPLE_DUAL_SWITCHES_POT_02 },
+ { { SCENE_HAKUGIN, 0, 21 }, RC_SNOWHEAD_TEMPLE_ENTRANCE_POT_01 },
+ { { SCENE_HAKUGIN, 0, 22 }, RC_SNOWHEAD_TEMPLE_ENTRANCE_POT_02 },
+ { { SCENE_HAKUGIN, 5, 12 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_01 },
+ { { SCENE_HAKUGIN, 5, 13 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_02 },
+ { { SCENE_HAKUGIN, 5, 14 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_03 },
+ { { SCENE_HAKUGIN, 5, 15 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_04 },
+ { { SCENE_HAKUGIN, 5, 18 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_05 },
+ { { SCENE_HAKUGIN, 5, 17 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_06 },
+ { { SCENE_HAKUGIN, 5, 16 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_LOWER_POT_07 },
+ { { SCENE_HAKUGIN, 5, 4 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_01 },
+ { { SCENE_HAKUGIN, 5, 6 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_02 },
+ { { SCENE_HAKUGIN, 5, 5 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_03 },
+ { { SCENE_HAKUGIN, 5, 3 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_04 },
+ { { SCENE_HAKUGIN, 5, 8 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_05 },
+ { { SCENE_HAKUGIN, 5, 7 }, RC_SNOWHEAD_TEMPLE_PILLARS_ROOM_UPPER_POT_06 },
+ { { SCENE_HAKUGIN, 12, 8 }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_01 },
+ { { SCENE_HAKUGIN, 12, 10 }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_02 },
+ { { SCENE_HAKUGIN, 12, 11 }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_03 },
+ { { SCENE_HAKUGIN, 12, 12 }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_04 },
+ { { SCENE_HAKUGIN, 12, 9 }, RC_SNOWHEAD_TEMPLE_WIZZROBE_POT_05 },
// The Moon - Majora's Lair //
- { SCENE_LAST_BS,
- {
- { { 80.0f, 800.0f }, RC_MOON_MAJORA_POT_01 },
- { { -80.0f, 800.0f }, RC_MOON_MAJORA_POT_02 },
- } },
+ { { SCENE_LAST_BS, 0, 2 }, RC_MOON_MAJORA_POT_01 },
+ { { SCENE_LAST_BS, 0, 1 }, RC_MOON_MAJORA_POT_02 },
// The Moon - Goron Trial //
- { SCENE_LAST_GORON,
- {
- { { -5670.0f, -2280.0f }, RC_MOON_TRIAL_GORON_POT_01 },
- { { -5610.0f, -2280.0f }, RC_MOON_TRIAL_GORON_POT_02 },
- { { -2700.0f, -2490.0f }, RC_MOON_TRIAL_GORON_POT_03 },
- { { -2640.0f, -2490.0f }, RC_MOON_TRIAL_GORON_POT_04 },
- { { -2580.0f, -2490.0f }, RC_MOON_TRIAL_GORON_POT_05 },
- { { -7200.0f, -1290.0f }, RC_MOON_TRIAL_GORON_POT_06 },
- { { -7260.0f, -1290.0f }, RC_MOON_TRIAL_GORON_POT_07 },
- { { -7200.0f, -1410.0f }, RC_MOON_TRIAL_GORON_POT_08 },
- { { -7260.0f, -1410.0f }, RC_MOON_TRIAL_GORON_POT_09 },
- { { -4890.0f, -1380.0f }, RC_MOON_TRIAL_GORON_POT_10 },
- { { -4890.0f, -1320.0f }, RC_MOON_TRIAL_GORON_POT_11 },
- { { -420.0f, -1425.0f }, RC_MOON_TRIAL_GORON_EARLY_POT_01 },
- { { -480.0f, -1425.0f }, RC_MOON_TRIAL_GORON_EARLY_POT_02 },
- { { -420.0f, -1275.0f }, RC_MOON_TRIAL_GORON_EARLY_POT_03 },
- { { -480.0f, -1275.0f }, RC_MOON_TRIAL_GORON_EARLY_POT_04 },
- } },
+ { { SCENE_LAST_GORON, 0, 22 }, RC_MOON_TRIAL_GORON_POT_01 },
+ { { SCENE_LAST_GORON, 0, 21 }, RC_MOON_TRIAL_GORON_POT_02 },
+ { { SCENE_LAST_GORON, 0, 25 }, RC_MOON_TRIAL_GORON_POT_03 },
+ { { SCENE_LAST_GORON, 0, 23 }, RC_MOON_TRIAL_GORON_POT_04 },
+ { { SCENE_LAST_GORON, 0, 24 }, RC_MOON_TRIAL_GORON_POT_05 },
+ { { SCENE_LAST_GORON, 0, 35 }, RC_MOON_TRIAL_GORON_POT_06 },
+ { { SCENE_LAST_GORON, 0, 33 }, RC_MOON_TRIAL_GORON_POT_07 },
+ { { SCENE_LAST_GORON, 0, 34 }, RC_MOON_TRIAL_GORON_POT_08 },
+ { { SCENE_LAST_GORON, 0, 32 }, RC_MOON_TRIAL_GORON_POT_09 },
+ { { SCENE_LAST_GORON, 0, 26 }, RC_MOON_TRIAL_GORON_POT_10 },
+ { { SCENE_LAST_GORON, 0, 27 }, RC_MOON_TRIAL_GORON_POT_11 },
+ { { SCENE_LAST_GORON, 0, 29 }, RC_MOON_TRIAL_GORON_EARLY_POT_01 },
+ { { SCENE_LAST_GORON, 0, 28 }, RC_MOON_TRIAL_GORON_EARLY_POT_02 },
+ { { SCENE_LAST_GORON, 0, 31 }, RC_MOON_TRIAL_GORON_EARLY_POT_03 },
+ { { SCENE_LAST_GORON, 0, 30 }, RC_MOON_TRIAL_GORON_EARLY_POT_04 },
// The Moon - Link Trial //
- { SCENE_LAST_LINK,
- {
- { { -270.0f, -90.0f }, RC_MOON_TRIAL_LINK_POT_01 },
- { { -270.0f, -150.0f }, RC_MOON_TRIAL_LINK_POT_02 },
- { { -210.0f, -90.0f }, RC_MOON_TRIAL_LINK_POT_03 },
- { { -210.0f, -150.0f }, RC_MOON_TRIAL_LINK_POT_04 },
- { { 210.0f, -90.0f }, RC_MOON_TRIAL_LINK_POT_05 },
- { { 210.0f, -150.0f }, RC_MOON_TRIAL_LINK_POT_06 },
- { { 270.0f, -90.0f }, RC_MOON_TRIAL_LINK_POT_07 },
- { { 270.0f, -150.0f }, RC_MOON_TRIAL_LINK_POT_08 },
- } },
- // Pirate's Fortress //
- { SCENE_PIRATE,
- {
- { { 4020.0f, -1860.0f }, RC_PIRATE_FORTRESS_INTERIOR_GUARDED_POT_01 },
- { { 2040.0f, -1380.0f }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_POT_02 },
- { { 1920.0f, -640.0f }, RC_PIRATE_FORTRESS_SEWERS_WATERWAY_POT_01 },
- } },
+ { { SCENE_LAST_LINK, 0, 3 }, RC_MOON_TRIAL_LINK_POT_01 },
+ { { SCENE_LAST_LINK, 0, 1 }, RC_MOON_TRIAL_LINK_POT_02 },
+ { { SCENE_LAST_LINK, 0, 4 }, RC_MOON_TRIAL_LINK_POT_03 },
+ { { SCENE_LAST_LINK, 0, 2 }, RC_MOON_TRIAL_LINK_POT_04 },
+ { { SCENE_LAST_LINK, 0, 7 }, RC_MOON_TRIAL_LINK_POT_05 },
+ { { SCENE_LAST_LINK, 0, 5 }, RC_MOON_TRIAL_LINK_POT_06 },
+ { { SCENE_LAST_LINK, 0, 8 }, RC_MOON_TRIAL_LINK_POT_07 },
+ { { SCENE_LAST_LINK, 0, 6 }, RC_MOON_TRIAL_LINK_POT_08 },
+ // Pirates' Fortress Interior //
+ { { SCENE_PIRATE, 13, 6 }, RC_PIRATE_FORTRESS_INTERIOR_GUARDED_POT_01 },
+ { { SCENE_PIRATE, 11, 35 }, RC_PIRATE_FORTRESS_SEWERS_HEART_PIECE_ROOM_POT_02 },
+ { { SCENE_PIRATE, 10, 8 }, RC_PIRATE_FORTRESS_SEWERS_WATERWAY_POT_01 },
// Beneath the Well //
- { SCENE_REDEAD,
- {
- { { 1620.0f, -960.0f }, RC_BENEATH_THE_WELL_BIG_POE_POT_01 },
- { { 1620.0f, -1560.0f }, RC_BENEATH_THE_WELL_BIG_POE_POT_02 },
- { { 2280.0f, -1560.0f }, RC_BENEATH_THE_WELL_BIG_POE_POT_03 },
- { { 2280.0f, -960.0f }, RC_BENEATH_THE_WELL_BIG_POE_POT_04 },
- { { 1185.0f, -915.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_01 },
- { { 1185.0f, -945.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_02 },
- { { 1185.0f, -975.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_03 },
- { { 1185.0f, -1005.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_04 },
- { { 1185.0f, -1035.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_05 },
- { { 1185.0f, -1065.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_06 },
- { { 1185.0f, -1095.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_07 },
- { { 1185.0f, -1125.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_08 },
- { { 1185.0f, -1155.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_09 },
- { { 1185.0f, -1185.0f }, RC_BENEATH_THE_WELL_MIDDLE_POT_10 },
- } },
+ { { SCENE_REDEAD, 12, 7 }, RC_BENEATH_THE_WELL_BIG_POE_POT_01 },
+ { { SCENE_REDEAD, 12, 8 }, RC_BENEATH_THE_WELL_BIG_POE_POT_02 },
+ { { SCENE_REDEAD, 12, 6 }, RC_BENEATH_THE_WELL_BIG_POE_POT_03 },
+ { { SCENE_REDEAD, 12, 5 }, RC_BENEATH_THE_WELL_BIG_POE_POT_04 },
+ { { SCENE_REDEAD, 6, 14 }, RC_BENEATH_THE_WELL_MIDDLE_POT_01 },
+ { { SCENE_REDEAD, 6, 15 }, RC_BENEATH_THE_WELL_MIDDLE_POT_02 },
+ { { SCENE_REDEAD, 6, 16 }, RC_BENEATH_THE_WELL_MIDDLE_POT_03 },
+ { { SCENE_REDEAD, 6, 17 }, RC_BENEATH_THE_WELL_MIDDLE_POT_04 },
+ { { SCENE_REDEAD, 6, 18 }, RC_BENEATH_THE_WELL_MIDDLE_POT_05 },
+ { { SCENE_REDEAD, 6, 19 }, RC_BENEATH_THE_WELL_MIDDLE_POT_06 },
+ { { SCENE_REDEAD, 6, 20 }, RC_BENEATH_THE_WELL_MIDDLE_POT_07 },
+ { { SCENE_REDEAD, 6, 21 }, RC_BENEATH_THE_WELL_MIDDLE_POT_08 },
+ { { SCENE_REDEAD, 6, 22 }, RC_BENEATH_THE_WELL_MIDDLE_POT_09 },
+ { { SCENE_REDEAD, 6, 23 }, RC_BENEATH_THE_WELL_MIDDLE_POT_10 },
// Woodfall Temple //
- { SCENE_MITURIN,
- {
- { { 120.0f, 2100.0f }, RC_WOODFALL_TEMPLE_ENTRANCE_POT },
- { { 660.0f, -120.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_01 },
- { { 660.0f, 120.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_02 },
- { { 630.0f, 510.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_03 },
- { { 570.0f, 570.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_04 },
- { { 510.0f, 630.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_05 },
- { { 510.0f, 510.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_06 },
- { { 675.0f, 255.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_01 },
- { { 645.0f, 255.0f }, RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_02 },
- { { -780.0f, -165.0f }, RC_WOODFALL_TEMPLE_MAZE_POT_01 },
- { { -780.0f, -105.0f }, RC_WOODFALL_TEMPLE_MAZE_POT_02 },
- { { -120.0f, -2220.0f }, RC_WOODFALL_TEMPLE_PRE_BOSS_POT_01 },
- { { 120.0f, -2220.0f }, RC_WOODFALL_TEMPLE_PRE_BOSS_POT_02 },
- { { 1335.0f, 585.0f }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_01 },
- { { 1335.0f, 615.0f }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_02 },
- { { 1335.0f, 645.0f }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_03 },
- { { 1335.0f, 675.0f }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_04 },
- } },
+ { { SCENE_MITURIN, 2, 22 }, RC_WOODFALL_TEMPLE_ENTRANCE_POT },
+ { { SCENE_MITURIN, 1, 22 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_01 },
+ { { SCENE_MITURIN, 1, 23 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_02 },
+ { { SCENE_MITURIN, 1, 27 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_03 },
+ { { SCENE_MITURIN, 1, 24 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_04 },
+ { { SCENE_MITURIN, 1, 26 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_05 },
+ { { SCENE_MITURIN, 1, 21 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_LOWER_POT_06 },
+ { { SCENE_MITURIN, 1, 10 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_01 },
+ { { SCENE_MITURIN, 1, 11 }, RC_WOODFALL_TEMPLE_MAIN_ROOM_UPPER_POT_02 },
+ { { SCENE_MITURIN, 3, 13 }, RC_WOODFALL_TEMPLE_MAZE_POT_01 },
+ { { SCENE_MITURIN, 3, 14 }, RC_WOODFALL_TEMPLE_MAZE_POT_02 },
+ { { SCENE_MITURIN, 0, 28 }, RC_WOODFALL_TEMPLE_PRE_BOSS_POT_01 },
+ { { SCENE_MITURIN, 0, 29 }, RC_WOODFALL_TEMPLE_PRE_BOSS_POT_02 },
+ { { SCENE_MITURIN, 5, 14 }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_01 },
+ { { SCENE_MITURIN, 5, 15 }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_02 },
+ { { SCENE_MITURIN, 5, 16 }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_03 },
+ { { SCENE_MITURIN, 5, 17 }, RC_WOODFALL_TEMPLE_WATER_ROOM_POT_04 },
// Swamp Spider House //
- { SCENE_KINSTA1,
- {
- { { -30.0f, -1650.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_LOWER_POT_01 },
- { { 30.0f, -1650.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_LOWER_POT_02 },
- { { 330.0f, -1651.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_01 },
- { { 330.0f, -1590.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_02 },
- { { 330.0f, -1531.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_03 },
- { { 330.0f, -1470.0f }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_04 },
- { { 544.0f, -569.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_01 },
- { { 483.0f, -569.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_02 },
- { { 575.0f, -538.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_03 },
- { { 514.0f, -539.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_04 },
- { { 454.0f, -539.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_05 },
- { { 451.0f, -1232.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_06 },
- { { 451.0f, -1290.0f }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_07 },
- { { 90.0f, -209.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_01 },
- { { 89.0f, -269.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_02 },
- { { -90.0f, -270.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_03 },
- { { 330.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_LEFT_POT_01 },
- { { 270.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_LEFT_POT_02 },
- { { -270.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_RIGHT_POT_01 },
- { { -330.0f, -210.0f }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_RIGHT_POT_02 },
- { { -871.0f, -872.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_POT_01 },
- { { -809.0f, -870.0f }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_POT_02 },
- } },
+ { { SCENE_KINSTA1, 2, 0 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_LOWER_POT_01 },
+ { { SCENE_KINSTA1, 2, 1 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_LOWER_POT_02 },
+ { { SCENE_KINSTA1, 2, 2 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_01 },
+ { { SCENE_KINSTA1, 2, 5 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_02 },
+ { { SCENE_KINSTA1, 2, 4 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_03 },
+ { { SCENE_KINSTA1, 2, 3 }, RC_SWAMP_SPIDER_HOUSE_GOLD_ROOM_UPPER_POT_04 },
+ { { SCENE_KINSTA1, 4, 23 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_01 },
+ { { SCENE_KINSTA1, 4, 21 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_02 },
+ { { SCENE_KINSTA1, 4, 24 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_03 },
+ { { SCENE_KINSTA1, 4, 22 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_04 },
+ { { SCENE_KINSTA1, 4, 20 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_05 },
+ { { SCENE_KINSTA1, 4, 3 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_06 },
+ { { SCENE_KINSTA1, 4, 4 }, RC_SWAMP_SPIDER_HOUSE_JAR_ROOM_POT_07 },
+ { { SCENE_KINSTA1, 1, 7 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_01 },
+ { { SCENE_KINSTA1, 1, 6 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_02 },
+ { { SCENE_KINSTA1, 1, 5 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_LOWER_POT_03 },
+ { { SCENE_KINSTA1, 1, 9 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_LEFT_POT_01 },
+ { { SCENE_KINSTA1, 1, 8 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_LEFT_POT_02 },
+ { { SCENE_KINSTA1, 1, 4 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_RIGHT_POT_01 },
+ { { SCENE_KINSTA1, 1, 3 }, RC_SWAMP_SPIDER_HOUSE_MAIN_ROOM_UPPER_RIGHT_POT_02 },
+ { { SCENE_KINSTA1, 3, 0 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_POT_01 },
+ { { SCENE_KINSTA1, 3, 1 }, RC_SWAMP_SPIDER_HOUSE_MONUMENT_ROOM_POT_02 },
// Ocean Spider House //
- { SCENE_KINDAN2,
- {
- { { 64.0f, -1650.0f }, RC_OCEAN_SPIDER_HOUSE_MAIN_ROOM_POT_01 },
- { { 2.0f, -1722.0f }, RC_OCEAN_SPIDER_HOUSE_MAIN_ROOM_WEB_POT },
- { { -569.0f, -1200.0f }, RC_OCEAN_SPIDER_HOUSE_STORAGE_POT_02 },
- { { -630.0f, -1200.0f }, RC_OCEAN_SPIDER_HOUSE_STORAGE_POT_03 },
- } },
+ { { SCENE_KINDAN2, 1, 28 }, RC_OCEAN_SPIDER_HOUSE_MAIN_ROOM_POT_01 },
+ { { SCENE_KINDAN2, 1, 27 }, RC_OCEAN_SPIDER_HOUSE_MAIN_ROOM_WEB_POT },
+ { { SCENE_KINDAN2, 5, 12 }, RC_OCEAN_SPIDER_HOUSE_STORAGE_POT_02 },
+ { { SCENE_KINDAN2, 5, 13 }, RC_OCEAN_SPIDER_HOUSE_STORAGE_POT_03 },
// Great Bay Temple - Gyorg's Lair //
- { SCENE_SEA_BS,
- {
- { { 150.0f, 150.0f }, RC_GREAT_BAY_TEMPLE_BOSS_POT_01 },
- { { -150.0f, 150.0f }, RC_GREAT_BAY_TEMPLE_BOSS_POT_02 },
- { { -150.0f, -150.0f }, RC_GREAT_BAY_TEMPLE_BOSS_POT_03 },
- { { 150.0f, -150.0f }, RC_GREAT_BAY_TEMPLE_BOSS_POT_04 },
- { { 1200.0f, -1200.0f }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_01 },
- { { 1200.0f, 1200.0f }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_02 },
- { { -1200.0f, 1200.0f }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_03 },
- { { -1200.0f, -1200.0f }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_04 },
- } },
+ { { SCENE_SEA_BS, 0, 2 }, RC_GREAT_BAY_TEMPLE_BOSS_POT_01 },
+ { { SCENE_SEA_BS, 0, 3 }, RC_GREAT_BAY_TEMPLE_BOSS_POT_02 },
+ { { SCENE_SEA_BS, 0, 4 }, RC_GREAT_BAY_TEMPLE_BOSS_POT_03 },
+ { { SCENE_SEA_BS, 0, 1 }, RC_GREAT_BAY_TEMPLE_BOSS_POT_04 },
+ { { SCENE_SEA_BS, 0, 5 }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_01 },
+ { { SCENE_SEA_BS, 0, 8 }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_02 },
+ { { SCENE_SEA_BS, 0, 7 }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_03 },
+ { { SCENE_SEA_BS, 0, 6 }, RC_GREAT_BAY_TEMPLE_BOSS_UNDERWATER_POT_04 },
// Great Bay Temple //
- { SCENE_SEA,
- {
- { { -1905.0f, -1200.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_03 },
- { { -1755.0f, -1200.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_06 },
- { { -1755.0f, -1680.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_07 },
- { { -1755.0f, -1725.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_08 },
- { { -1755.0f, -1770.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_09 },
- { { -1905.0f, -1680.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_10 },
- { { -1905.0f, -1725.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_11 },
- { { -1905.0f, -1770.0f }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_12 },
- { { 600.0f, -30.0f }, RC_GREAT_BAY_TEMPLE_CENTRAL_ROOM_POT_01 },
- { { 600.0f, 30.0f }, RC_GREAT_BAY_TEMPLE_CENTRAL_ROOM_POT_02 },
- { { 1265.0f, -785.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_01 },
- { { 1235.0f, -815.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_02 },
- { { 1575.0f, -1155.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_03 },
- { { 1605.0f, -1125.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_04 },
- { { 1170.0f, -1078.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_01 },
- { { 1310.0f, -1078.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_02 },
- { { 1310.0f, -1218.0f }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_03 },
- { { 540.0f, -930.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_01 },
- { { -540.0f, -930.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_02 },
- { { -540.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_03 },
- { { 540.0f, -2070.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_04 },
- { { -479.0f, 2141.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_01 },
- { { -524.0f, 2141.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_02 },
- { { -391.0f, 1959.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_03 },
- { { -436.0f, 1959.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_04 },
- { { -391.0f, 1810.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_05 },
- { { -436.0f, 1810.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_06 },
- { { -524.0f, 1628.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_07 },
- { { -479.0f, 1628.0f }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_08 },
- { { 2970.0f, 1020.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_UPPER_POT_01 },
- { { 2970.0f, 960.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_UPPER_POT_02 },
- { { 1500.0f, 540.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_01 },
- { { 1590.0f, 540.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_02 },
- { { 1712.0f, 1215.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_03 },
- { { 1500.0f, 1030.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_03 },
- { { 1590.0f, 1250.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_04 },
- { { 1635.0f, 1620.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_05 },
- { { 1470.0f, 1665.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_07 },
- { { 1455.0f, 1620.0f }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_08 },
- { { 2835.0f, -555.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_01 },
- { { 2835.0f, -495.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_02 },
- { { 2745.0f, -495.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_03 },
- { { 2745.0f, -555.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_04 },
- { { 2730.0f, -975.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_05 },
- { { 2775.0f, -975.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_06 },
- { { 3555.0f, -720.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_07 },
- { { 3555.0f, -675.0f }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_08 },
- { { -1530.0f, 60.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_01 },
- { { -1560.0f, 30.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_02 },
- { { -2130.0f, 60.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_03 },
- { { -2100.0f, 30.0f }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_04 },
- { { -2250.0f, -1890.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_01 },
- { { -2280.0f, -1920.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_02 },
- { { -2280.0f, -2760.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_03 },
- { { -2250.0f, -2790.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_04 },
- { { -1410.0f, -2790.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_05 },
- { { -1380.0f, -2760.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_06 },
- { { -1380.0f, -1920.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_07 },
- { { -1410.0f, -1890.0f }, RC_GREAT_BAY_TEMPLE_WART_POT_08 },
- } },
+ { { SCENE_SEA, 14, 3 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_03 },
+ { { SCENE_SEA, 14, 5 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_06 },
+ { { SCENE_SEA, 14, 4 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_07 },
+ { { SCENE_SEA, 14, 10 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_08 },
+ { { SCENE_SEA, 14, 9 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_09 },
+ { { SCENE_SEA, 14, 2 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_10 },
+ { { SCENE_SEA, 14, 8 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_11 },
+ { { SCENE_SEA, 14, 7 }, RC_GREAT_BAY_TEMPLE_BEFORE_WART_POT_12 },
+ { { SCENE_SEA, 0, 16 }, RC_GREAT_BAY_TEMPLE_CENTRAL_ROOM_POT_01 },
+ { { SCENE_SEA, 0, 17 }, RC_GREAT_BAY_TEMPLE_CENTRAL_ROOM_POT_02 },
+ { { SCENE_SEA, 4, 9 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_01 },
+ { { SCENE_SEA, 4, 20 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_02 },
+ { { SCENE_SEA, 4, 10 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_03 },
+ { { SCENE_SEA, 4, 21 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_SURFACE_POT_04 },
+ { { SCENE_SEA, 4, 11 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_01 },
+ { { SCENE_SEA, 4, 13 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_02 },
+ { { SCENE_SEA, 4, 12 }, RC_GREAT_BAY_TEMPLE_COMPASS_ROOM_WATER_POT_03 },
+ { { SCENE_SEA, 12, 9 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_01 },
+ { { SCENE_SEA, 12, 7 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_02 },
+ { { SCENE_SEA, 12, 6 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_03 },
+ { { SCENE_SEA, 12, 8 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_1_POT_04 },
+ { { SCENE_SEA, 11, 5 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_01 },
+ { { SCENE_SEA, 11, 3 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_02 },
+ { { SCENE_SEA, 11, 15 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_03 },
+ { { SCENE_SEA, 11, 1 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_04 },
+ { { SCENE_SEA, 11, 14 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_05 },
+ { { SCENE_SEA, 11, 0 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_06 },
+ { { SCENE_SEA, 11, 2 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_07 },
+ { { SCENE_SEA, 11, 4 }, RC_GREAT_BAY_TEMPLE_PRE_BOSS_POT_08 },
+ { { SCENE_SEA, 10, 5 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_UPPER_POT_01 },
+ { { SCENE_SEA, 10, 4 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_3_UPPER_POT_02 },
+ { { SCENE_SEA, 1, 3 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_01 },
+ { { SCENE_SEA, 1, 4 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_02 },
+ { { SCENE_SEA, 1, 16 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_SURFACE_POT_03 },
+ { { SCENE_SEA, 1, 5 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_03 },
+ { { SCENE_SEA, 1, 6 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_04 },
+ { { SCENE_SEA, 1, 11 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_05 },
+ { { SCENE_SEA, 1, 13 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_07 },
+ { { SCENE_SEA, 1, 10 }, RC_GREAT_BAY_TEMPLE_MAP_ROOM_WATER_POT_08 },
+ { { SCENE_SEA, 9, 24 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_01 },
+ { { SCENE_SEA, 9, 25 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_02 },
+ { { SCENE_SEA, 9, 23 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_03 },
+ { { SCENE_SEA, 9, 22 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_04 },
+ { { SCENE_SEA, 9, 26 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_05 },
+ { { SCENE_SEA, 9, 27 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_06 },
+ { { SCENE_SEA, 9, 20 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_07 },
+ { { SCENE_SEA, 9, 21 }, RC_GREAT_BAY_TEMPLE_GREEN_PIPE_2_POT_08 },
+ { { SCENE_SEA, 6, 11 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_01 },
+ { { SCENE_SEA, 6, 10 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_02 },
+ { { SCENE_SEA, 6, 8 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_03 },
+ { { SCENE_SEA, 6, 9 }, RC_GREAT_BAY_TEMPLE_RED_PIPE_BEFORE_WART_POT_04 },
+ { { SCENE_SEA, 7, 2 }, RC_GREAT_BAY_TEMPLE_WART_POT_01 },
+ { { SCENE_SEA, 7, 0 }, RC_GREAT_BAY_TEMPLE_WART_POT_02 },
+ { { SCENE_SEA, 7, 6 }, RC_GREAT_BAY_TEMPLE_WART_POT_03 },
+ { { SCENE_SEA, 7, 1 }, RC_GREAT_BAY_TEMPLE_WART_POT_04 },
+ { { SCENE_SEA, 7, 7 }, RC_GREAT_BAY_TEMPLE_WART_POT_05 },
+ { { SCENE_SEA, 7, 4 }, RC_GREAT_BAY_TEMPLE_WART_POT_06 },
+ { { SCENE_SEA, 7, 5 }, RC_GREAT_BAY_TEMPLE_WART_POT_07 },
+ { { SCENE_SEA, 7, 3 }, RC_GREAT_BAY_TEMPLE_WART_POT_08 },
// Stone Tower Temple //
- { SCENE_INISIE_N,
- {
- { { -30.0f, -1995.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_01 },
- { { -30.0f, -1965.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_02 },
- { { -30.0f, -1935.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_03 },
- { { -30.0f, -1905.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_04 },
- { { 30.0f, -1995.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_05 },
- { { 30.0f, -1965.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_06 },
- { { 30.0f, -1935.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_07 },
- { { 30.0f, -1905.0f }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_08 },
- { { 45.0f, -690.0f }, RC_STONE_TOWER_TEMPLE_ENTRANCE_POT_01 },
- { { -45.0f, -690.0f }, RC_STONE_TOWER_TEMPLE_ENTRANCE_POT_02 },
- { { -1275.0f, -1395.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_01 },
- { { -1275.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_02 },
- { { -1425.0f, -1395.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_03 },
- { { -1425.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_04 },
- { { -1275.0f, -705.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_01 },
- { { -1275.0f, -615.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_02 },
- { { -1425.0f, -705.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_03 },
- { { -1425.0f, -615.0f }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_04 },
- { { 1350.0f, -1770.0f }, RC_STONE_TOWER_TEMPLE_MIRROR_ROOM_POT_01 },
- { { 1230.0f, -1770.0f }, RC_STONE_TOWER_TEMPLE_MIRROR_ROOM_POT_02 },
- { { 810.0f, -1260.0f }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_01 },
- { { 750.0f, -1260.0f }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_02 },
- { { 810.0f, -1320.0f }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_03 },
- { { 1800.0f, -900.0f }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_01 },
- { { 1800.0f, -840.0f }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_02 },
- { { 615.0f, -3375.0f }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_01 },
- { { 585.0f, -3375.0f }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_02 },
- { { 615.0f, -3465.0f }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_03 },
- { { 585.0f, -3465.0f }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_04 },
- } },
+ { { SCENE_INISIE_N, 8, 14 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_01 },
+ { { SCENE_INISIE_N, 8, 15 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_02 },
+ { { SCENE_INISIE_N, 8, 18 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_03 },
+ { { SCENE_INISIE_N, 8, 21 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_04 },
+ { { SCENE_INISIE_N, 8, 16 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_05 },
+ { { SCENE_INISIE_N, 8, 17 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_06 },
+ { { SCENE_INISIE_N, 8, 19 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_07 },
+ { { SCENE_INISIE_N, 8, 20 }, RC_STONE_TOWER_TEMPLE_SPIKED_BAR_ROOM_POT_08 },
+ { { SCENE_INISIE_N, 0, 7 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_POT_01 },
+ { { SCENE_INISIE_N, 0, 8 }, RC_STONE_TOWER_TEMPLE_ENTRANCE_POT_02 },
+ { { SCENE_INISIE_N, 4, 15 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_01 },
+ { { SCENE_INISIE_N, 4, 16 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_02 },
+ { { SCENE_INISIE_N, 4, 13 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_03 },
+ { { SCENE_INISIE_N, 4, 14 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_POT_04 },
+ { { SCENE_INISIE_N, 4, 17 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_01 },
+ { { SCENE_INISIE_N, 4, 12 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_02 },
+ { { SCENE_INISIE_N, 4, 18 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_03 },
+ { { SCENE_INISIE_N, 4, 11 }, RC_STONE_TOWER_TEMPLE_LAVA_ROOM_AFTER_BLOCK_POT_04 },
+ { { SCENE_INISIE_N, 7, 6 }, RC_STONE_TOWER_TEMPLE_MIRROR_ROOM_POT_01 },
+ { { SCENE_INISIE_N, 7, 5 }, RC_STONE_TOWER_TEMPLE_MIRROR_ROOM_POT_02 },
+ { { SCENE_INISIE_N, 3, 12 }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_01 },
+ { { SCENE_INISIE_N, 3, 10 }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_02 },
+ { { SCENE_INISIE_N, 3, 11 }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_LOWER_POT_03 },
+ { { SCENE_INISIE_N, 3, 13 }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_01 },
+ { { SCENE_INISIE_N, 3, 14 }, RC_STONE_TOWER_TEMPLE_WATER_ROOM_UNDERWATER_UPPER_POT_02 },
+ { { SCENE_INISIE_N, 9, 12 }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_01 },
+ { { SCENE_INISIE_N, 9, 14 }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_02 },
+ { { SCENE_INISIE_N, 9, 11 }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_03 },
+ { { SCENE_INISIE_N, 9, 13 }, RC_STONE_TOWER_TEMPLE_WIND_ROOM_POT_04 },
// Stone Tower Temple - Inverted //
- { SCENE_INISIE_R,
- {
- { { 2070.0f, -1620.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_01 },
- { { 2790.0f, -1620.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_02 },
- { { 2790.0f, -900.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_03 },
- { { 2070.0f, -900.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_04 },
- { { -735.0f, -1215.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_MAZE_SIDE_POT_01 },
- { { -735.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_MAZE_SIDE_POT_02 },
- { { -1605.0f, -1395.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_WIZZROBE_SIDE_POT_01 },
- { { -1605.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_WIZZROBE_SIDE_POT_02 },
- { { -30.0f, -1995.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_01 },
- { { -30.0f, -1965.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_02 },
- { { -30.0f, -1935.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_03 },
- { { -30.0f, -1905.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_04 },
- { { 30.0f, -1995.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_05 },
- { { 30.0f, -1965.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_06 },
- { { 30.0f, -1935.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_07 },
- { { 30.0f, -1905.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_08 },
- { { 1350.0f, -630.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_BRIDGE_POT_01 },
- { { 1230.0f, -630.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_BRIDGE_POT_02 },
- { { 735.0f, -1215.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_LEDGE_POT_02 },
- { { 735.0f, -1305.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_LEDGE_POT_03 },
- { { -1290.0f, -510.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_01 },
- { { -1290.0f, -450.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_02 },
- { { -1410.0f, -450.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_03 },
- { { -1410.0f, -510.0f }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_04 },
- } },
+ { { SCENE_INISIE_R, 11, 4 }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_01 },
+ { { SCENE_INISIE_R, 11, 1 }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_02 },
+ { { SCENE_INISIE_R, 11, 2 }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_03 },
+ { { SCENE_INISIE_R, 11, 3 }, RC_STONE_TOWER_TEMPLE_INVERTED_GOMESS_POT_04 },
+ { { SCENE_INISIE_R, 2, 11 }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_MAZE_SIDE_POT_01 },
+ { { SCENE_INISIE_R, 2, 9 }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_MAZE_SIDE_POT_02 },
+ { { SCENE_INISIE_R, 2, 12 }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_WIZZROBE_SIDE_POT_01 },
+ { { SCENE_INISIE_R, 2, 10 }, RC_STONE_TOWER_TEMPLE_INVERTED_POE_WIZZROBE_SIDE_POT_02 },
+ { { SCENE_INISIE_R, 8, 20 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_01 },
+ { { SCENE_INISIE_R, 8, 18 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_02 },
+ { { SCENE_INISIE_R, 8, 22 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_03 },
+ { { SCENE_INISIE_R, 8, 24 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_04 },
+ { { SCENE_INISIE_R, 8, 21 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_05 },
+ { { SCENE_INISIE_R, 8, 19 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_06 },
+ { { SCENE_INISIE_R, 8, 23 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_07 },
+ { { SCENE_INISIE_R, 8, 25 }, RC_STONE_TOWER_TEMPLE_INVERTED_PRE_BOSS_POT_08 },
+ { { SCENE_INISIE_R, 3, 17 }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_BRIDGE_POT_01 },
+ { { SCENE_INISIE_R, 3, 16 }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_BRIDGE_POT_02 },
+ { { SCENE_INISIE_R, 3, 26 }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_LEDGE_POT_02 },
+ { { SCENE_INISIE_R, 3, 23 }, RC_STONE_TOWER_TEMPLE_INVERTED_UPDRAFTS_LEDGE_POT_03 },
+ { { SCENE_INISIE_R, 4, 8 }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_01 },
+ { { SCENE_INISIE_R, 4, 13 }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_02 },
+ { { SCENE_INISIE_R, 4, 12 }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_03 },
+ { { SCENE_INISIE_R, 4, 9 }, RC_STONE_TOWER_TEMPLE_INVERTED_WIZZROBE_POT_04 },
};
-#define OBJTSUBO_RC (actor->home.rot.x)
-
-RandoCheckId IdentifyPot(Actor* actor) {
+// Identify the pot based on either the collectible flag if it exists or the scene Id, room, and actor list index
+void IdentifyPot(Actor* actor, bool* should) {
+ RandoCheckId randoCheckId = RC_UNKNOWN;
+ s16 actorListIndex = GetActorListIndex(actor);
auto randoStaticCheck =
Rando::StaticData::GetCheckFromFlag(FLAG_CYCL_SCENE_COLLECTIBLE, OBJ_TSUBO_PFE00(actor), gPlayState->sceneId);
if (randoStaticCheck.randoCheckId != RC_UNKNOWN && randoStaticCheck.randoCheckType == RCTYPE_POT) {
- return randoStaticCheck.randoCheckId;
+ // Pots using collectible flags
+ randoCheckId = randoStaticCheck.randoCheckId;
+ } else {
+ auto it = potMap.find({ gPlayState->sceneId, gPlayState->roomCtx.curRoom.num, actorListIndex });
+ if (it != potMap.end()) {
+ randoCheckId = it->second;
+ }
}
- RandoCheckId randoCheckId = RC_UNKNOWN;
- auto it = potMap.find((SceneId)gPlayState->sceneId);
- if (it == potMap.end()) {
- return randoCheckId;
+ if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
+ return;
}
- auto innerIt = it->second.find({ actor->home.pos.x, actor->home.pos.z });
- if (innerIt == it->second.end()) {
- return randoCheckId;
- }
- return innerIt->second;
+ Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
}
void ObjTsubo_RandoDraw(Actor* actor, PlayState* play) {
@@ -388,7 +339,8 @@ void ObjTsubo_RandoDraw(Actor* actor, PlayState* play) {
return;
}
- RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[OBJTSUBO_RC].randoItemId, (RandoCheckId)OBJTSUBO_RC);
+ RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
+ RandoItemId randoItemId = Rando::ConvertItem(RANDO_SAVE_CHECKS[randoCheckId].randoItemId, randoCheckId);
RandoItemType randoItemType = Rando::StaticData::Items[randoItemId].randoItemType;
switch (randoItemType) {
@@ -423,22 +375,12 @@ void ObjTsubo_RandoDraw(Actor* actor, PlayState* play) {
}
void Rando::ActorBehavior::InitObjTsuboBehavior() {
- COND_ID_HOOK(OnActorInit, ACTOR_OBJ_TSUBO, IS_RANDO, [](Actor* actor) {
- RandoCheckId randoCheckId = IdentifyPot(actor);
- if (randoCheckId == RC_UNKNOWN) {
- return;
- }
-
- if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
- return;
- }
-
- OBJTSUBO_RC = randoCheckId;
- });
+ COND_ID_HOOK(ShouldActorInit, ACTOR_OBJ_TSUBO, IS_RANDO, IdentifyPot);
COND_VB_SHOULD(VB_POT_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- if (OBJTSUBO_RC != RC_UNKNOWN) {
+ RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
+ if (randoCheckId != RC_UNKNOWN) {
*should = false;
actor->draw = ObjTsubo_RandoDraw;
}
@@ -446,7 +388,7 @@ void Rando::ActorBehavior::InitObjTsuboBehavior() {
COND_VB_SHOULD(VB_POT_DROP_COLLECTIBLE, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- RandoCheckId randoCheckId = (RandoCheckId)OBJTSUBO_RC;
+ RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
if (randoCheckId == RC_UNKNOWN) {
return;
}
@@ -469,7 +411,7 @@ void Rando::ActorBehavior::InitObjTsuboBehavior() {
*should = false;
// Clear the stored Check ID for pots that are on a timed respawn
- OBJTSUBO_RC = RC_UNKNOWN;
+ Rando::ActorBehavior::SetObjectRandoCheckId(actor, RC_UNKNOWN);
actor->draw = ObjTsubo_Draw;
});
}
diff --git a/mm/2s2h/Rando/Logic/Regions/South.cpp b/mm/2s2h/Rando/Logic/Regions/South.cpp
index c72cff0dc..08610e059 100644
--- a/mm/2s2h/Rando/Logic/Regions/South.cpp
+++ b/mm/2s2h/Rando/Logic/Regions/South.cpp
@@ -514,6 +514,8 @@ static RegisterShipInitFunc initFunc([]() {
CHECK(RC_WOODS_OF_MYSTERY_GRASS_19, true),
CHECK(RC_WOODS_OF_MYSTERY_GRASS_20, true),
CHECK(RC_WOODS_OF_MYSTERY_GRASS_21, true),
+ CHECK(RC_WOODS_OF_MYSTERY_GRASS_22, true),
+ CHECK(RC_WOODS_OF_MYSTERY_GRASS_23, true),
},
.exits = { // TO FROM
EXIT(ENTRANCE(SOUTHERN_SWAMP_POISONED, 7), ENTRANCE(WOODS_OF_MYSTERY, 0), true),
diff --git a/mm/2s2h/Rando/StaticData/Checks.cpp b/mm/2s2h/Rando/StaticData/Checks.cpp
index 7c713ce61..8ed159f45 100644
--- a/mm/2s2h/Rando/StaticData/Checks.cpp
+++ b/mm/2s2h/Rando/StaticData/Checks.cpp
@@ -2195,6 +2195,8 @@ std::map<RandoCheckId, RandoStaticCheck> Checks = {
RC(RC_WOODS_OF_MYSTERY_GRASS_19, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK),
RC(RC_WOODS_OF_MYSTERY_GRASS_20, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK),
RC(RC_WOODS_OF_MYSTERY_GRASS_21, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK),
+ RC(RC_WOODS_OF_MYSTERY_GRASS_22, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK),
+ RC(RC_WOODS_OF_MYSTERY_GRASS_23, RCTYPE_GRASS, SCENE_26SARUNOMORI, FLAG_NONE, 0x0, RI_JUNK),
RC(RC_WOODS_OF_MYSTERY_GROTTO_GRASS_01, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK),
RC(RC_WOODS_OF_MYSTERY_GROTTO_GRASS_02, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK),
RC(RC_WOODS_OF_MYSTERY_GROTTO_GRASS_03, RCTYPE_GRASS, SCENE_KAKUSIANA, FLAG_NONE, 0x0, RI_JUNK),
diff --git a/mm/2s2h/Rando/Types.h b/mm/2s2h/Rando/Types.h
index 297749727..f1836683e 100644
--- a/mm/2s2h/Rando/Types.h
+++ b/mm/2s2h/Rando/Types.h
@@ -2200,6 +2200,8 @@ typedef enum {
RC_WOODS_OF_MYSTERY_GRASS_19,
RC_WOODS_OF_MYSTERY_GRASS_20,
RC_WOODS_OF_MYSTERY_GRASS_21,
+ RC_WOODS_OF_MYSTERY_GRASS_22,
+ RC_WOODS_OF_MYSTERY_GRASS_23,
RC_WOODS_OF_MYSTERY_GROTTO_GRASS_01,
RC_WOODS_OF_MYSTERY_GROTTO_GRASS_02,
RC_WOODS_OF_MYSTERY_GROTTO_GRASS_03,
diff --git a/mm/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c b/mm/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
index cda32e6b2..2caef7b0c 100644
--- a/mm/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
+++ b/mm/src/overlays/actors/ovl_Obj_Mure2/z_obj_mure2.c
@@ -7,6 +7,7 @@
#include "z_obj_mure2.h"
#include "2s2h/ShipUtils.h"
+#include "GameInteractor/GameInteractor.h"
#define FLAGS 0x00000000
@@ -142,7 +143,7 @@ void ObjMure2_SpawnChildren(ObjMure2* this, PlayState* play) {
this->actors[i] = Actor_SpawnAsChildAndCutscene(
&play->actorCtx, play, sActorIds[childType], pos->x, pos->y, pos->z, this->actor.world.rot.x, 0,
this->actor.world.rot.z, childParams, this->actor.csId, this->actor.halfDaysBits, NULL);
- if (this->actors[i] != NULL) {
+ if (GameInteractor_Should(VB_OBJ_MURE2_SET_CHILD_ROOM, this->actors[i] != NULL, this, i)) {
this->actors[i]->room = this->actor.room;
}
}
diff --git a/mm/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c b/mm/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
index 6a974685c..540ff63c4 100644
--- a/mm/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
+++ b/mm/src/overlays/actors/ovl_Obj_Mure3/z_obj_mure3.c
@@ -5,6 +5,7 @@
*/
#include "z_obj_mure3.h"
+#include "GameInteractor/GameInteractor.h"
#define FLAGS 0x00000000
@@ -84,7 +85,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) {
yRot = this->actor.world.rot.y;
for (i = 0; i < 6; i++) {
- if (!((this->unk164 >> i) & 1)) {
+ if (GameInteractor_Should(VB_OBJ_MURE3_DROP_COLLECTIBLE, !((this->unk164 >> i) & 1), this, i)) {
spawnPos.x = (Math_SinS(yRot) * 40.0f) + this->actor.world.pos.x;
spawnPos.z = (Math_CosS(yRot) * 40.0f) + this->actor.world.pos.z;
this->unk148[i] = (EnItem00*)Item_DropCollectible2(play, &spawnPos, 0x4000);
@@ -95,7 +96,7 @@ void func_8098F220(ObjMure3* this, PlayState* play) {
yRot += 0x2AAA;
}
- if (!((this->unk164 >> 6) & 1)) {
+ if (GameInteractor_Should(VB_OBJ_MURE3_DROP_COLLECTIBLE, !((this->unk164 >> 6) & 1), this, 6)) {
spawnPos.x = this->actor.world.pos.x;
spawnPos.z = this->actor.world.pos.z;
this->unk160 = Item_DropCollectible2(play, &spawnPos, 0x4002);