This commit is contained in:
Philip Dubé 2025-07-28 18:27:34 +01:00 committed by GitHub
commit eaaf2c93de
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 107 additions and 15 deletions

View file

@ -259,16 +259,60 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) {
} }
void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t flag) { void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t flag) {
if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && if (flagType == FLAG_SCENE_SWITCH) {
sceneNum == SCENE_GERUDOS_FORTRESS && flagType == FLAG_SCENE_SWITCH && flag == 0x3A) { auto dungeonInfo = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(sceneNum);
Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN); bool isVanilla = dungeonInfo == nullptr || dungeonInfo->IsVanilla();
}
if (sceneNum == SCENE_SPIRIT_TEMPLE && flagType == FLAG_SCENE_SWITCH) { switch (sceneNum) {
bool isVanilla = case SCENE_GERUDOS_FORTRESS:
Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla(); if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF && flag == 0x3A) {
if (isVanilla && flag == 0x23) { Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN);
Flags_SetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON); }
break;
case SCENE_DEKU_TREE:
if (!isVanilla && flag == 0x27) {
Flags_SetRandomizerInf(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH);
}
break;
case SCENE_DODONGOS_CAVERN:
if (!isVanilla && flag == 0x25) {
Flags_SetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES);
}
break;
case SCENE_JABU_JABU:
if (isVanilla && flag == 0x3b) {
Flags_SetRandomizerInf(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH);
}
break;
case SCENE_FOREST_TEMPLE:
if (flag == 0x26) {
Flags_SetRandomizerInf(RAND_INF_FOREST_DRAINED_WELL);
} else if (isVanilla && flag == 0x25) {
Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES);
} else if (!isVanilla && flag == 0x21) {
Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES);
} else if (!isVanilla && flag == 0x25) {
Flags_SetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT);
} else if (!isVanilla && flag == 0x2a) {
Flags_SetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES);
}
break;
case SCENE_FIRE_TEMPLE:
if (!isVanilla && flag == 0x28) {
Flags_SetRandomizerInf(RAND_INF_FIRE_MQ_LOBBY_TORCHES);
}
break;
case SCENE_SPIRIT_TEMPLE:
if (isVanilla && flag == 0x23) {
Flags_SetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON);
} else if (!isVanilla && flag == 0x37) {
Flags_SetRandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES);
}
break;
} }
} }
@ -1865,12 +1909,52 @@ void RandomizerOnActorInitHandler(void* actorRef) {
Actor* actor = static_cast<Actor*>(actorRef); Actor* actor = static_cast<Actor*>(actorRef);
if (actor->id == ACTOR_PLAYER) { if (actor->id == ACTOR_PLAYER) {
if (gPlayState->sceneNum == SCENE_SPIRIT_TEMPLE) { auto dungeonInfo = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(gPlayState->sceneNum);
bool isVanilla = bool isVanilla = dungeonInfo == nullptr || dungeonInfo->IsVanilla();
Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla(); switch (gPlayState->sceneNum) {
if (isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)) { case SCENE_DEKU_TREE:
Flags_SetSwitch(gPlayState, 0x23); if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH)) {
} Flags_SetSwitch(gPlayState, 0x27);
}
break;
case SCENE_DODONGOS_CAVERN:
if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES)) {
Flags_SetSwitch(gPlayState, 0x25);
}
break;
case SCENE_JABU_JABU:
if (isVanilla && Flags_GetRandomizerInf(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH)) {
Flags_SetSwitch(gPlayState, 0x3b);
}
break;
case SCENE_FOREST_TEMPLE:
if (Flags_GetRandomizerInf(RAND_INF_FOREST_DRAINED_WELL)) {
Flags_SetSwitch(gPlayState, 0x26);
} else if (isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES)) {
Flags_SetSwitch(gPlayState, 0x25);
} else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_LOBBY_EYES)) {
Flags_SetSwitch(gPlayState, 0x21);
Flags_SetSwitch(gPlayState, 0x2a);
} else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT)) {
Flags_SetSwitch(gPlayState, 0x25);
}
break;
case SCENE_FIRE_TEMPLE:
if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_FIRE_MQ_LOBBY_TORCHES)) {
Flags_SetSwitch(gPlayState, 0x28);
}
break;
case SCENE_SPIRIT_TEMPLE:
if (isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)) {
Flags_SetSwitch(gPlayState, 0x23);
} else if (!isVanilla && Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES)) {
Flags_SetSwitch(gPlayState, 0x37);
}
break;
} }
} }

View file

@ -1091,8 +1091,16 @@ DEFINE_RAND_INF(RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5)
DEFINE_RAND_INF(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS) DEFINE_RAND_INF(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS)
DEFINE_RAND_INF(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN) DEFINE_RAND_INF(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN)
DEFINE_RAND_INF(RAND_INF_DEKU_TREE_MQ_TORCH_SWITCH)
DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEES)
DEFINE_RAND_INF(RAND_INF_JABU_JABUS_BELLY_FIRST_SWITCH)
DEFINE_RAND_INF(RAND_INF_FOREST_LOBBY_EYES)
DEFINE_RAND_INF(RAND_INF_FOREST_DRAINED_WELL)
DEFINE_RAND_INF(RAND_INF_FOREST_MQ_COURTYARD_WEB_BURNT)
DEFINE_RAND_INF(RAND_INF_FIRE_MQ_LOBBY_TORCHES)
DEFINE_RAND_INF(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON) DEFINE_RAND_INF(RAND_INF_SPIRIT_SUN_ON_FLOOR_ON)
DEFINE_RAND_INF(RAND_INF_SPIRIT_BIG_MIRROR_STATUE_TURNED) DEFINE_RAND_INF(RAND_INF_SPIRIT_BIG_MIRROR_STATUE_TURNED)
DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEES)
DEFINE_RAND_INF(RAND_INF_ZELDAS_LETTER) DEFINE_RAND_INF(RAND_INF_ZELDAS_LETTER)
DEFINE_RAND_INF(RAND_INF_WEIRD_EGG) DEFINE_RAND_INF(RAND_INF_WEIRD_EGG)