mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-10-31 23:55:06 -04:00
Fix spawn shuffle when starting age is adult/random. (#4230)
* Fix spawn shuffle when starting age is adult. * Handle adult start without spawn shuffle * Handle correct entrance for adult start + spawn shuffle and add comments. * Fix grotto spawn cutscene skips. * Fix an issue with randomized starting age.
This commit is contained in:
parent
a0fda39a75
commit
ba82bfbba6
@ -5,18 +5,41 @@
|
||||
extern "C" {
|
||||
#include "z64save.h"
|
||||
#include "functions.h"
|
||||
#include "soh/Enhancements/randomizer/randomizer_grotto.h"
|
||||
extern PlayState* gPlayState;
|
||||
extern SaveContext gSaveContext;
|
||||
}
|
||||
|
||||
void SkipIntro_Register() {
|
||||
REGISTER_VB_SHOULD(VB_PLAY_TRANSITION_CS, {
|
||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), IS_RANDO) ||
|
||||
IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_OVERWORLD_SPAWNS).Is(true)) {
|
||||
if (gSaveContext.entranceIndex == (IS_RANDO ? Entrance_GetOverride(ENTR_LINKS_HOUSE_0) : ENTR_LINKS_HOUSE_0) && gSaveContext.cutsceneIndex == 0xFFF1) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
*should = false;
|
||||
}
|
||||
// If we're playing rando and if starting age is adult and/or overworld spawns are shuffled we need to skip
|
||||
// the cutscene regardless of the enhancement being on.
|
||||
bool adultStart = gSaveContext.linkAge == LINK_AGE_ADULT;
|
||||
bool shuffleOverworldSpawns = OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_OVERWORLD_SPAWNS).Is(true);
|
||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Intro"), IS_RANDO) || (IS_RANDO && (adultStart || shuffleOverworldSpawns))) {
|
||||
// Calculate spawn location. Start with vanilla, Link's house.
|
||||
int32_t spawnEntrance = ENTR_LINKS_HOUSE_0;
|
||||
// If we're not in rando, we can skip all of the below.
|
||||
if (IS_RANDO) {
|
||||
// If starting age is shuffled, use vanilla adult spawn/prelude warp.
|
||||
if (adultStart) {
|
||||
spawnEntrance = ENTR_TEMPLE_OF_TIME_7;
|
||||
}
|
||||
// If we're shuffling overworld spawns we'll need to get the Entrance Override
|
||||
if (shuffleOverworldSpawns) {
|
||||
// If we're shuffling overworld spawns the adult spawn is ENTR_HYRULE_FIELD_10 instead of
|
||||
// ENTR_TEMPLE_OF_TIME_7, so that spawn and Prelude don't share an entrance.
|
||||
if (adultStart){
|
||||
spawnEntrance = ENTR_HYRULE_FIELD_10;
|
||||
}
|
||||
spawnEntrance = Grotto_OverrideSpecialEntrance(Entrance_GetOverride(spawnEntrance));
|
||||
}
|
||||
}
|
||||
// Skip the intro cutscene for whatever the spawnEntrance is calculated to be.
|
||||
if (gSaveContext.entranceIndex == spawnEntrance) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
*should = false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -331,7 +331,7 @@ extern "C" void Randomizer_InitSaveFile() {
|
||||
gSaveContext.adultTradeItems = 0;
|
||||
}
|
||||
|
||||
int startingAge = Randomizer_GetSettingValue(RSK_STARTING_AGE);
|
||||
int startingAge = OTRGlobals::Instance->gRandoContext->GetSettings()->ResolvedStartingAge();
|
||||
switch (startingAge) {
|
||||
case RO_AGE_ADULT: // Adult
|
||||
gSaveContext.linkAge = LINK_AGE_ADULT;
|
||||
|
Loading…
Reference in New Issue
Block a user