mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-11-25 02:42:18 -05:00
Add no rando generated warning (#3263)
* Add no rando generated warning * Update texts * Randomizer warning messages (#4) * Fix french typo --------- Co-authored-by: aMannus <mannusmenting@gmail.com>
This commit is contained in:
parent
b47164a110
commit
c031edae98
@ -1266,18 +1266,14 @@ void FileChoose_UpdateQuestMenu(GameState* thisx) {
|
|||||||
if (ABS(this->stickRelX) > 30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DLEFT | BTN_DRIGHT))) {
|
if (ABS(this->stickRelX) > 30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DLEFT | BTN_DRIGHT))) {
|
||||||
if (this->stickRelX > 30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DRIGHT))) {
|
if (this->stickRelX > 30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DRIGHT))) {
|
||||||
this->questType[this->buttonIndex] += 1;
|
this->questType[this->buttonIndex] += 1;
|
||||||
while ((this->questType[this->buttonIndex] == QUEST_MASTER && !ResourceMgr_GameHasMasterQuest()) ||
|
while (this->questType[this->buttonIndex] == QUEST_MASTER && !ResourceMgr_GameHasMasterQuest()) {
|
||||||
(this->questType[this->buttonIndex] == QUEST_RANDOMIZER && !hasRandomizerQuest())) {
|
// If Master Quest is selected without a Master Quest OTR present, skip past it.
|
||||||
// If Master Quest is selected without a Master Quest OTR present or when Randomizer Quest is
|
|
||||||
// selected without a loaded Randomizer seed, skip past it.
|
|
||||||
this->questType[this->buttonIndex] += 1;
|
this->questType[this->buttonIndex] += 1;
|
||||||
}
|
}
|
||||||
} else if (this->stickRelX < -30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DLEFT))) {
|
} else if (this->stickRelX < -30 || (dpad && CHECK_BTN_ANY(input->press.button, BTN_DLEFT))) {
|
||||||
this->questType[this->buttonIndex] -= 1;
|
this->questType[this->buttonIndex] -= 1;
|
||||||
while ((this->questType[this->buttonIndex] == QUEST_MASTER && !ResourceMgr_GameHasMasterQuest()) ||
|
while (this->questType[this->buttonIndex] == QUEST_MASTER && !ResourceMgr_GameHasMasterQuest()) {
|
||||||
(this->questType[this->buttonIndex] == QUEST_RANDOMIZER && !hasRandomizerQuest())) {
|
// If Master Quest is selected without a Master Quest OTR present, skip past it.
|
||||||
// If Master Quest is selected without a Master Quest OTR present or when Randomizer Quest is
|
|
||||||
// selected without a loaded Randomizer seed, skip past it.
|
|
||||||
this->questType[this->buttonIndex] -= 1;
|
this->questType[this->buttonIndex] -= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1304,6 +1300,8 @@ void FileChoose_UpdateQuestMenu(GameState* thisx) {
|
|||||||
this->prevConfigMode = this->configMode;
|
this->prevConfigMode = this->configMode;
|
||||||
this->configMode = CM_ROTATE_TO_BOSS_RUSH_MENU;
|
this->configMode = CM_ROTATE_TO_BOSS_RUSH_MENU;
|
||||||
return;
|
return;
|
||||||
|
} else if (this->questType[this->buttonIndex] == QUEST_RANDOMIZER && !hasRandomizerQuest()) {
|
||||||
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
||||||
} else {
|
} else {
|
||||||
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
Audio_PlaySoundGeneral(NA_SE_SY_FSEL_DECIDE_L, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
|
||||||
osSyncPrintf("Selected Dungeon Quest: %d\n", IS_MASTER_QUEST);
|
osSyncPrintf("Selected Dungeon Quest: %d\n", IS_MASTER_QUEST);
|
||||||
@ -2236,7 +2234,11 @@ void FileChoose_DrawWindowContents(GameState* thisx) {
|
|||||||
|
|
||||||
case QUEST_RANDOMIZER:
|
case QUEST_RANDOMIZER:
|
||||||
DrawSeedHashSprites(this);
|
DrawSeedHashSprites(this);
|
||||||
|
if (hasRandomizerQuest()) {
|
||||||
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->logoAlpha);
|
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, this->logoAlpha);
|
||||||
|
} else {
|
||||||
|
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0x40, 0x40, 0x40, this->logoAlpha);
|
||||||
|
}
|
||||||
FileChoose_DrawTextureI8(this->state.gfxCtx, gTitleTheLegendOfTextTex, 72, 8, 156, 108, 72, 8, 1024, 1024);
|
FileChoose_DrawTextureI8(this->state.gfxCtx, gTitleTheLegendOfTextTex, 72, 8, 156, 108, 72, 8, 1024, 1024);
|
||||||
FileChoose_DrawTextureI8(this->state.gfxCtx, gTitleOcarinaOfTimeTMTextTex, 96, 8, 154, 163, 96, 8, 1024, 1024);
|
FileChoose_DrawTextureI8(this->state.gfxCtx, gTitleOcarinaOfTimeTMTextTex, 96, 8, 154, 163, 96, 8, 1024, 1024);
|
||||||
FileChoose_DrawImageRGBA32(this->state.gfxCtx, 160, 135, ResourceMgr_GameHasOriginal() ? gTitleZeldaShieldLogoTex : gTitleZeldaShieldLogoMQTex, 160, 160);
|
FileChoose_DrawImageRGBA32(this->state.gfxCtx, 160, 135, ResourceMgr_GameHasOriginal() ? gTitleZeldaShieldLogoTex : gTitleZeldaShieldLogoMQTex, 160, 160);
|
||||||
@ -3124,7 +3126,7 @@ static void (*gFileSelectUpdateFuncs[])(GameState*) = {
|
|||||||
FileChoose_SelectModeUpdate,
|
FileChoose_SelectModeUpdate,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char* randoWarningText[] = {
|
static const char* randoVersionWarningText[] = {
|
||||||
// English
|
// English
|
||||||
"This save was created on a different version of SoH.\nThings may be broken. Play at your own risk.",
|
"This save was created on a different version of SoH.\nThings may be broken. Play at your own risk.",
|
||||||
// German
|
// German
|
||||||
@ -3133,7 +3135,7 @@ static const char* randoWarningText[] = {
|
|||||||
"Cette sauvegarde a été créée sur une version\ndifférente de SoH.\nCertaines fonctionnalités peuvent être corrompues."
|
"Cette sauvegarde a été créée sur une version\ndifférente de SoH.\nCertaines fonctionnalités peuvent être corrompues."
|
||||||
};
|
};
|
||||||
|
|
||||||
void FileChoose_DrawRandoSaveWarning(GameState* thisx) {
|
void FileChoose_DrawRandoSaveVersionWarning(GameState* thisx) {
|
||||||
FileChooseContext* this = (FileChooseContext*)thisx;
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
||||||
|
|
||||||
OPEN_DISPS(this->state.gfxCtx);
|
OPEN_DISPS(this->state.gfxCtx);
|
||||||
@ -3170,7 +3172,7 @@ void FileChoose_DrawRandoSaveWarning(GameState* thisx) {
|
|||||||
(SCREEN_WIDTH - 32) << 2, (SCREEN_HEIGHT - bottomOffset) << 2, G_TX_RENDERTILE, 0, 0,
|
(SCREEN_WIDTH - 32) << 2, (SCREEN_HEIGHT - bottomOffset) << 2, G_TX_RENDERTILE, 0, 0,
|
||||||
1 << 10, texCoordinateHeightScale << 1);
|
1 << 10, texCoordinateHeightScale << 1);
|
||||||
|
|
||||||
Interface_DrawTextLine(this->state.gfxCtx, randoWarningText[gSaveContext.language], 36,
|
Interface_DrawTextLine(this->state.gfxCtx, randoVersionWarningText[gSaveContext.language], 36,
|
||||||
SCREEN_HEIGHT - height, 255, 255, 255, textAlpha, 0.8f, 1);
|
SCREEN_HEIGHT - height, 255, 255, 255, textAlpha, 0.8f, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3178,6 +3180,77 @@ void FileChoose_DrawRandoSaveWarning(GameState* thisx) {
|
|||||||
CLOSE_DISPS(this->state.gfxCtx);
|
CLOSE_DISPS(this->state.gfxCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* noRandoGeneratedText[] = {
|
||||||
|
// English
|
||||||
|
"No Randomizer seed currently available.\nGenerate one in the Randomizer Settings"
|
||||||
|
#if defined(__WIIU__) || defined(__SWITCH__)
|
||||||
|
".",
|
||||||
|
#else
|
||||||
|
",\nor drop a spoiler log on the game window.",
|
||||||
|
#endif
|
||||||
|
// German
|
||||||
|
"No Randomizer seed currently available.\nGenerate one in the Randomizer Settings"
|
||||||
|
#if defined(__WIIU__) || defined(__SWITCH__)
|
||||||
|
".",
|
||||||
|
#else
|
||||||
|
",\nor drop a spoiler log on the game window.",
|
||||||
|
#endif
|
||||||
|
// French
|
||||||
|
"Aucune Seed de Randomizer actuellement disponible.\nGénérez-en une dans les \"Randomizer Settings\""
|
||||||
|
#if (defined(__WIIU__) || defined(__SWITCH__))
|
||||||
|
"."
|
||||||
|
#else
|
||||||
|
"\nou glissez un spoilerlog sur la fenêtre du jeu."
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
void FileChoose_DrawNoRandoGeneratedWarning(GameState* thisx) {
|
||||||
|
FileChooseContext* this = (FileChooseContext*)thisx;
|
||||||
|
|
||||||
|
OPEN_DISPS(this->state.gfxCtx);
|
||||||
|
|
||||||
|
// Draw rando seed warning when build version doesn't match for Major or Minor number
|
||||||
|
if (this->configMode == CM_QUEST_MENU && this->questType[this->buttonIndex] == QUEST_RANDOMIZER && !hasRandomizerQuest()) {
|
||||||
|
uint8_t textAlpha = 225;
|
||||||
|
uint8_t textboxAlpha = 170;
|
||||||
|
float textboxScale = 0.7f;
|
||||||
|
|
||||||
|
// float math to get a S5.10 number that will squish the texture
|
||||||
|
float texCoordinateHeightF = 512 / textboxScale;
|
||||||
|
uint16_t texCoordinateHeightScale = texCoordinateHeightF + 0.5f;
|
||||||
|
float texCoordinateWidthF = 512 / textboxScale;
|
||||||
|
uint16_t texCoordinateWidthScale = texCoordinateWidthF + 0.5f;
|
||||||
|
uint16_t textboxWidth = 256 * textboxScale;
|
||||||
|
uint16_t textboxHeight = 64 * textboxScale;
|
||||||
|
uint8_t leftOffset = 72;
|
||||||
|
uint8_t bottomOffset = 84;
|
||||||
|
uint8_t textVerticalOffset;
|
||||||
|
#if defined(__WIIU__) || defined(__SWITCH__)
|
||||||
|
textVerticalOffset = 127; // 2 lines
|
||||||
|
#else
|
||||||
|
textVerticalOffset = 122; // 3 lines
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Gfx_SetupDL_39Opa(this->state.gfxCtx);
|
||||||
|
gDPSetAlphaDither(POLY_OPA_DISP++, G_AD_DISABLE);
|
||||||
|
gSPClearGeometryMode(POLY_OPA_DISP++, G_SHADE);
|
||||||
|
gDPSetCombineLERP(POLY_OPA_DISP++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0,
|
||||||
|
0, PRIMITIVE, 0);
|
||||||
|
gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, textboxAlpha);
|
||||||
|
gDPLoadTextureBlock_4b(POLY_OPA_DISP++, gDefaultMessageBackgroundTex, G_IM_FMT_I, 128, 64, 0, G_TX_MIRROR,
|
||||||
|
G_TX_MIRROR, 7, 0, G_TX_NOLOD, G_TX_NOLOD);
|
||||||
|
|
||||||
|
gSPTextureRectangle(POLY_OPA_DISP++, leftOffset << 2, (SCREEN_HEIGHT - bottomOffset - textboxHeight) << 2,
|
||||||
|
(textboxWidth + leftOffset) << 2, (SCREEN_HEIGHT - bottomOffset) << 2, G_TX_RENDERTILE, 0, 0,
|
||||||
|
texCoordinateWidthScale << 1, texCoordinateHeightScale << 1);
|
||||||
|
|
||||||
|
Interface_DrawTextLine(this->state.gfxCtx, noRandoGeneratedText[gSaveContext.language], 80, textVerticalOffset,
|
||||||
|
255, 255, 255, textAlpha, 0.6f, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
CLOSE_DISPS(this->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
||||||
void FileChoose_Main(GameState* thisx) {
|
void FileChoose_Main(GameState* thisx) {
|
||||||
static void* controlsTextures[] = {
|
static void* controlsTextures[] = {
|
||||||
gFileSelControlsENGTex,
|
gFileSelControlsENGTex,
|
||||||
@ -3369,8 +3442,10 @@ void FileChoose_Main(GameState* thisx) {
|
|||||||
gSPTextureRectangle(POLY_OPA_DISP++, 0x0168, 0x0330, 0x03A8, 0x0370, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
|
gSPTextureRectangle(POLY_OPA_DISP++, 0x0168, 0x0330, 0x03A8, 0x0370, G_TX_RENDERTILE, 0, 0, 0x0400, 0x0400);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw rando save warning over the controls text, but before the screen fill fade out
|
// Draw rando save version warning over the controls text, but before the screen fill fade out
|
||||||
FileChoose_DrawRandoSaveWarning(&this->state);
|
FileChoose_DrawRandoSaveVersionWarning(&this->state);
|
||||||
|
|
||||||
|
FileChoose_DrawNoRandoGeneratedWarning(&this->state);
|
||||||
|
|
||||||
gDPPipeSync(POLY_OPA_DISP++);
|
gDPPipeSync(POLY_OPA_DISP++);
|
||||||
gSPDisplayList(POLY_OPA_DISP++, sScreenFillSetupDL);
|
gSPDisplayList(POLY_OPA_DISP++, sScreenFillSetupDL);
|
||||||
|
Loading…
Reference in New Issue
Block a user