summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett Cox <garrettjcox@gmail.com>2026-07-25 09:32:34 -0500
committerGitHub <noreply@github.com>2026-07-25 10:32:34 -0400
commitc03a59dae6cded706dfe51c78dd62fd5c76ec93c (patch)
tree1860ec690ffbc4157a3d817a87281a73925963ac
parentb1edee5ffd3c732e7d2a31b9fd605157c6911263 (diff)
Make randomized checks no longer use custom texture after first obtain (#1810)
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp7
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp30
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp4
-rw-r--r--mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp3
4 files changed, 24 insertions, 20 deletions
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
index 51b21f497..08e245124 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp
@@ -451,7 +451,8 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
COND_VB_SHOULD(VB_KUSA_BUSH_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
- if (GetObjectRandoCheckId(actor) != RC_UNKNOWN) {
+ RandoCheckId randoCheckId = GetObjectRandoCheckId(actor);
+ if (randoCheckId != RC_UNKNOWN && !RANDO_SAVE_CHECKS[randoCheckId].obtained) {
*should = false;
actor->draw = EnKusaBush_RandoDraw;
}
@@ -462,7 +463,7 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
ObjGrassElement* grassElem = va_arg(args, ObjGrassElement*);
s32 j = va_arg(args, s32);
RandoCheckId randoCheckId = GetObjectRandoCheckId(grassElem);
- if (randoCheckId != RC_UNKNOWN) {
+ if (randoCheckId != RC_UNKNOWN && !RANDO_SAVE_CHECKS[randoCheckId].obtained) {
*should = false;
ObjGrass_RandoDrawOpa(objGrass, grassElem, j, randoCheckId);
}
@@ -472,7 +473,7 @@ void Rando::ActorBehavior::InitObjGrassBehavior() {
ObjGrass* objGrass = va_arg(args, ObjGrass*);
ObjGrassElement* grassElem = va_arg(args, ObjGrassElement*);
RandoCheckId randoCheckId = GetObjectRandoCheckId(grassElem);
- if (randoCheckId != RC_UNKNOWN) {
+ if (randoCheckId != RC_UNKNOWN && !RANDO_SAVE_CHECKS[randoCheckId].obtained) {
*should = false;
ObjGrass_RandoDrawXlu(objGrass, grassElem, randoCheckId);
}
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp b/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
index e3a8b802a..976811e7b 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp
@@ -10,6 +10,9 @@ extern "C" {
#include "src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h"
}
+void ObjKibako_RandoDraw(Actor* actor, PlayState* play);
+void ObjKibako2_RandoDraw(Actor* actor, PlayState* play);
+
std::map<std::tuple<s16, s16, s16>, RandoCheckId> crateMap = {
// Clock Town //
{ { SCENE_ALLEY, 0, 7 }, RC_CLOCK_TOWN_LAUNDRY_SMALL_CRATE },
@@ -118,7 +121,7 @@ std::map<std::tuple<s16, s16, s16>, RandoCheckId> crateMap = {
};
// Identify the crate RC by scene ID, room, and actor list index
-RandoCheckId IdentifyCrate(Actor* actor) {
+void IdentifyCrate(Actor* actor) {
RandoCheckId randoCheckId = RC_UNKNOWN;
s16 actorListIndex = GetActorListIndex(actor);
@@ -127,13 +130,18 @@ RandoCheckId IdentifyCrate(Actor* actor) {
randoCheckId = it->second;
}
- if (randoCheckId == RC_UNKNOWN || !RANDO_SAVE_CHECKS[randoCheckId].shuffled ||
- RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
- return RC_UNKNOWN;
+ if (!RANDO_SAVE_CHECKS[randoCheckId].shuffled || RANDO_SAVE_CHECKS[randoCheckId].cycleObtained) {
+ return;
}
Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
- return randoCheckId;
+ if (!RANDO_SAVE_CHECKS[randoCheckId].obtained) {
+ if (actor->id == ACTOR_OBJ_KIBAKO) {
+ actor->draw = ObjKibako_RandoDraw;
+ } else if (actor->id == ACTOR_OBJ_KIBAKO2) {
+ actor->draw = ObjKibako2_RandoDraw;
+ }
+ }
}
void ObjKibako_RandoDraw(Actor* actor, PlayState* play) {
@@ -219,17 +227,9 @@ void ObjKibako2_RandoDraw(Actor* actor, PlayState* play) {
}
void Rando::ActorBehavior::InitObjKibakoBehavior() {
- COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, IS_RANDO, [](Actor* actor) {
- if (IdentifyCrate(actor) != RC_UNKNOWN) {
- actor->draw = ObjKibako_RandoDraw;
- }
- });
+ COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, IS_RANDO, IdentifyCrate);
- COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, IS_RANDO, [](Actor* actor) {
- if (IdentifyCrate(actor) != RC_UNKNOWN) {
- actor->draw = ObjKibako2_RandoDraw;
- }
- });
+ COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, IS_RANDO, IdentifyCrate);
COND_VB_SHOULD(VB_CRATE_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp b/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
index 8d1318358..7c62711a4 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp
@@ -116,7 +116,9 @@ void Rando::ActorBehavior::InitObjTaruBehavior() {
}
Rando::ActorBehavior::SetObjectRandoCheckId(actor, randoCheckId);
- actor->draw = ObjTaru_RandoDraw;
+ if (!RANDO_SAVE_CHECKS[randoCheckId].obtained) {
+ actor->draw = ObjTaru_RandoDraw;
+ }
});
COND_VB_SHOULD(VB_BARREL_OR_CRATE_DROP_COLLECTIBLE, IS_RANDO, {
diff --git a/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp b/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
index 894a97e13..235403a36 100644
--- a/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
+++ b/mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp
@@ -380,7 +380,8 @@ void Rando::ActorBehavior::InitObjTsuboBehavior() {
COND_VB_SHOULD(VB_POT_DRAW_BE_OVERRIDDEN, IS_RANDO, {
Actor* actor = va_arg(args, Actor*);
RandoCheckId randoCheckId = Rando::ActorBehavior::GetObjectRandoCheckId(actor);
- if (randoCheckId != RC_UNKNOWN) {
+ RandoSaveCheck& randoSaveCheck = RANDO_SAVE_CHECKS[randoCheckId];
+ if (randoCheckId != RC_UNKNOWN && !randoSaveCheck.obtained) {
*should = false;
actor->draw = ObjTsubo_RandoDraw;
}