mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-22 17:32:19 -05:00
gibbs -> dev
This commit is contained in:
commit
494bdcdb25
@ -384,13 +384,14 @@ int hue = 0;
|
||||
// Runs every frame to update rainbow hue, a potential future optimization is to only run this a once or twice a second and increase the speed of the rainbow hue rotation.
|
||||
void CosmeticsUpdateTick(bool& open) {
|
||||
int index = 0;
|
||||
float rainbowSpeed = CVarGetFloat("gCosmetics.RainbowSpeed", 0.6f);
|
||||
for (auto& [id, cosmeticOption] : cosmeticOptions) {
|
||||
if (cosmeticOption.supportsRainbow && CVarGetInteger(cosmeticOption.rainbowCvar, 0)) {
|
||||
float frequency = 2 * M_PI / (360 * CVarGetFloat("gCosmetics.RainbowSpeed", 0.6f));
|
||||
float frequency = 2 * M_PI / (360 * rainbowSpeed);
|
||||
Color_RGBA8 newColor;
|
||||
newColor.r = sin(frequency * ((hue + index)) + 0) * 127 + 128;
|
||||
newColor.g = sin(frequency * ((hue + index)) + (2 * M_PI / 3)) * 127 + 128;
|
||||
newColor.b = sin(frequency * ((hue + index)) + (4 * M_PI / 3)) * 127 + 128;
|
||||
newColor.r = sin(frequency * (hue + index) + 0) * 127 + 128;
|
||||
newColor.g = sin(frequency * (hue + index) + (2 * M_PI / 3)) * 127 + 128;
|
||||
newColor.b = sin(frequency * (hue + index) + (4 * M_PI / 3)) * 127 + 128;
|
||||
newColor.a = 255;
|
||||
|
||||
cosmeticOption.currentColor.x = newColor.r / 255.0;
|
||||
@ -404,12 +405,12 @@ void CosmeticsUpdateTick(bool& open) {
|
||||
// Technically this would work if you replaced "60" with 1 but the hue would be so close it's
|
||||
// indistinguishable, 60 gives us a big enough gap to notice the difference.
|
||||
if (!CVarGetInteger("gCosmetics.RainbowSync", 0)) {
|
||||
index+= (60 * CVarGetFloat("gCosmetics.RainbowSpeed", 0.6f));
|
||||
index+= (60 * rainbowSpeed);
|
||||
}
|
||||
}
|
||||
ApplyOrResetCustomGfxPatches(false);
|
||||
hue++;
|
||||
if (hue >= 360) hue = 0;
|
||||
if (hue >= (360 * rainbowSpeed)) hue = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1079,9 +1079,7 @@ int Fill() {
|
||||
}
|
||||
//Always execute ganon hint generation for the funny line
|
||||
CreateGanonText();
|
||||
if (AltarHintText) {
|
||||
CreateAltarText();
|
||||
}
|
||||
CreateAltarText(AltarHintText);
|
||||
if (DampeHintText) {
|
||||
CreateDampesDiaryText();
|
||||
}
|
||||
|
@ -678,37 +678,45 @@ static Text BuildGanonBossKeyText() {
|
||||
return Text()+"$b"+ganonBossKeyText+"^";
|
||||
}
|
||||
|
||||
void CreateAltarText() {
|
||||
void CreateAltarText(Option withHints) {
|
||||
|
||||
//Child Altar Text
|
||||
childAltarText = Hint(SPIRITUAL_STONE_TEXT_START).GetText()+"^"+
|
||||
//Spiritual Stones
|
||||
(StartingKokiriEmerald.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(KOKIRI_EMERALD)) +
|
||||
(StartingGoronRuby.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(GORON_RUBY)) +
|
||||
(StartingZoraSapphire.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(ZORA_SAPPHIRE)) +
|
||||
//How to open Door of Time, the event trigger is necessary to read the altar multiple times
|
||||
BuildDoorOfTimeText();
|
||||
if (withHints) {
|
||||
childAltarText = Hint(SPIRITUAL_STONE_TEXT_START).GetText()+"^"+
|
||||
//Spiritual Stones
|
||||
(StartingKokiriEmerald.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(KOKIRI_EMERALD)) +
|
||||
(StartingGoronRuby.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(GORON_RUBY)) +
|
||||
(StartingZoraSapphire.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(ZORA_SAPPHIRE)) +
|
||||
//How to open Door of Time, the event trigger is necessary to read the altar multiple times
|
||||
BuildDoorOfTimeText();
|
||||
} else {
|
||||
childAltarText = BuildDoorOfTimeText();
|
||||
}
|
||||
|
||||
CreateMessageFromTextObject(0x7040, 0, 2, 3, AddColorsAndFormat(childAltarText, {QM_GREEN, QM_RED, QM_BLUE}));
|
||||
|
||||
//Adult Altar Text
|
||||
adultAltarText = Hint(ADULT_ALTAR_TEXT_START).GetText()+"^"+
|
||||
//Medallion Areas
|
||||
(StartingLightMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(LIGHT_MEDALLION)) +
|
||||
(StartingForestMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(FOREST_MEDALLION)) +
|
||||
(StartingFireMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(FIRE_MEDALLION)) +
|
||||
(StartingWaterMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(WATER_MEDALLION)) +
|
||||
(StartingSpiritMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(SPIRIT_MEDALLION)) +
|
||||
(StartingShadowMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(SHADOW_MEDALLION)) +
|
||||
|
||||
adultAltarText = Hint(ADULT_ALTAR_TEXT_START).GetText() + "^";
|
||||
if (withHints) {
|
||||
adultAltarText = adultAltarText +
|
||||
//Medallion Areas
|
||||
(StartingLightMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(LIGHT_MEDALLION)) +
|
||||
(StartingForestMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(FOREST_MEDALLION)) +
|
||||
(StartingFireMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(FIRE_MEDALLION)) +
|
||||
(StartingWaterMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(WATER_MEDALLION)) +
|
||||
(StartingSpiritMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(SPIRIT_MEDALLION)) +
|
||||
(StartingShadowMedallion.Value<uint8_t>() ? Text{ "##", "##", "##" }
|
||||
: BuildDungeonRewardText(SHADOW_MEDALLION));
|
||||
}
|
||||
adultAltarText = adultAltarText +
|
||||
//Bridge requirement
|
||||
BuildBridgeReqsText()+
|
||||
|
||||
|
@ -223,7 +223,7 @@ extern void CreateMerchantsHints();
|
||||
extern void CreateWarpSongTexts();
|
||||
extern void CreateDampesDiaryText();
|
||||
extern void CreateGanonText();
|
||||
extern void CreateAltarText();
|
||||
extern void CreateAltarText(Option withHints);
|
||||
|
||||
Text& GetChildAltarText();
|
||||
Text& GetAdultAltarText();
|
||||
|
@ -95,8 +95,12 @@ public:
|
||||
if (type == ITEMTYPE_DUNGEONREWARD && (ShuffleRewards.Is(REWARDSHUFFLE_END_OF_DUNGEON))) {
|
||||
return false;
|
||||
}
|
||||
// PURPLE TODO: LOCALIZATION
|
||||
if (name.GetEnglish().find("Bombchus") != std::string::npos && !BombchusInLogic) {
|
||||
|
||||
if ((randomizerGet == RG_BOMBCHU_5 || randomizerGet == RG_BOMBCHU_10 || randomizerGet == RG_BOMBCHU_20) && !BombchusInLogic) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (hintKey == HEART_CONTAINER || hintKey == PIECE_OF_HEART || hintKey == TREASURE_GAME_HEART) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -191,9 +191,9 @@ void ItemTable_Init() { // RandomizerGet
|
||||
itemTable[BOMBS_5] = Item(RG_BOMBS_5, Text{"Bombs (5)", "Bombes (5)", "Bombas (5)"}, ITEMTYPE_REFILL, GI_BOMBS_5, false, &noVariable, BOMBS_5);
|
||||
itemTable[BOMBS_10] = Item(RG_BOMBS_10, Text{"Bombs (10)", "Bombes (10)", "Bombas (10)"}, ITEMTYPE_REFILL, GI_BOMBS_10, false, &noVariable, BOMBS_10);
|
||||
itemTable[BOMBS_20] = Item(RG_BOMBS_20, Text{"Bombs (20)", "Bombes (20)", "Bombas (20)"}, ITEMTYPE_REFILL, GI_BOMBS_20, false, &noVariable, BOMBS_20);
|
||||
itemTable[BOMBCHU_5] = Item(RG_BOMBCHU_5, Text{"Bombchu (5)", "Missiles (5)", "Bombchus (5)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_5, true, &Bombchus5, BOMBCHU_5);
|
||||
itemTable[BOMBCHU_10] = Item(RG_BOMBCHU_10, Text{"Bombchu (10)", "Missiles (10)", "Bombchus (10)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_10, true, &Bombchus10, BOMBCHU_10);
|
||||
itemTable[BOMBCHU_20] = Item(RG_BOMBCHU_20, Text{"Bombchu (20)", "Missiles (20)", "Bombchus (20)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_20, true, &Bombchus20, BOMBCHU_20);
|
||||
itemTable[BOMBCHU_5] = Item(RG_BOMBCHU_5, Text{"Bombchus (5)", "Missiles (5)", "Bombchus (5)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_5, true, &Bombchus5, BOMBCHU_5);
|
||||
itemTable[BOMBCHU_10] = Item(RG_BOMBCHU_10, Text{"Bombchus (10)", "Missiles (10)", "Bombchus (10)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_10, true, &Bombchus10, BOMBCHU_10);
|
||||
itemTable[BOMBCHU_20] = Item(RG_BOMBCHU_20, Text{"Bombchus (20)", "Missiles (20)", "Bombchus (20)"}, ITEMTYPE_REFILL, GI_BOMBCHUS_20, true, &Bombchus20, BOMBCHU_20);
|
||||
itemTable[BOMBCHU_DROP] = Item(RG_BOMBCHU_DROP, Text{"Bombchu Drop", "Drop Missiles", "Bombchus"}, ITEMTYPE_DROP, GI_BOMBCHUS_10, true, &BombchuDrop, NONE);
|
||||
itemTable[ARROWS_5] = Item(RG_ARROWS_5, Text{"Arrows (5)", "Flèches (5)", "Flechas (5)"}, ITEMTYPE_REFILL, GI_ARROWS_SMALL, false, &noVariable, ARROWS_5);
|
||||
itemTable[ARROWS_10] = Item(RG_ARROWS_10, Text{"Arrows (10)", "Flèches (10)", "Flechas (10)"}, ITEMTYPE_REFILL, GI_ARROWS_MEDIUM, false, &noVariable, ARROWS_10);
|
||||
|
@ -4747,7 +4747,7 @@ CustomMessageMinimal NaviMessages[NUM_NAVI_MESSAGES] = {
|
||||
"%cSi tu es coincé quelque part, tu&devrais %wsauvegarder ta partie %cet&faire un %wreset%c!" },
|
||||
|
||||
{ "%cSheik will meet you in a %rburning&village %conce you have %gForest%c,&%rFire%c, and %bWater %cMedallions!",
|
||||
"%cSheik wird dich in einem %rbrennenden&Dorf %ctreffen sobald du das Amulett&des %gWaldes%c, %rFeuers %cund %bWassers&%cbesitzt.",
|
||||
"%cShiek wird dich in einem %rbrennenden&Dorf %ctreffen sobald du das Amulett&des %gWaldes%c, %rFeuers %cund %bWassers&%cbesitzt.",
|
||||
"%cSheik t'attendra dans un %rvillage&en feu %clorsque tu auras récupéré&les médaillons de la %gForêt%c, du %rFeu&%cet de l'%bEau%c!" },
|
||||
|
||||
{ "%cIf you don't have a %wsword %cas a&child, try buying %wDeku Sticks%c!&They're effective against your foes!",
|
||||
|
@ -271,7 +271,8 @@ s16 Entrance_OverrideNextIndex(s16 nextEntranceIndex) {
|
||||
|
||||
// Exiting through the crawl space from Hyrule Castle courtyard is the same exit as leaving Ganon's castle
|
||||
// Don't override the entrance if we came from the Castle courtyard (day and night scenes)
|
||||
if (gPlayState != NULL && (gPlayState->sceneNum == 69 || gPlayState->sceneNum == 70) && nextEntranceIndex == 0x023D) {
|
||||
if (gPlayState != NULL && (gPlayState->sceneNum == SCENE_HAIRAL_NIWA || gPlayState->sceneNum == SCENE_HAIRAL_NIWA_N) &&
|
||||
nextEntranceIndex == 0x023D) {
|
||||
return nextEntranceIndex;
|
||||
}
|
||||
|
||||
@ -289,7 +290,7 @@ s16 Entrance_OverrideDynamicExit(s16 dynamicExitIndex) {
|
||||
u32 Entrance_SceneAndSpawnAre(u8 scene, u8 spawn) {
|
||||
s16 computedEntranceIndex;
|
||||
|
||||
// Adjust the entrance to acount for the exact scene/spawn combination for child/adult and day/night
|
||||
// Adjust the entrance to account for the exact scene/spawn combination for child/adult and day/night
|
||||
if (!IS_DAY) {
|
||||
if (!LINK_IS_ADULT) {
|
||||
computedEntranceIndex = gSaveContext.entranceIndex + 1;
|
||||
@ -680,7 +681,7 @@ void Entrance_OverrideSpawnScene(s32 sceneNum, s32 spawn) {
|
||||
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_DUNGEON_ENTRANCES) == RO_DUNGEON_ENTRANCE_SHUFFLE_ON_PLUS_GANON) {
|
||||
// Move Hyrule's Castle Courtyard exit spawn to be before the crates so players don't skip Talon
|
||||
if (sceneNum == 95 && spawn == 1) {
|
||||
if (sceneNum == SCENE_SPOT15 && spawn == 1) {
|
||||
modifiedLinkActorEntry.pos.x = 0x033A;
|
||||
modifiedLinkActorEntry.pos.y = 0x0623;
|
||||
modifiedLinkActorEntry.pos.z = 0xFF22;
|
||||
@ -689,7 +690,7 @@ void Entrance_OverrideSpawnScene(s32 sceneNum, s32 spawn) {
|
||||
|
||||
// Move Ganon's Castle exit spawn to be on the small ledge near the castle and not over the void
|
||||
// to prevent Link from falling if the bridge isn't spawned
|
||||
if (sceneNum == 100 && spawn == 1) {
|
||||
if (sceneNum == SCENE_GANON_TOU && spawn == 1) {
|
||||
modifiedLinkActorEntry.pos.x = 0xFEA8;
|
||||
modifiedLinkActorEntry.pos.y = 0x065C;
|
||||
modifiedLinkActorEntry.pos.z = 0x0290;
|
||||
@ -718,6 +719,15 @@ void Entrance_OverrideSpawnScene(s32 sceneNum, s32 spawn) {
|
||||
gPlayState->linkActorEntry = &modifiedLinkActorEntry;
|
||||
}
|
||||
}
|
||||
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_ENTRANCES) == RO_GENERIC_ON) {
|
||||
// Move Hyrule Field bridge spawn for child link at night to be beyond the moat so he doesn't fall in the water
|
||||
if (sceneNum == SCENE_SPOT00 && spawn == 7 && LINK_IS_CHILD && IS_NIGHT) {
|
||||
modifiedLinkActorEntry.pos.x = 0x0001;
|
||||
modifiedLinkActorEntry.pos.z = 0x049E;
|
||||
gPlayState->linkActorEntry = &modifiedLinkActorEntry;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s32 Entrance_OverrideSpawnSceneRoom(s32 sceneNum, s32 spawn, s32 roomNum) {
|
||||
|
@ -726,7 +726,7 @@ namespace GameMenuBar {
|
||||
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
UIWidgets::PaddedEnhancementCheckbox("N64 Mode", "gN64Mode", true, false);
|
||||
UIWidgets::PaddedEnhancementCheckbox("N64 Mode", "gLowResMode", true, false);
|
||||
UIWidgets::Tooltip("Sets aspect ratio to 4:3 and lowers resolution to 240p, the N64's native resolution");
|
||||
UIWidgets::PaddedEnhancementCheckbox("Glitch line-up tick", "gDrawLineupTick", true, false);
|
||||
UIWidgets::Tooltip("Displays a tick in the top center of the screen to help with glitch line-ups in SoH, as traditional UI based line-ups do not work outside of 4:3");
|
||||
|
@ -1593,7 +1593,7 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
|
||||
Randomizer_GetCheckFromActor(stone->id, play->sceneNum, actorParams);
|
||||
|
||||
messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::hintMessageTableID, hintCheck);
|
||||
} else if ((textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT) && Randomizer_GetSettingValue(RSK_TOT_ALTAR_HINT)) {
|
||||
} else if ((textId == TEXT_ALTAR_CHILD || textId == TEXT_ALTAR_ADULT)) {
|
||||
// rando hints at altar
|
||||
messageEntry = (LINK_IS_ADULT)
|
||||
? CustomMessageManager::Instance->RetrieveMessage(Randomizer::hintMessageTableID, TEXT_ALTAR_ADULT)
|
||||
|
@ -205,6 +205,8 @@ void SaveManager::LoadRandomizerVersion2() {
|
||||
|
||||
std::shared_ptr<Randomizer> randomizer = OTRGlobals::Instance->gRandomizer;
|
||||
|
||||
randomizer->LoadRandomizerSettings("");
|
||||
|
||||
size_t merchantPricesSize = 0;
|
||||
SaveManager::Instance->LoadData("merchantPricesSize", merchantPricesSize);
|
||||
|
||||
|
@ -197,12 +197,6 @@ void Sram_OpenSave() {
|
||||
}
|
||||
}
|
||||
|
||||
// Setup the modified entrance table and entrance shuffle table for rando
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
Entrance_Init();
|
||||
Entrance_InitEntranceTrackingData();
|
||||
}
|
||||
|
||||
osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex);
|
||||
osSyncPrintf(VT_RST);
|
||||
|
||||
|
@ -426,7 +426,8 @@ void DemoKankyo_Update(Actor* thisx, PlayState* play) {
|
||||
DemoKankyo* this = (DemoKankyo*)thisx;
|
||||
this->actionFunc(this, play);
|
||||
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SHUFFLE_WARP_SONGS) &&
|
||||
// In ER, override the warp song locations. Also removes the warp song cutscene
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SHUFFLE_ENTRANCES) &&
|
||||
thisx->params == 0x000F) { // Warp Song particles
|
||||
Entrance_SetWarpSongEntrance();
|
||||
}
|
||||
|
@ -350,10 +350,10 @@ void EnHeishi4_MarketSneak(EnHeishi4* this, PlayState* play) {
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
|
||||
switch (play->msgCtx.choiceIndex) {
|
||||
case 0: //yes
|
||||
if (gSaveContext.n64ddFlag){
|
||||
play->nextEntranceIndex = Entrance_OverrideNextIndex(0xCD);
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_ENTRANCES) != RO_GENERIC_OFF){
|
||||
play->nextEntranceIndex = Entrance_OverrideNextIndex(0x01FD); // Market Entrance -> HF
|
||||
} else {
|
||||
play->nextEntranceIndex = 0xCD;
|
||||
play->nextEntranceIndex = 0x00CD; // HF Near bridge (OoT cutscene entrance) to not fall in the water
|
||||
}
|
||||
play->sceneLoadFlag = 0x14;
|
||||
play->fadeTransition = 0x2E;
|
||||
|
@ -157,8 +157,8 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SHUFFLE_INTERIOR_ENTRANCES)) {
|
||||
// If child is in the adult shooting gallery or adult in the child shooting gallery, then despawn the shooting gallery man
|
||||
if ((LINK_IS_CHILD && Entrance_SceneAndSpawnAre(0x42, 0x00)) || //Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
||||
(LINK_IS_ADULT && Entrance_SceneAndSpawnAre(0x42, 0x01))) { //Market -> Child Shooting Gallery, index 016D in the entrance table
|
||||
if ((LINK_IS_CHILD && Entrance_SceneAndSpawnAre(SCENE_SYATEKIJYOU, 0x00)) || //Kakariko Village -> Adult Shooting Gallery, index 003B in the entrance table
|
||||
(LINK_IS_ADULT && Entrance_SceneAndSpawnAre(SCENE_SYATEKIJYOU, 0x01))) { //Market -> Child Shooting Gallery, index 016D in the entrance table
|
||||
Actor_Kill(thisx);
|
||||
return;
|
||||
}
|
||||
|
@ -2145,13 +2145,19 @@ void FileChoose_LoadGame(GameState* thisx) {
|
||||
}
|
||||
}
|
||||
|
||||
// Handle randomized spawn positions after the save context has been setup from load
|
||||
// When remeber save location is on, set save warp if the save was in an a grotto, or
|
||||
// the entrance index is -1 from shuffle overwarld spawn
|
||||
if (gSaveContext.n64ddFlag && Randomizer_GetSettingValue(RSK_SHUFFLE_ENTRANCES) && ((!CVarGetInteger("gRememberSaveLocation", 0) ||
|
||||
gSaveContext.savedSceneNum == SCENE_YOUSEI_IZUMI_TATE || gSaveContext.savedSceneNum == SCENE_KAKUSIANA) ||
|
||||
(CVarGetInteger("gRememberSaveLocation", 0) && Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && gSaveContext.entranceIndex == -1))) {
|
||||
Entrance_SetSavewarpEntrance();
|
||||
if (gSaveContext.n64ddFlag) {
|
||||
// Setup the modified entrance table and entrance shuffle table for rando
|
||||
Entrance_Init();
|
||||
Entrance_InitEntranceTrackingData();
|
||||
|
||||
// Handle randomized spawn positions after the save context has been setup from load
|
||||
// When remeber save location is on, set save warp if the save was in an a grotto, or
|
||||
// the entrance index is -1 from shuffle overwarld spawn
|
||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_ENTRANCES) && ((!CVarGetInteger("gRememberSaveLocation", 0) ||
|
||||
gSaveContext.savedSceneNum == SCENE_YOUSEI_IZUMI_TATE || gSaveContext.savedSceneNum == SCENE_KAKUSIANA) ||
|
||||
(CVarGetInteger("gRememberSaveLocation", 0) && Randomizer_GetSettingValue(RSK_SHUFFLE_OVERWORLD_SPAWNS) && gSaveContext.entranceIndex == -1))) {
|
||||
Entrance_SetSavewarpEntrance();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -175,7 +175,7 @@ static SceneSelectEntry sScenes[] = {
|
||||
{ "65:" GFXP_KATAKANA "ゲルド" GFXP_HIRAGANA "ノシュウレンジョウ", "65:Gerudo Training Ground", "65:Gerudo-Arena", "65:Gymnase Gerudo", Select_LoadGame, 0x0008 },
|
||||
{ "66:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン", "66:Inside the Deku Tree", "66:Im Deku-Baum", "66:Arbre Mojo", Select_LoadGame, 0x0000 },
|
||||
{ "67:" GFXP_HIRAGANA "ヨウセイノキノ " GFXP_KATAKANA "ダンジョン ボス", "67:Gohma's Lair", "67:Gohmas Verlies", "67:Repaire de Gohma", Select_LoadGame, 0x040F },
|
||||
{ "68:" GFXP_KATAKANA "ドドンゴ ダンジョン", "68:Dodongo's Cavern", "68:Dodongo's Cavern", "68:Dodongos Hoehle", Select_LoadGame, 0x0004 },
|
||||
{ "68:" GFXP_KATAKANA "ドドンゴ ダンジョン", "68:Dodongo's Cavern", "68:Dodongos Hoehle", "68:Caverne Dodongo", Select_LoadGame, 0x0004 },
|
||||
{ "69:" GFXP_KATAKANA "ドドンゴ ダンジョン ボス", "69:King Dodongo's Lair", "69:King Dodongos Verlies", "69:Repaire du Roi Dodongo", Select_LoadGame, 0x040B },
|
||||
{ "70:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン", "70:Inside Jabu-Jabu's Belly", "70:Jabu-Jabus Bauch", "70:Ventre de Jabu-Jabu", Select_LoadGame, 0x0028 },
|
||||
{ "71:" GFXP_HIRAGANA "キョダイギョ " GFXP_KATAKANA "ダンジョン ボス", "71:Barinade's Lair", "71:Barinades Verlies", "71:Repaire de Barinade", Select_LoadGame, 0x0301 },
|
||||
@ -185,7 +185,7 @@ static SceneSelectEntry sScenes[] = {
|
||||
{ "75:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン", "75:Shadow Temple", "75:Schattentempel", "75:Temple de l'Ombre", Select_LoadGame, 0x0037 },
|
||||
{ "76:" GFXP_HIRAGANA "ハカシタ " GFXP_KATAKANA "ダンジョン ボス", "76:Bongo Bongo's Lair", "76:Bongo Bongos Verlies", "76:Repaire de Bongo Bongo", Select_LoadGame, 0x0413 },
|
||||
{ "77:" GFXP_HIRAGANA "ヒノシンデン", "77:Fire Temple", "77:Feuertempel", "77:Temple du Feu", Select_LoadGame, 0x0165 },
|
||||
{ "78:" GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", "78:Volvagia's Lair", "78:Volvagias Verlies", "78:Repaire de Volvagia", Select_LoadGame, 0x0305 },
|
||||
{ "78:" GFXP_HIRAGANA "ヒノシンデン " GFXP_KATAKANA "ボス", "78:Volvagia's Lair", "78:Volvagias Verlies", "78:Repaire de Volcania", Select_LoadGame, 0x0305 },
|
||||
{ "79:" GFXP_HIRAGANA "ミズノシンデン", "79:Water Temple", "79:Wassertempel", "79:Temple de l'Eau", Select_LoadGame, 0x0010 },
|
||||
{ "80:" GFXP_HIRAGANA "ミズノシンデン " GFXP_KATAKANA "ボス", "80:Morpha's Lair", "80:Morphas Verlies", "80:Repaire de Morpha", Select_LoadGame, 0x0417 },
|
||||
{ "81:" GFXP_HIRAGANA "ジャシンゾウ " GFXP_KATAKANA "ダンジョン", "81:Spirit Temple", "81:Geistertempel", "81:Temple de l'Esprit", Select_LoadGame, 0x0082 },
|
||||
@ -525,7 +525,7 @@ static BetterSceneSelectEntry sBetterScenes[] = {
|
||||
{ "36:Fire Temple", "36:Feuertempel", "36:Temple du Feu", Select_LoadGame, 3, {
|
||||
{ "Entrance", "Eingang", "Entrance", 0x0165 },
|
||||
{ "Before Volvagia", "Vor Volvagia", "Avant Volvagia", 0x0175 },
|
||||
{ "Volvagia's Lair", "Volvagia Kampf", "Repaire de Volvagia", 0x0305 },
|
||||
{ "Volvagia's Lair", "Volvagia Kampf", "Repaire de Volcania", 0x0305 },
|
||||
}},
|
||||
{ "37:Water Temple", "37:Wassertempel", "37:Temple de l'Eau", Select_LoadGame, 2, {
|
||||
{ "Entrance", "Eingang", "Entree", 0x0010 },
|
||||
@ -1245,8 +1245,8 @@ void Better_Select_PrintAgeSetting(SelectContext* this, GfxPrint* printer, s32 a
|
||||
|
||||
void Select_PrintCutsceneSetting(SelectContext* this, GfxPrint* printer, u16 csIndex) {
|
||||
char* cutsceneLabels[13][4] = {
|
||||
{ GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン", "Day", "Nacht", "Jour" },
|
||||
{ GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ", "Night", "Tag", "Nuit" },
|
||||
{ GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン", "Day", "Tag", "Jour" },
|
||||
{ GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ", "Night", "Nacht", "Nuit" },
|
||||
{ "デモ00", "Demo00", "Demo00", "Demo00" },
|
||||
{ "デモ01", "Demo01", "Demo01", "Demo01" },
|
||||
{ "デモ02", "Demo02", "Demo02", "Demo02" },
|
||||
|
Loading…
Reference in New Issue
Block a user