with shuffle speak on, don't skip nabooru in spirit temple as child. also don't prevent asking to be thrown in jail

This commit is contained in:
Demur Rumed 2025-08-01 17:39:09 +00:00
commit bca2ba769a
5 changed files with 11 additions and 5 deletions

View file

@ -20,8 +20,9 @@ void RegisterShuffleSpeak() {
inf = RAND_INF_CAN_SPEAK_DEKU;
break;
case ACTOR_EN_GE1:
case ACTOR_EN_GE2:
case ACTOR_EN_GE3:
case ACTOR_EN_NB:
// skip ACTOR_EN_GE2 to always be able to ask to be thrown in jail
inf = RAND_INF_CAN_SPEAK_GERUDO;
break;
case ACTOR_EN_GO:

View file

@ -31,6 +31,7 @@ extern "C" {
#include "src/overlays/actors/ovl_Item_B_Heart/z_item_b_heart.h"
#include "src/overlays/actors/ovl_En_Ko/z_en_ko.h"
#include "src/overlays/actors/ovl_En_Mk/z_en_mk.h"
#include "src/overlays/actors/ovl_En_Nb/z_en_nb.h"
#include "src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.h"
#include "src/overlays/actors/ovl_En_Kz/z_en_kz.h"
#include "src/overlays/actors/ovl_En_Go2/z_en_go2.h"
@ -2114,6 +2115,10 @@ void RandomizerOnActorInitHandler(void* actorRef) {
return;
}
if (actor->id == ACTOR_EN_NB && (actor->params & 0xFF) == NB_TYPE_CRAWLSPACE && !RAND_GET_OPTION(RSK_SHUFFLE_SPEAK)) {
Actor_Kill(actor);
}
// In ER, once Link has spawned we know the scene has loaded, so we can sanitize the last known entrance type
if (actor->id == ACTOR_PLAYER && RAND_GET_OPTION(RSK_SHUFFLE_ENTRANCES)) {
Grotto_SanitizeEntranceType();

View file

@ -23,7 +23,7 @@ void RegionTable_Init_SpiritTemple() {
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
Entrance(RR_SPIRIT_TEMPLE_CHILD, []{return logic->IsChild;}),
Entrance(RR_SPIRIT_TEMPLE_CHILD, []{return logic->IsChild && logic->HasItem(RG_SPEAK_GERUDO);}),
Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
});
@ -164,7 +164,7 @@ void RegionTable_Init_SpiritTemple() {
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild;}),
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild && logic->HasItem(RG_SPEAK_GERUDO);}),
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5);}),
});

View file

@ -241,7 +241,6 @@ extern "C" void Randomizer_InitSaveFile() {
Flags_SetEventChkInf(EVENTCHKINF_RENTED_HORSE_FROM_INGO);
Flags_SetInfTable(INFTABLE_SPOKE_TO_POE_COLLECTOR_IN_RUINED_MARKET);
Flags_SetEventChkInf(EVENTCHKINF_WATCHED_GANONS_CASTLE_COLLAPSE_CAUGHT_BY_GERUDO);
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_NABOORU_IN_SPIRIT_TEMPLE);
// Go away Ruto (Water Temple first cutscene).
gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch |= (1 << 0x10);
@ -259,6 +258,7 @@ extern "C" void Randomizer_InitSaveFile() {
}
if (Randomizer_GetSettingValue(RSK_SHUFFLE_SPEAK) == RO_GENERIC_OFF) {
Flags_SetEventChkInf(EVENTCHKINF_SPOKE_TO_NABOORU_IN_SPIRIT_TEMPLE);
Flags_SetRandomizerInf(RAND_INF_CAN_SPEAK_DEKU);
Flags_SetRandomizerInf(RAND_INF_CAN_SPEAK_GERUDO);
Flags_SetRandomizerInf(RAND_INF_CAN_SPEAK_GORON);

View file

@ -1104,7 +1104,7 @@ void EnNb_LookUp(EnNb* this, PlayState* play) {
}
void EnNb_CrawlspaceSpawnCheck(EnNb* this, PlayState* play) {
if (!IS_RANDO && !Flags_GetEventChkInf(EVENTCHKINF_NABOORU_CAPTURED_BY_TWINROVA) && LINK_IS_CHILD) {
if (!Flags_GetEventChkInf(EVENTCHKINF_NABOORU_CAPTURED_BY_TWINROVA) && LINK_IS_CHILD) {
EnNb_UpdatePath(this, play);
// looking into crawlspace