"TutorialDone" unlockable condition

Replace all instances of `MapBeaten RR_SunbeamParadiseSprings` with `TutorialDone`, for the new early exits to work.
This commit is contained in:
Sally Coolatta 2024-04-25 15:18:47 -04:00
parent 8ae80a58b9
commit 2c5caf582b
6 changed files with 39 additions and 18 deletions

View file

@ -2952,7 +2952,8 @@ static void readcondition(UINT16 set, UINT32 id, char *word2)
|| (++offset && fastcmp(params[0], "CREDITS"))
|| (++offset && fastcmp(params[0], "REPLAY"))
|| (++offset && fastcmp(params[0], "CRASH"))
|| (++offset && fastcmp(params[0], "TUTORIALSKIP")))
|| (++offset && fastcmp(params[0], "TUTORIALSKIP"))
|| (++offset && fastcmp(params[0], "TUTORIALDONE")))
{
//PARAMCHECK(1);
ty = UC_ADDON + offset;

View file

@ -4853,27 +4853,36 @@ void G_EndGame(void)
}
// Only do evaluation and credits in singleplayer contexts
if (!netgame && grandprixinfo.gp == true)
if (!netgame)
{
G_HandleSaveLevel(true);
if (nextmap == NEXTMAP_CEREMONY) // end game with ceremony
if (gametype == GT_TUTORIAL)
{
if (K_StartCeremony() == true)
// Tutorial was finished
gamedata->tutorialdone = true;
}
if (grandprixinfo.gp == true)
{
G_HandleSaveLevel(true);
if (nextmap == NEXTMAP_CEREMONY) // end game with ceremony
{
if (K_StartCeremony() == true)
{
return;
}
}
if (nextmap == NEXTMAP_CREDITS) // end game with credits
{
F_StartCredits();
return;
}
if (nextmap == NEXTMAP_EVALUATION) // end game with evaluation
{
F_InitGameEvaluation();
F_StartGameEvaluation();
return;
}
}
if (nextmap == NEXTMAP_CREDITS) // end game with credits
{
F_StartCredits();
return;
}
if (nextmap == NEXTMAP_EVALUATION) // end game with evaluation
{
F_InitGameEvaluation();
F_StartGameEvaluation();
return;
}
}

View file

@ -76,6 +76,7 @@ void srb2::save_ng_gamedata()
ng.milestones.finishedtutorialchallenge = gamedata->finishedtutorialchallenge;
ng.milestones.enteredtutorialchallenge = gamedata->enteredtutorialchallenge;
ng.milestones.sealedswapalerted = gamedata->sealedswapalerted;
ng.milestones.tutorialdone = gamedata->tutorialdone;
ng.milestones.gonerlevel = gamedata->gonerlevel;
ng.prisons.thisprisoneggpickup = gamedata->thisprisoneggpickup;
ng.prisons.prisoneggstothispickup = gamedata->prisoneggstothispickup;
@ -480,6 +481,7 @@ void srb2::load_ng_gamedata()
gamedata->finishedtutorialchallenge = js.milestones.finishedtutorialchallenge;
gamedata->enteredtutorialchallenge = js.milestones.enteredtutorialchallenge;
gamedata->sealedswapalerted = js.milestones.sealedswapalerted;
gamedata->tutorialdone = js.milestones.tutorialdone;
gamedata->gonerlevel = js.milestones.gonerlevel;
gamedata->thisprisoneggpickup = js.prisons.thisprisoneggpickup;
gamedata->prisoneggstothispickup = js.prisons.prisoneggstothispickup;

View file

@ -96,6 +96,7 @@ struct GamedataMilestonesJson final
bool finishedtutorialchallenge;
bool enteredtutorialchallenge;
bool sealedswapalerted;
bool tutorialdone;
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(
GamedataMilestonesJson,
@ -108,7 +109,8 @@ struct GamedataMilestonesJson final
majorkeyskipattempted,
finishedtutorialchallenge,
enteredtutorialchallenge,
sealedswapalerted
sealedswapalerted,
tutorialdone
)
};

View file

@ -676,6 +676,7 @@ void M_ClearStats(void)
gamedata->enteredtutorialchallenge = false;
gamedata->finishedtutorialchallenge = false;
gamedata->sealedswapalerted = false;
gamedata->tutorialdone = false;
gamedata->musicstate = GDMUSIC_NONE;
gamedata->importprofilewins = false;
@ -1726,6 +1727,8 @@ boolean M_CheckCondition(condition_t *cn, player_t *player)
return false;
case UC_TUTORIALSKIP:
return (gamedata->finishedtutorialchallenge == true);
case UC_TUTORIALDONE:
return (gamedata->tutorialdone == true);
case UC_PASSWORD:
return (cn->stringvar == NULL);
@ -2605,6 +2608,8 @@ static const char *M_GetConditionString(condition_t *cn)
return NULL;
case UC_TUTORIALSKIP:
return "successfully skip the Tutorial";
case UC_TUTORIALDONE:
return "complete the Tutorial";
case UC_PASSWORD:
return "enter a secret password";

View file

@ -67,6 +67,7 @@ typedef enum
UC_REPLAY, // Save a replay
UC_CRASH, // Hee ho !
UC_TUTORIALSKIP, // Complete the Tutorial Challenge
UC_TUTORIALDONE, // Complete the Tutorial at all
UC_PASSWORD, // Type in something funny
@ -393,6 +394,7 @@ struct gamedata_t
boolean enteredtutorialchallenge;
boolean finishedtutorialchallenge;
boolean sealedswapalerted;
boolean tutorialdone;
gdmusic_t musicstate;
UINT8 gonerlevel;