Merge branch 'challenge-kindnesses' into 'master'

Challenge Kindnesses

See merge request KartKrew/Kart!2328
This commit is contained in:
Oni 2024-05-01 01:05:58 +00:00
commit 0582a00040
5 changed files with 51 additions and 34 deletions

View file

@ -493,7 +493,12 @@ void srb2::load_ng_gamedata()
gamedata->tutorialdone = js.milestones.tutorialdone;
gamedata->gonerlevel = js.milestones.gonerlevel;
gamedata->thisprisoneggpickup = js.prisons.thisprisoneggpickup;
gamedata->prisoneggstothispickup = js.prisons.prisoneggstothispickup;
if (gamedata->prisoneggstothispickup > GDINIT_PRISONSTOPRIZE)
{
gamedata->prisoneggstothispickup = GDINIT_PRISONSTOPRIZE;
}
size_t emblems_size = js.emblems.size();
for (size_t i = 0; i < std::min((size_t)MAXEMBLEMS, emblems_size); i++)

View file

@ -398,6 +398,20 @@ badgrid:
gamedata->challengegridwidth = 0;
}
static void M_ChallengeGridExtraDataAdjacencyRules(challengegridextradata_t *extradata, UINT16 adjacent)
{
// Adjacent unlocked tile, permit hint/general key skip.
if (gamedata->unlocked[adjacent] == true)
{
extradata->flags |= CHE_HINT;
}
// Adjacent locked small tile, prevent 10x key skip.
else if (unlockables[adjacent].majorunlock == false)
{
extradata->flags &= ~CHE_ALLCLEAR;
}
}
void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
{
UINT16 i, j, num, id, tempid, work;
@ -489,14 +503,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
}
else if (work < MAXUNLOCKABLES)
{
if (gamedata->unlocked[work] == true)
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
}
}
@ -534,14 +541,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
}
else if (work < MAXUNLOCKABLES)
{
if (gamedata->unlocked[work] == true)
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
}
}
@ -566,14 +566,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
}
else if (work < MAXUNLOCKABLES)
{
if (gamedata->unlocked[work] == true)
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
}
}
@ -595,14 +588,7 @@ void M_UpdateChallengeGridExtraData(challengegridextradata_t *extradata)
}
else if (work < MAXUNLOCKABLES)
{
if (gamedata->unlocked[work] == true)
{
extradata[id].flags |= CHE_HINT;
}
else
{
extradata[id].flags &= ~CHE_ALLCLEAR;
}
M_ChallengeGridExtraDataAdjacencyRules(extradata+id, work);
}
}
}

View file

@ -302,7 +302,7 @@ typedef enum {
#define GDCONVERT_ROUNDSTOKEY 5
#define GDINIT_CHAOKEYS 10 // Start with 10 Chao Keys !!
#define GDINIT_PRISONSTOPRIZE 30 // 30 Prison Eggs to your [Wild Prize] !!
#define GDINIT_PRISONSTOPRIZE 15 // 15 Prison Eggs to your [Wild Prize] !!
typedef enum {
GDGONER_INIT = 0,

View file

@ -535,6 +535,31 @@ void f_difficulty()
}
}
void f_keys()
{
INT32 givekeys = 25;
if (gamedata->chaokeys > (GDMAX_CHAOKEYS - givekeys))
{
givekeys = GDMAX_CHAOKEYS - gamedata->chaokeys;
}
if (givekeys > 0)
{
S_StartSound(0, sfx_keygen);
gamedata->chaokeys += givekeys;
gamedata->chaokeytutorial = true;
M_StartMessage("Dr. Robotnik's Ring Racers - Deluxe Edition", va("Claimed %d Chao Keys!", givekeys), NULL, MM_NOTHING, NULL, NULL);
G_SaveGameData();
}
else
{
M_StartMessage("Dr. Robotnik's Ring Racers - Deluxe Edition", "You have the maximum number of Chao Keys!", NULL, MM_NOTHING, NULL, NULL);
}
}
void f_devmode()
{
INT32 i;
@ -737,4 +762,5 @@ void M_PasswordInit(void)
passwords.emplace_back(f_timeattack, "mFu5OB9d6jnc2kth7HE66wJ42F/GHDzSvuciK1Qw++6iGnpBccxcKjpoxgOvD3eIoqR606ruBINuXi23proXHQ==");
passwords.emplace_back(f_encore, "i5u5sIsMs5eITy+LzAXvKm6D9OzOVKhUqSy1mTTV/oUxJX6RPsk8OcyLbNaey9Vc6wXOhz+2+mTXILkIRzvXqA==");
passwords.emplace_back(f_difficulty, "MKjOtEFLkgXf21uiECdBTU6XtbkuFWaGh7i8znKo7JrXXEDrCBJmGwINvPg0T3TLn0zlscLvmC5nve7I+NTrnA==");
passwords.emplace_back(f_keys, "jgsD6UJ2Xa10QcS2ZDJwcvpd4iia3AXIG8wDDSsHX7kFH5jEXnym45yaNZG9hIKEvBMpVONKR0YTA6JBAQRCvg==");
}

View file

@ -507,7 +507,7 @@ static void M_ChallengesTutorial(UINT8 option)
"to break open Big Challenge tiles.\n"
"\n"
"You'll also need to unlock\n"
"the surrounding tiles first.\n"
"any surrounding small tiles first.\n"
), NULL, MM_NOTHING, NULL, NULL);
gamedata->majorkeyskipattempted = true;
break;