diff options
| author | Garrett Cox <garrettjcox@gmail.com> | 2026-07-25 09:32:34 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-25 10:32:34 -0400 |
| commit | c03a59dae6cded706dfe51c78dd62fd5c76ec93c (patch) | |
| tree | 1860ec690ffbc4157a3d817a87281a73925963ac | |
| parent | b1edee5ffd3c732e7d2a31b9fd605157c6911263 (diff) | |
Make randomized checks no longer use custom texture after first obtain (#1810)
| -rw-r--r-- | mm/2s2h/Rando/ActorBehavior/ObjGrass.cpp | 7 | ||||
| -rw-r--r-- | mm/2s2h/Rando/ActorBehavior/ObjKibako.cpp | 30 | ||||
| -rw-r--r-- | mm/2s2h/Rando/ActorBehavior/ObjTaru.cpp | 4 | ||||
| -rw-r--r-- | mm/2s2h/Rando/ActorBehavior/ObjTsubo.cpp | 3 |
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; } |
