@@ -87,31 +87,60 @@ static bool IsSilverCleared(s16 switchFlag) {
8787 return false ;
8888}
8989
90+ extern " C" void EnGSwitch_RandomizerDraw (Actor* thisx, PlayState* play) {
91+ EnGSwitch* silver = reinterpret_cast <EnGSwitch*>(thisx);
92+ Matrix_Push ();
93+ Matrix_Scale (17 .5f , 17 .5f , 17 .5f , MTXMODE_APPLY);
94+ if (silver->type == ENGSWITCH_SILVER_RUPEE) {
95+ if (CVarGetInteger (CVAR_RANDOMIZER_ENHANCEMENT (" MysteriousShuffle" ), 0 )) {
96+ GetItemEntry_Draw (play, GET_ITEM_MYSTERY);
97+ } else {
98+ auto silverIdentity =
99+ OTRGlobals::Instance->gRandomizer ->IdentifySilver (gPlayState ->sceneNum , silver->actor .world .pos );
100+ auto itemEntry =
101+ Rando::Context::GetInstance ()->GetFinalGIEntry (silverIdentity.randomizerCheck , true , GI_NONE);
102+ GetItemEntry_Draw (play, itemEntry);
103+ }
104+ Matrix_Pop ();
105+ }
106+ }
107+
90108void RegisterShuffleSilver () {
91109 bool shouldRegister = IS_RANDO && RAND_GET_OPTION (RSK_SHUFFLE_SILVER);
92110
111+ COND_VB_SHOULD (VB_SILVER_COLLECT, shouldRegister, {
112+ if (*should) {
113+ EnGSwitch* silver = va_arg (args, EnGSwitch*);
114+ auto silverIdentity =
115+ OTRGlobals::Instance->gRandomizer ->IdentifySilver (gPlayState ->sceneNum , silver->actor .world .pos );
116+ Flags_SetRandomizerInf (silverIdentity.randomizerInf );
117+ Actor_Kill (&silver->actor );
118+ *should = false ;
119+ }
120+ });
121+
122+ COND_VB_SHOULD (VB_SILVER_COUNT_CHECK, shouldRegister, {
123+ EnGSwitch* silver = va_arg (args, EnGSwitch*);
124+ *should = false ;
125+ if (IsSilverCleared (silver->switchFlag )) {
126+ Flags_SetSwitch (gPlayState , silver->switchFlag );
127+ Actor_Kill (&silver->actor );
128+ }
129+ });
130+
93131 COND_VB_SHOULD (VB_SILVER_DESPAWN, shouldRegister, {
94132 EnGSwitch* silver = va_arg (args, EnGSwitch*);
95133 if (silver->type == ENGSWITCH_SILVER_RUPEE) {
96- auto silverIdentity = OTRGlobals::Instance->gRandomizer ->IdentifySilver (
97- gPlayState ->sceneNum , (s16)silver->actor .world .pos .x , (s16)silver->actor .world .pos .z );
98- *should = true ;
134+ auto silverIdentity =
135+ OTRGlobals::Instance->gRandomizer ->IdentifySilver (gPlayState ->sceneNum , silver->actor .world .pos );
99136 if (silverIdentity.randomizerCheck == RC_UNKNOWN_CHECK ||
100137 Flags_GetRandomizerInf (silverIdentity.randomizerInf )) {
138+ *should = true ;
101139 return ;
102140 }
103-
104- EnItem00* item00 =
105- (EnItem00*)Item_DropCollectible2 (gPlayState , &silver->actor .world .pos , ITEM00_SOH_DUMMY | 0x4000 );
106- item00->randoCheck = silverIdentity.randomizerCheck ;
107- item00->randoInf = silverIdentity.randomizerInf ;
108- item00->itemEntry =
109- Rando::Context::GetInstance ()->GetFinalGIEntry (silverIdentity.randomizerCheck , false , GI_RUPEE_BLUE);
110- item00->actor .draw = (ActorFunc)EnItem00_DrawRandomizedItem;
111- } else if (silver->type == ENGSWITCH_SILVER_TRACKER) {
112- if (IsSilverCleared (silver->switchFlag )) {
113- Flags_SetSwitch (gPlayState , silver->switchFlag );
114- }
141+ silver->actor .draw = EnGSwitch_RandomizerDraw;
142+ } else if (silver->type == ENGSWITCH_SILVER_TRACKER && IsSilverCleared (silver->switchFlag )) {
143+ Flags_SetSwitch (gPlayState , silver->switchFlag );
115144 *should = true ;
116145 }
117146 });
@@ -214,8 +243,8 @@ void Rando::StaticData::RegisterSilverLocations() {
214243 locationTable[RC_SHADOW_MQ_SILVER_BLADES_4] = Location::Collectable (RC_SHADOW_MQ_SILVER_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (3399 , -838 ), " RC_SHADOW_MQ_SILVER_BLADES_4" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_BLADES_4));
215244 locationTable[RC_SHADOW_MQ_SILVER_BLADES_5] = Location::Collectable (RC_SHADOW_MQ_SILVER_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (3558 , -1490 ), " RC_SHADOW_MQ_SILVER_BLADES_5" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_BLADES_5));
216245 locationTable[RC_SHADOW_MQ_SILVER_PIT_1] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (1970 , 3372 ), " RC_SHADOW_MQ_SILVER_PIT_1" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_1));
217- locationTable[RC_SHADOW_MQ_SILVER_PIT_2] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2110 , 3372 ), " RC_SHADOW_MQ_SILVER_PIT_2" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_2));
218- locationTable[RC_SHADOW_MQ_SILVER_PIT_3] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2110 , 3372 ), " RC_SHADOW_MQ_SILVER_PIT_3" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_3));
246+ locationTable[RC_SHADOW_MQ_SILVER_PIT_2] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2110 , - 970 ), " RC_SHADOW_MQ_SILVER_PIT_2" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_2));
247+ locationTable[RC_SHADOW_MQ_SILVER_PIT_3] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2110 , - 1092 ), " RC_SHADOW_MQ_SILVER_PIT_3" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_3));
219248 locationTable[RC_SHADOW_MQ_SILVER_PIT_4] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2131 , 3030 ), " RC_SHADOW_MQ_SILVER_PIT_4" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_4));
220249 locationTable[RC_SHADOW_MQ_SILVER_PIT_5] = Location::Collectable (RC_SHADOW_MQ_SILVER_PIT_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (2250 , 3372 ), " RC_SHADOW_MQ_SILVER_PIT_5" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_PIT_5));
221250 locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1] = Location::Collectable (RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS (5089 , 2049 ), " RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1" , RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf (RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1));
0 commit comments